STC12C5A60S2單片機的DS18B20的C程序
最近在搞18B20,發(fā)現(xiàn)其對CPU的不兼容性很高,由于其對時間信號的敏感引起的
本文引用地址:http://butianyuan.cn/article/201611/320752.htm由于STC單片機的速度比8051速度快,屬于1個時鐘/機器周期高速單片機。速度快當然是它的優(yōu)點,但對于要移植傳統(tǒng)的8051程序而言,需要修改時序來實現(xiàn)某功能.
以下程序是ds18b20簡單的驅(qū)動程序,其實是在網(wǎng)上Down的,經(jīng)本人稍作修改之后,在STC12C5A60S2中調(diào)試通過的,最后讀溫度返回一個unsigned int,低12位就是溫度數(shù)據(jù)。在主程序里進行運算即可得到實際溫度值。呵呵~~
void delay_18B20(unsigned int i)
{
while(i--);
}
void Init_DS18B20(void)
{
unsigned char x=0;
DQ = 1;
delay_18B20(80); //稍做延時
DQ = 0;
delay_18B20(800); //精確延時 大于 480us
DQ = 1;
delay_18B20(140);
x=DQ;
}
unsigned char ReadOneChar(void)
{
uchar i=0;
uchar dat = 0;
for (i=8;i>0;i--)
{
}
}
void WriteOneChar(uchar dat)
{
}
}
unsigned int ReadTemp(void)
{
unsigned char a=0;
unsigned char b=0;
unsigned int temp_value=0;
Init_DS18B20();
WriteOneChar(0xCC);
WriteOneChar(0x44);
delay_18B20(1000);
Init_DS18B20();
WriteOneChar(0xCC);
WriteOneChar(0xBE);
delay_18B20(1000);
a=ReadOneChar();
b=ReadOneChar();
temp_value = b<<8;
temp_value |= a;
return temp_value;
}
評論