- #include "reg52.h"
- void digitalWrite(char PinNum, bit Command){
- if(Command){
- P1 |= 0x01 << PinNum;
- }else{
- P1 &= ~(0x01 << PinNum);
- }
- }
- bit digitalRead(char PinNum){
- if(P1 & (0x01<<PinNum))
- return 1;
- else
- return 0;
- }
- //單總線延時函數
- void Delay_OneWire(unsigned int t){
- while(t--);
- }
- //通過單總線向DS18B20寫一個字節
- void Write_DS18B20(unsigned char N,unsigned char dat){
- unsigned char i;
- for(i=0;i<8;i++){
- digitalWrite(N,0);
- digitalWrite(N,dat&0x01);
- Delay_OneWire(5);
- digitalWrite(N,1);
- dat >>= 1;
- }
- Delay_OneWire(5);
- }
- //從DS18B20讀取一個字節
- unsigned char Read_DS18B20(unsigned char N){
- unsigned char i;
- unsigned char dat;
-
- for(i=0;i<8;i++){
- digitalWrite(N,0);
- dat >>= 1;
- digitalWrite(N,1);
- if(digitalRead(N)){
- dat |= 0x80;
- }
- Delay_OneWire(5);
- }
- return dat;
- }
- //DS18B20設備初始化
- bit init_ds18b20(unsigned char N){
- bit initflag = 0;
-
- digitalWrite(N,1);
- Delay_OneWire(12);
- digitalWrite(N,0);
- Delay_OneWire(80);
- digitalWrite(N,1);
- Delay_OneWire(10);
- initflag = digitalRead(N);
- Delay_OneWire(5);
-
- return initflag;
- }
- unsigned int rd_temperature(unsigned char N){
- unsigned char low, high;
- init_ds18b20(N); // 初始化
- Write_DS18B20(N,0xCC); // 跳過ROM
- Write_DS18B20(N,0x44); // 啟動溫度轉換
- init_ds18b20(N);
- Write_DS18B20(N,0xCC);
- Write_DS18B20(N,0xBE); // 讀取寄存器
- low = Read_DS18B20(N); // 低字節
- high = Read_DS18B20(N); // 高字節
- return (high<<8)+low;
- }
復制代碼 就這個代碼,rd_temperature函數讀數據 |