C51 COMPILER V9.59.0.0 ONEWIRE 02/24/2024 21:37:53 PAGE 1 C51 COMPILER V9.59.0.0, COMPILATION OF MODULE ONEWIRE OBJECT MODULE PLACED IN .\Objects\onewire.obj COMPILER INVOKED BY: D:\Keil_v5\C51\BIN\C51.EXE ..\Driver\onewire.c OPTIMIZE(8,SPEED) BROWSE INCDIR(..\Driver) DEBUG OBJ -ECTEXTEND PRINT(.\Listings\onewire.lst) TABS(2) OBJECT(.\Objects\onewire.obj) line level source 1 /* # 单总线代码片段说明 2 1. 本文件夹中提供的驱动代码供参赛选手完成程序设计参考。 3 2. 参赛选手可以自行编写相关代码或以该代码为基础,根据所选单片机类型、 -行速度和试题 4 中对单片机时钟频率的要求,进行代码调试和修改。 5 */ 6 #include "onewire.h" 7 #include "REG52.H" 8 sbit DQ = P1 ^ 4; // 单总线数据口 9 // 10 void Delay_OneWire(unsigned int t) 11 { 12 1 unsigned char i; 13 1 while (t--) 14 1 { 15 2 for (i = 0; i < 12; i++) 16 2 ; 17 2 } 18 1 } 19 20 // 21 void Write_DS18B20(unsigned char dat) 22 { 23 1 unsigned char i; 24 1 for (i = 0; i < 8; i++) 25 1 { 26 2 DQ = 0; 27 2 DQ = dat & 0x01; 28 2 Delay_OneWire(5); 29 2 DQ = 1; 30 2 dat >>= 1; 31 2 } 32 1 Delay_OneWire(5); 33 1 } 34 35 // 36 unsigned char Read_DS18B20(void) 37 { 38 1 unsigned char i; 39 1 unsigned char dat; 40 1 41 1 for (i = 0; i < 8; i++) 42 1 { 43 2 DQ = 0; 44 2 dat >>= 1; 45 2 DQ = 1; 46 2 if (DQ) 47 2 { 48 3 dat |= 0x80; 49 3 } 50 2 Delay_OneWire(5); 51 2 } 52 1 return dat; 53 1 } C51 COMPILER V9.59.0.0 ONEWIRE 02/24/2024 21:37:53 PAGE 2 54 55 // 56 bit init_ds18b20(void) 57 { 58 1 bit initflag = 0; 59 1 60 1 DQ = 1; 61 1 Delay_OneWire(12); 62 1 DQ = 0; 63 1 Delay_OneWire(80); 64 1 DQ = 1; 65 1 Delay_OneWire(10); 66 1 initflag = DQ; 67 1 Delay_OneWire(5); 68 1 69 1 return initflag; 70 1 } 71 72 float rd_temperature() 73 { 74 1 unsigned char low, high; 75 1 init_ds18b20(); 76 1 Write_DS18B20(0xcc); // 跳过ROM 77 1 Write_DS18B20(0x44); // 启动温度转换 78 1 79 1 init_ds18b20(); 80 1 Write_DS18B20(0xcc); // 跳过ROM 81 1 Write_DS18B20(0xbe); // 读取温度值 82 1 low = Read_DS18B20(); 83 1 high = Read_DS18B20(); 84 1 return (float)(high << 8 | low) * 0.0625; 85 1 } MODULE INFORMATION: STATIC OVERLAYABLE CODE SIZE = 195 ---- CONSTANT SIZE = ---- ---- XDATA SIZE = ---- ---- PDATA SIZE = ---- ---- DATA SIZE = ---- ---- IDATA SIZE = ---- ---- BIT SIZE = ---- 1 END OF MODULE INFORMATION. C51 COMPILATION COMPLETE. 0 WARNING(S), 0 ERROR(S)