📄 18b20.lst
字号:
C51 COMPILER V8.02 18B20 04/20/2007 12:04:09 PAGE 1
C51 COMPILER V8.02, COMPILATION OF MODULE 18B20
OBJECT MODULE PLACED IN C:\DOCUME~1\ADMINI~1\桌面\DS18B2~1\18B20.OBJ
COMPILER INVOKED BY: C:\Keil\C51\BIN\C51.EXE C:\DOCUME~1\ADMINI~1\桌面\DS18B2~1\18B20.C DB SB OE
line level source
1 #include"reg51.h"
2 #include"intrins.h"
3
4 #define uchar unsigned char
5 #define uint unsigned int
6 #define dis_show P0
7 #define dis_con P2
8
9 sbit DS=P3^7;
10 sbit DIN=P1^7;
11 //sbit P1_6=P1^6;
12
13
14 uchar code dis_7[11]={0x18,0xde,0x34,0x94,0xd2,0x91,0x11,0xd8,0x10,0x90,0xf7};//数码管0~9,不亮 ,-
15 uchar code scan_con[2]={0xfe,0xfd};//列扫描
16 uchar data temp_data[2] ={0x01,0x91}; //读出温度暂存单元 ={0x50,0x05}; 高位存高位 低位存低位
17 uchar data dis_data[5];
18 void delay(uint t)
19 {
20 1 for(;t>0;t--);//循环一次延时11us
21 1 }
22
23 //18b20复位程序
24
25 void reset()
26 {
27 1 uint h;
28 1 bit flag=1;
29 1 while(flag)
30 1 {
31 2 while(flag)
32 2 {
33 3 DS=1;
34 3 _nop_(); _nop_(); _nop_();
35 3 DS=0;//以上程序段制造一个下降延
36 3 delay(50);//延时550us 最短延时480us
37 3 DS=1;//18b20在上升延后等待15~60us发出存在脉冲,低电平持续60~240us 复位成功
38 3 delay(3);
39 3 flag=DS;
40 3 }
41 2
42 2 delay(50);//延时550us 看电平能不能升高 如果能升高证明是 低电平脉冲
43 2 DS=1;
44 2 flag=~DS;
45 2
46 2 }
47 1
48 1 }
*** WARNING C280 IN LINE 27 OF C:\DOCUME~1\ADMINI~1\桌面\DS18B2~1\18B20.C: 'h': unreferenced local variable
49 //18b20写命令函数
50
51 void write(uchar rule)
52 {
53 1 uchar i,temp;
54 1 for(i=0;i<8;i++)
C51 COMPILER V8.02 18B20 04/20/2007 12:04:09 PAGE 2
55 1 {
56 2 temp=rule&0x01;
57 2 DS=1;
58 2 _nop_(); _nop_(); _nop_();
59 2 DS=0;//以上程序段制造一个下降延
60 2 _nop_(); _nop_(); _nop_();
61 2 DS=temp;//从低位起 按位取出 送给18B20
62 2 rule=rule>>1;
63 2 delay(6);//延时66us
64 2 }
65 1 DS=1;
66 1 delay(1);
67 1 }
68
69 //读一温度字节
70 uchar read()
71 {
72 1 uchar data i;
73 1 uchar data temp=0x00;
74 1 uchar data value=0;
75 1 for(i=0;i<8;i++)
76 1 {
77 2 DS=1;
78 2 _nop_(); _nop_(); _nop_();
79 2 DS=0;//以上程序段制造一个下降延
80 2 _nop_(); _nop_(); _nop_();
81 2 DS=1;
82 2 _nop_(); _nop_(); _nop_();
83 2 value>>=1;
84 2 DS=0;
85 2 _nop_(); _nop_(); _nop_(); _nop_();
86 2 DS=1;
87 2 _nop_(); _nop_(); _nop_(); _nop_();
88 2 if(DS) value|=0x80;
89 2 delay(6);
90 2 }
91 1 DS=1;
92 1 return(value);
93 1 }
94 //读出温度函数
95 read_temp()
96 { uchar h;
97 1 reset();
98 1 write(0xcc);//发skiprom命令
99 1 write(0xbe); //读命令
100 1 temp_data[0]=read();
101 1 for(h=0;h<50;h++)
102 1 display(); //多加了一次显示 为了解决在显示过程中因为数据处理时间过长引
*** WARNING C206 IN LINE 102 OF C:\DOCUME~1\ADMINI~1\桌面\DS18B2~1\18B20.C: 'display': missing function-prototype
103 1 temp_data[1]=read(); //引起的显示眨眼问题
104 1 reset();
105 1 write(0xcc);//发skiprom命令
106 1 write(0x44);//发送转换命令
107 1
108 1 }
109
110
111 //数据处理函数
112
113 deal_data()
114 {
115 1 uchar data tmp[2];
C51 COMPILER V8.02 18B20 04/20/2007 12:04:09 PAGE 3
116 1
117 1 if(temp_data[1]>127) //判断小于零
118 1 {
119 2 temp_data[1]=~temp_data[1]+1;
120 2 temp_data[0]=~temp_data[0]+1;
121 2 dis_data[0]=0xbf;
122 2 }
123 1 tmp[1]=temp_data[1]<<4;
124 1 tmp[2]=temp_data[0]>>4;
125 1 tmp[2]=tmp[2]&0x0f;
126 1 tmp[1]=tmp[1]|tmp[2];//整数部分
127 1 tmp[0]=temp_data[0]&0x0f; //小数部分
128 1 //dis_data[1]=tmp[1]/100; //百位
129 1 dis_data[1]=tmp[1]%100/10;
130 1 dis_data[2]=tmp[1]%10; //dis_data[0--3]内容是“-” 高位到低位
131 1 //dis_data[3]=tmp[0]/2 ; //小数点后只是0到8 没有 9
132 1
133 1 }
134
135 ///显示扫描函数
136 display()
137 {
138 1 uchar i;
139 1 // dis_show=dis_data[0];
140 1 // dis_con=scan_con[0];
141 1 // delay(100);
142 1 for(i=1;i<3;i++)
143 1 {
144 2 dis_show=dis_7[dis_data[i]];
145 2 dis_con=scan_con[2-i];
146 2 //if(i==1) DIN=0;
147 2 delay(400);
148 2
149 2 }
150 1 }
151
152 //主函数
153 void main()
154 {
155 1 uint h;
156 1 EA=0;
157 1 reset();
158 1 write(0xcc);//发skiprom命令
159 1 write(0x44);//发送转换命令
160 1 for(h=0;h<100;h++)
161 1 display();
162 1 while(1)
163 1 {
164 2 read_temp();
165 2 deal_data();
166 2 for(h=0;h<100;h++)
167 2 display();
168 2 }
169 1 }
C51 COMPILER V8.02 18B20 04/20/2007 12:04:09 PAGE 4
NAME CLASS MSPACE TYPE OFFSET SIZE
==== ===== ====== ==== ====== ====
P0 . . . . . . . . . . . . . . . . . . SFR DATA U_CHAR 0080H 1
P1 . . . . . . . . . . . . . . . . . . SFR DATA U_CHAR 0090H 1
P2 . . . . . . . . . . . . . . . . . . SFR DATA U_CHAR 00A0H 1
P3 . . . . . . . . . . . . . . . . . . SFR DATA U_CHAR 00B0H 1
EA . . . . . . . . . . . . . . . . . . ABSBIT ----- BIT 00AFH 1
_write . . . . . . . . . . . . . . . . PUBLIC CODE PROC 0000H -----
rule . . . . . . . . . . . . . . . . * REG * DATA U_CHAR 0005H 1
i. . . . . . . . . . . . . . . . . . * REG * DATA U_CHAR 0003H 1
temp . . . . . . . . . . . . . . . . * REG * DATA U_CHAR 0002H 1
deal_data. . . . . . . . . . . . . . . PUBLIC CODE PROC 0000H -----
tmp. . . . . . . . . . . . . . . . . AUTO DATA ARRAY 0000H 2
DS . . . . . . . . . . . . . . . . . . ABSBIT ----- BIT 00B7H 1
read . . . . . . . . . . . . . . . . . PUBLIC CODE PROC 0000H -----
i. . . . . . . . . . . . . . . . . . * REG * DATA U_CHAR 0004H 1
temp . . . . . . . . . . . . . . . . AUTO DATA U_CHAR 0000H 1
value. . . . . . . . . . . . . . . . * REG * DATA U_CHAR 0005H 1
reset. . . . . . . . . . . . . . . . . PUBLIC CODE PROC 0000H -----
h. . . . . . . . . . . . . . . . . . AUTO DATA U_INT 0000H 2
flag . . . . . . . . . . . . . . . . AUTO DATA BIT 0000H 1
main . . . . . . . . . . . . . . . . . PUBLIC CODE PROC 0000H -----
h. . . . . . . . . . . . . . . . . . * REG * DATA U_INT 0002H 2
temp_data. . . . . . . . . . . . . . . PUBLIC DATA ARRAY 0000H 2
read_temp. . . . . . . . . . . . . . . PUBLIC CODE PROC 0000H -----
h. . . . . . . . . . . . . . . . . . AUTO DATA U_CHAR 0000H 1
dis_data . . . . . . . . . . . . . . . PUBLIC DATA ARRAY 0002H 5
scan_con . . . . . . . . . . . . . . . PUBLIC CODE ARRAY 000BH 2
dis_7. . . . . . . . . . . . . . . . . PUBLIC CODE ARRAY 0000H 11
_delay . . . . . . . . . . . . . . . . PUBLIC CODE PROC 0000H -----
t. . . . . . . . . . . . . . . . . . * REG * DATA U_INT 0006H 2
display. . . . . . . . . . . . . . . . PUBLIC CODE PROC 0000H -----
i. . . . . . . . . . . . . . . . . . * REG * DATA U_CHAR 0005H 1
MODULE INFORMATION: STATIC OVERLAYABLE
CODE SIZE = 406 ----
CONSTANT SIZE = 13 ----
XDATA SIZE = ---- ----
PDATA SIZE = ---- ----
DATA SIZE = 7 6
IDATA SIZE = ---- ----
BIT SIZE = ---- 1
END OF MODULE INFORMATION.
C51 COMPILATION COMPLETE. 2 WARNING(S), 0 ERROR(S)
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -