📄 18b20.lst
字号:
C51 COMPILER V8.02 18B20 01/11/2009 12:47:15 PAGE 1
C51 COMPILER V8.02, COMPILATION OF MODULE 18B20
OBJECT MODULE PLACED IN 18b20.OBJ
COMPILER INVOKED BY: D:\keil\C51\BIN\C51.EXE 18b20.c BROWSE DEBUG OBJECTEXTEND
line level source
1 #include <reg52.h> // 引用标准库的头文件
2 #include "18b20.h"
3 #include "1602.h"
4
5 /* 延时t毫秒 */
6 void delay(uchar t)
7 {
8 1 uchar i;
9 1 while(t--)
10 1 {
11 2 for (i=0;i<125;i++);
12 2 }
13 1 }
14
15 /* 产生复位脉冲初始化DS18B20 */
16 void TxReset(void)
17 {
18 1 uint i;
19 1 DQ = 0;
20 1
21 1 /* 拉低约900us */
22 1 i = 100;
23 1 while (i>0) i--;
24 1
25 1 DQ = 1; // 产生上升沿
26 1 i = 4;
27 1 while (i>0) i--;
28 1 }
29
30 /* 等待应答脉冲 */
31 void RxWait(void)
32 {
33 1 uint i;
34 1 while(DQ);
35 1 while(~DQ); // 检测到应答脉冲
36 1 i = 4;
37 1 while (i>0) i--;
38 1 }
39
40 /* 读取数据的一位,满足读时隙要求 */
41 bit RdBit(void)
42 {
43 1 uint i;
44 1 bit b;
45 1 DQ = 0;
46 1 i++;
47 1 DQ = 1;
48 1 i++;i++; // 延时15us以上,读时隙下降沿后15us,DS18B20输出数据才有效
49 1 b = DQ;
50 1 i = 8;
51 1 while(i>0) i--;
52 1 return (b);
53 1 }
54
55 /* 读取数据的一个字节 */
C51 COMPILER V8.02 18B20 01/11/2009 12:47:15 PAGE 2
56 uchar RdByte(void)
57 {
58 1 uchar i,j,b;
59 1 b = 0;
60 1 for (i=1;i<=8;i++)
61 1 {
62 2 j = RdBit();
63 2 b = (j<<7)|(b>>1);
64 2 }
65 1 return(b);
66 1 }
67
68 /* 写数据的一个字节,满足写1和写0的时隙要求 */
69 void WrByte(uchar b)
70 {
71 1 uint i;
72 1 uchar j;
73 1 bit btmp;
74 1 for(j=1;j<=8;j++)
75 1 {
76 2 btmp = b&0x01;
77 2 b = b>>1; // 取下一位(由低位向高位)
78 2 if (btmp)
79 2 {
80 3 /* 写1 */
81 3 DQ = 0;
82 3 i++;i++; // 延时,使得15us以内拉高
83 3 DQ = 1;
84 3 i = 8;
85 3 while(i>0) i--; // 整个写1时隙不低于60us
86 3 }
87 2 else
88 2 {
89 3 /* 写0 */
90 3 DQ = 0;
91 3 i = 8;
92 3 while(i>0) i--; // 保持低在60us到120us之间
93 3 DQ = 1;
94 3 i++;
95 3 i++;
96 3 }
97 2 }
98 1 }
99
100 /* 启动温度转换 */
101 void convert(void)
102 {
103 1 TxReset(); // 产生复位脉冲,初始化DS18B20
104 1 RxWait(); // 等待DS18B20给出应答脉冲
105 1 delay(1); // 延时
106 1 WrByte(0xcc); // skip rom 命令
107 1 WrByte(0x44); // convert T 命令
108 1 }
109
110 uint get_temp(void)
111 {
112 1 uint tmp = 0;
113 1
114 1 delay(1); // 延时1ms
115 1 convert(); // 启动温度转换,需要750ms
116 1 delay(250);
117 1 delay(250);
C51 COMPILER V8.02 18B20 01/11/2009 12:47:15 PAGE 3
118 1 delay(250); // 延时750ms
119 1 //return RdTemp(); // 读取温度
120 1
121 1 TxReset(); // 产生复位脉冲,初始化DS18B20
122 1 RxWait(); // 等待DS18B20给出应答脉冲
123 1 delay(1); // 延时
124 1 WrByte(0xcc); // skip rom 命令
125 1 WrByte(0xbe); // read scratchpad 命令
126 1 tmp = RdByte(); // 温度值低位字节(其中低4位为二进制的“小数”部分)
127 1 tmp += RdByte()<<8; // 高位值高位字节(其中高5位为符号位
128 1 return tmp;
129 1 }
130
131 void main(void)
132 {
133 1 LcdInit();
134 1
135 1 while(1)
136 1 {
137 2 uint tmp = 0;
138 2 uchar t = 0;
139 2 delay(250);
140 2 delay(250);
141 2 delay(250);
142 2 delay(250);
143 2 tmp = get_temp();
144 2 t = tmp>>4;
145 2 DisChar();
*** WARNING C209 IN LINE 145 OF 18B20.C: '_DisChar': too few actual parameters
146 2 }
147 1 }
MODULE INFORMATION: STATIC OVERLAYABLE
CODE SIZE = 329 ----
CONSTANT SIZE = 10 ----
XDATA SIZE = ---- ----
PDATA SIZE = ---- ----
DATA SIZE = ---- 3
IDATA SIZE = ---- ----
BIT SIZE = ---- 2
END OF MODULE INFORMATION.
C51 COMPILATION COMPLETE. 1 WARNING(S), 0 ERROR(S)
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -