|
請(qǐng)求大神們解答一下下面的報(bào)錯(cuò)是怎么回事,我是初學(xué)者,所以一直不知道怎么調(diào)試,謝謝大神們
#include<reg52.h>
void Seg7_Display(u16 val,u8 Dec_Hex);
bit DS18B20_Reset();
void DS18B20_WriteData(u8 dat);
u8 DS18B20_ReadData();
sbit DSI18B20_DQ = P3^7;
u8 tempL;
u16 tempH;
u16 temp;
void main()
{
while(1)
{
DS18B20_Reset();
DS18B20_WriteData(0xcc); //跳過(guò)rom檢測(cè)
DS18B20_WriteData(0x44); //啟動(dòng)溫度轉(zhuǎn)換
DS18B20_Reset();
DS18B20_WriteData(0xcc); //跳過(guò)rom檢測(cè)
DS18B20_WriteData(0xBE); //讀暫存器命令
tempL = DS18B20_ReadData(); //讀溫度低位
tempH = DS18B20_ReadData(); //讀溫度高位
tempH = (temp<<8) | tempL;
if((tempH&0xF800) == 0xF800) //如果為負(fù)值按位取反加1
tempH = ~tempH + 1;
temp = tempH * 0.0625 *10;
Seg7_Display(temp,10);
}
}
bit DS18B20_Reset()
{
bit flag;
u8 i;
DS18B20_DQ = 0;
for(i=240;i>0;i--); //每執(zhí)行一次,是倆個(gè)機(jī)械周期 240x2=480us
DS18B20_DQ = i;
for(i=30;i>0;i--); //延時(shí)約80us
flag = DS18B20_DQ;
for(i=200;i>0;i--); //延時(shí)約400us
return flag;
}
void DS18B20_WriteData(u8 dat)
{
u8 i,j;
for (j=0;j<8;j++);
{
DS18B20_DQ = 0;
for(i=2;i>0;i--);
DS18B20_DQ = dat & 0x01; //取出最低位
for(i=30;i>0;i--); //延時(shí)約60us
DS18B20_DQ = 1; //釋放總線
dat = dat >> 1;
}
}
u8 DS18B20_ReadData()
{
u8 i,j,rdata;
for(j=0;j<8;j++);
{
rdata >>=1;
DS18B20_DQ = 0;
for(i=2;i>0;i--);
DS18B20_DQ = 1;
for(i=3;i>0;i--); //延時(shí)
if(DS18B20_DQ==1)
rdat=rdata | 0x80;
for(i=30;i>0;i--); //延時(shí)約60us
DS18B20_DQ = 1; //釋放總線
}
return rdata;
}
|
-
|