51_LanQiaoBei/模板/蓝桥杯全模块测试例程/DS18B20温度模块/User/Listings/onewire.lst

126 lines
4.0 KiB
Plaintext
Raw Permalink Normal View History

2025-04-13 01:02:19 +08:00
C51 COMPILER V9.59.0.0 ONEWIRE 05/02/2024 15:57:34 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. 参赛选手可以自行编写相关代码或以该代码为基础根据所选单片机类型、<E59E8B><E38081>
-<2D>行速度和试题
4 中对单片机时钟频率的要求,进行代码调试和修改。
5 */
6 #include "onewire.h"
7 #include "REG52.H"
8 #include "intrins.h"
9 sbit DQ = P1 ^ 4; // 单总线数据口
10 void Delay4us(void) //@12.000MHz
11 {
12 1 unsigned char data i;
13 1
14 1 _nop_();
15 1 _nop_();
16 1 i = 9;
17 1 while (--i)
18 1 ;
19 1 }
20
21 //
22 void Delay_OneWire(unsigned int t)
23 {
24 1 unsigned char i;
25 1 while (t--)
26 1 {
27 2 for (i = 0; i < 12; i++)
28 2 ;
29 2 }
30 1 }
31
32 //
33 void Write_DS18B20(unsigned char dat)
34 {
35 1 unsigned char i;
36 1 for (i = 0; i < 8; i++)
37 1 {
38 2 DQ = 0;
39 2 DQ = dat & 0x01;
40 2 Delay_OneWire(5);
41 2 DQ = 1;
42 2 dat >>= 1;
43 2 }
44 1 Delay_OneWire(5);
45 1 }
46
47 //
48 unsigned char Read_DS18B20(void)
49 {
50 1 unsigned char i;
51 1 unsigned char dat;
52 1
53 1 for (i = 0; i < 8; i++)
C51 COMPILER V9.59.0.0 ONEWIRE 05/02/2024 15:57:34 PAGE 2
54 1 {
55 2 DQ = 0;
56 2 dat >>= 1;
57 2 DQ = 1;
58 2 Delay4us();
59 2 if (DQ)
60 2 {
61 3 dat |= 0x80;
62 3 }
63 2 Delay_OneWire(5);
64 2 }
65 1 return dat;
66 1 }
67
68 //
69 bit init_ds18b20(void)
70 {
71 1 bit initflag = 0;
72 1
73 1 DQ = 1;
74 1 Delay_OneWire(12);
75 1 DQ = 0;
76 1 Delay_OneWire(80);
77 1 DQ = 1;
78 1 Delay_OneWire(10);
79 1 initflag = DQ;
80 1 Delay_OneWire(5);
81 1
82 1 return initflag;
83 1 }
84
85 float rd_temperature()
86 {
87 1 unsigned char low, high;
88 1 init_ds18b20();
89 1 Write_DS18B20(0xcc); // 跳过ROM
90 1 Write_DS18B20(0x44); // 启动温度转换
91 1 Delay_OneWire(200); // 等待温度转换
92 1 init_ds18b20();
93 1 Write_DS18B20(0xcc); // 跳过ROM
94 1 Write_DS18B20(0xbe); // 读取温度值
95 1 low = Read_DS18B20();
96 1 high = Read_DS18B20();
97 1 return (float)(high << 8 | low) * 0.0625;
98 1 }
MODULE INFORMATION: STATIC OVERLAYABLE
CODE SIZE = 212 ----
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)