資源描述:
《C語(yǔ)言單片機(jī)開(kāi)發(fā)精確延時(shí)》由會(huì)員上傳分享,免費(fèi)在線閱讀,更多相關(guān)內(nèi)容在行業(yè)資料-天天文庫(kù)。
1、這是C程序:#include#include#include#defineucharunsignedchar#definetempintDBYTE[0X30]#definetempdfDBYTE[0X31]ucharcodetab[]={0XC0,0XF9,0XA4,0XB0,0X99,0X92,0X82,0XF8,0X80,0X90};sbitdat="P1"^4;voidset_ds18b20();??????????????//初始化DS18B20子程序voidget
2、_temperature();??????????//獲得溫度子程序voidread_ds18b20();?????????????//讀DS18B20子程序voidwrite_ds18b20(ucharcommand);//向DS18B20寫(xiě)1字節(jié)子程序voiddelayms(ucharcount);???????//延時(shí)count毫秒子程序voiddisp_temp();????????????????//顯示溫度子程序voidmain(){????EA="0";???????????????????????//禁止中斷????
3、SP="0x60";????????????????????//設(shè)置堆棧指針????while(1)????{????????get_temperature();??????//獲得溫度????????disp_temp();????????????//顯示溫度????}}voidset_ds18b20(){???while(1)???{???????uchardelay,flag;???????flag="0";???????dat="0";???????????????????//數(shù)據(jù)線置低電平???????delay="250
4、";???????while(--delay);??????????//低電平保持500us???????dat="1";???????????????????//數(shù)據(jù)線置高電平???????delay="30";???????while(--delay);??????????//低電平保持60us???????while(dat==0)????????????//判斷DS18B20是否發(fā)出低電平信號(hào)???????{???????????delay="120";???????????//DS18B20響應(yīng),延時(shí)240us??????
5、?????while(--delay);???????????if(dat)??????????????//DS18B20發(fā)出高電平初始化成功,返回???????????{???????????????flag="1";??????????//DS18B20初始化成功標(biāo)志???????????????break;???????????}???????}???????if(flag)?????????????????//初始化成功,再延時(shí)480us???????{???????????delay="240";???????????wh
6、ile(--delay);???????????break;???????}???}}voidget_temperature()???????????//溫度轉(zhuǎn)換、獲得溫度子程序{???set_ds18b20();???????????????//初始化DS18B20???write_ds18b20(0xcc);?????????//發(fā)跳過(guò)ROM匹配命令???write_ds18b20(0x44);?????????//發(fā)溫度轉(zhuǎn)換命令???disp_temp();?????????????????//顯示溫度,等待轉(zhuǎn)換結(jié)束,大于60
7、0ms???set_ds18b20();???write_ds18b20(0xcc);?????????//發(fā)跳過(guò)ROM匹配命令???write_ds18b20(0xbe);?????????//發(fā)出讀溫度命令???read_ds18b20();??????????????//將讀出的溫度數(shù)據(jù)保存到tempint和tempdf處}voidread_ds18b20(){???uchardelay,i,j,temp,temph,templ;???j="2";?????????????????????????//讀2位字節(jié)數(shù)據(jù)???do?
8、??{???for(i=8;i>0;i--)?????????????//一個(gè)字節(jié)分8位讀取???{???????temp>>=1;????????????????//讀取1位右移1位???????dat="0";??????????