|
|||||||||||
| 技術(shù)交流 | 電路欣賞 | 工控天地 | 數(shù)字廣電 | 通信技術(shù) | 電源技術(shù) | 測(cè)控之家 | EMC技術(shù) | ARM技術(shù) | EDA技術(shù) | PCB技術(shù) | 嵌入式系統(tǒng) 驅(qū)動(dòng)編程 | 集成電路 | 器件替換 | 模擬技術(shù) | 新手園地 | 單 片 機(jī) | DSP技術(shù) | MCU技術(shù) | IC 設(shè)計(jì) | IC 產(chǎn)業(yè) | CAN-bus/DeviceNe |
共享我的18B20通訊程序 |
| 作者:sarszhang 欄目:單片機(jī) |
這是我在16F877,18F1320,18F1220上通過(guò)的18B20程序,18B20主要是延時(shí)問(wèn)題,這個(gè)解決了,什么都可以通過(guò)。 # include <pic18f1220.h> # define uch unsigned CHAR # define unint unsigned int # define DQ RB3 //定義18B20數(shù)據(jù)端口 # define DQ_DIR TRISB3 //定義18B20D口方向寄存器 # define W1_INPUT 1 # define W1_OUTPUT 0 # define FALSE 0 # define TRUE !FALSE # define DQ_HIGH() DQ_DIR = W1_INPUT # define DQ_LOW() DQ = 0; DQ_DIR = W1_OUTPUT void delay(unint x) { unint d; d=x; while(--d) {;} } bit reset(void) //初始化18B20 { static bit presence; //定義一個(gè)應(yīng)答信號(hào) DQ_LOW(); delay(70); //置總線為低電平并保持至少480us DQ_HIGH(); //等電阻拉高總線并保持15-60us delay(5); presence=DQ; //接受應(yīng)答信號(hào) delay(20); //延時(shí)60-240us return(presence); //返回應(yīng)答信號(hào) } //*************** 讀一位函數(shù)******************// bit read_bit(void) { static bit i; DQ_LOW(); DQ_LOW(); DQ_HIGH(); asm("nop"); asm("nop"); asm("nop"); i=DQ; delay(3); return(i); } //*********************寫一位函數(shù)****************// void write_bit(uch bitval) { DQ_LOW(); delay(1); if (bitval==1) { DQ_HIGH(); } delay(3); DQ_HIGH(); } //************** 從18B20中讀一個(gè)字節(jié)**************// uch read_byte(void) { uch i; uch j; uch VALUE=0; for (i=0;i<8;i++) { j=read_bit(); //調(diào)讀位函數(shù) if (j) //如果是 1 置1 { VALUE|=(0x01<<i); //先讀低位,再讀高位 asm("nop"); asm("nop"); asm("nop"); } } //否則置 0 return(VALUE); } //*********************向18B20中 寫一個(gè)字節(jié)**************// void write_byte(uch val) { uch i; uch TEMP; for (i=0;i<8;i++) { TEMP=val>>i; TEMP&=0x01; write_bit(TEMP); //調(diào)寫位函數(shù) } asm("nop"); asm("nop"); asm("nop"); } main() { uch teml,temh; GIE=0; OSCCON=0X6E; //這是18F1320的頻率選擇寄存器 ADCON1=0X7F; do{ ; }while (reset()) ; //復(fù)位等待從機(jī)應(yīng)答 write_byte(0XCC); //忽略ROM匹配 write_byte(0X44); //發(fā)送溫度轉(zhuǎn)化命令 delay(25000); //延時(shí)100-300us do { ; }while( reset()); //再次復(fù)位,等待從機(jī)應(yīng)答 write_byte(0XCC); //忽略ROM匹配 write_byte(0XBE); //發(fā)送讀溫度命令 teml =read_byte(); //讀出溫度低8 temh=read_byte(); |
| 2樓: | >>參與討論 |
| 作者: 冷若寒 于 2005/4/9 14:00:00 發(fā)布:
RE 18B20 是什么東東? |
|
| 3樓: | >>參與討論 |
| 作者: YK829 于 2005/4/10 12:55:00 發(fā)布:
RE 18B20也是三個(gè)引腳么?他有寄生電源模式么?如果有請(qǐng)不吝賜教它的寄生電路圖。我現(xiàn)在用1820,可是我不能確定我的電路圖對(duì)不對(duì)。謝謝! |
|
| 4樓: | >>參與討論 |
| 作者: fish_sman 于 2005/4/11 20:13:00 發(fā)布:
18B20數(shù)字式溫度傳感器 google上一搜就都知道了。 我們學(xué)校參加電子大賽的好像用到了。 |
|
| 5樓: | >>參與討論 |
| 作者: dzdiy 于 2006/8/29 9:32:00 發(fā)布:
是否試過(guò)負(fù)溫度? sarszhang兄:我用你的程序測(cè)量0~+125攝氏度正常,負(fù)溫度0~-55攝氏度讀出值都為零,請(qǐng)問(wèn)你是否試過(guò)負(fù)溫度? |
|
|
|
| 免費(fèi)注冊(cè)為維庫(kù)電子開發(fā)網(wǎng)會(huì)員,參與電子工程師社區(qū)討論,點(diǎn)此進(jìn)入 |
Copyright © 1998-2006 m.58mhw.cn 浙ICP證030469號(hào) |