DS18B20總輸出255,數值不會改變18b20 程序如下:
- #include "STC15F2K60S2.h"
- sbit DQ = P1^4; //單總線接口
- //單總線延時函數
- void Delay_OneWire(unsigned int t) //STC89C52RC
- {
- while(t--);
- }
- void delay_18b20()
- {
- unsigned int x,y;
- for(x = 1;x>0;x--)
- for(y=110;y>0;y--);
- }
- //通過單總線向DS18B20寫一個字節
- void Write_DS18B20(unsigned char dat)
- {
- unsigned char i;
- for(i=0;i<8;i++)
- {
- DQ = 0;
- DQ = dat&0x01;
- Delay_OneWire(5);
- DQ = 1;
- dat >>= 1;
- }
- Delay_OneWire(5);
- }
- //從DS18B20讀取一個字節
- unsigned char Read_DS18B20(void)
- {
- unsigned char i;
- unsigned char dat;
-
- for(i=0;i<8;i++)
- {
- DQ = 0;
- dat >>= 1;
- DQ = 1;
- if(DQ)
- {
- dat |= 0x80;
- }
- Delay_OneWire(5);
- }
- return dat;
- }
- //DS18B20設備初始化
- bit init_ds18b20(void)
- {
- bit initflag = 0;
-
- DQ = 1;
- Delay_OneWire(12);
- DQ = 0;
- Delay_OneWire(80);
- DQ = 1;
- Delay_OneWire(10);
- initflag = DQ;
- Delay_OneWire(5);
-
- return initflag;
- }
- unsigned char DS18B20()
- {
- unsigned char low,hig;
- unsigned int wendu;
- init_ds18b20();
- Write_DS18B20(0xcc);
- Write_DS18B20(0x44);
- Delay_OneWire(200);
- init_ds18b20();
- Write_DS18B20(0xcc);
- Write_DS18B20(0xbe);
- low = Read_DS18B20();
- hig = Read_DS18B20();
- wendu = low / 16 + hig * 16;
- return wendu;
- }
復制代碼
|