📄 tempereture.lst
字号:
C51 COMPILER V8.09 TEMPERETURE 11/28/2004 03:26:11 PAGE 1
C51 COMPILER V8.09, COMPILATION OF MODULE TEMPERETURE
OBJECT MODULE PLACED IN tempereture.OBJ
COMPILER INVOKED BY: D:\Keil\C51\BIN\C51.EXE tempereture.c BROWSE DEBUG OBJECTEXTEND
line level source
1 #include <reg52.h>
2 sbit DS1820_DQ= P0^0;
3 sbit P0_1=P0^1;
4 bit ds1820_reset();
5 void ds1820_write_data(unsigned char ds1820_wdat);
6 unsigned char ds1820_read_data();
7 unsigned char data temperature[2]; //将温度存储在低128RAM单元
8
9 void read_temp()
10 {
11 1 unsigned char i;
12 1 ds1820_reset(); //复位
13 1 ds1820_write_data(0xcc); //跳过ROM命令
14 1 ds1820_write_data(0x44); //温度转换命令
15 1 ds1820_reset(); //复位
16 1 ds1820_write_data(0xcc); //跳过ROM命令
17 1 ds1820_write_data(0xbe); //读DS1820温度暂存器命令
18 1 for (i=0;i<2;i++)
19 1 {
20 2 temperature[i]=ds1820_read_data();
21 2 }
22 1 ds1820_reset(); //复位,结束读数据
23 1 }
24
25 bit ds1820_reset()
26 {
27 1 unsigned char i;
28 1 bit flag; //DS1820存在标志位
29 1 DS1820_DQ = 0; //拉低总线
30 1 for (i=240;i>0;i--);//延时480微秒,产生复位脉冲
31 1 DS1820_DQ = 1; //释放总线
32 1 for (i=40;i>0;i--); //延时80微秒对总线采样
33 1 flag = DS1820_DQ;
34 1 for (i=200;i>0;i--); //延时400微秒等待总线恢复
35 1 return (flag); //根据flag的值可以知道DS1820是否存在或损坏
36 1 } //可以加声音告警提示DS1820故障
37
38
39 void ds1820_write_data(unsigned char ds1820_wdat)
40 {
41 1 unsigned char i,j;
42 1 for (i=8;i>0;i--)
43 1 {
44 2 DS1820_DQ = 0; //拉低总线,产生写信号
45 2 for (j=2;j>0;j--); //延时4us
46 2 DS1820_DQ = ds1820_wdat&0x01; //发送1位
47 2 for (j=30;j>0;j--); //延时60us,写时序至少要60us
48 2 DS1820_DQ = 1; //释放总线,等待总线恢复
49 2 ds1820_wdat>>=1; //准备下一位数据的传送
50 2 }
51 1 }
52
53
54 unsigned char ds1820_read_data()
55 {
C51 COMPILER V8.09 TEMPERETURE 11/28/2004 03:26:11 PAGE 2
56 1 unsigned char i,j,ds1820_rdat;
57 1 for (i=8;i>0;i--)
58 1 {
59 2 ds1820_rdat>>=1;
60 2 DS1820_DQ = 0; //拉低总线,产生读信号
61 2 for (j=2;j>0;j--); //延时4us
62 2 DS1820_DQ = 1; //释放总线,准备读数据
63 2 for (j=4;j>0;j--); //延时8微秒读数据
64 2 if (DS1820_DQ == 1)
65 2 ds1820_rdat |= 0x80;
66 2 for (j=30;j>0;j--); //延时60us
67 2 DS1820_DQ = 1; //拉高总线,准备下一位数据的读取.
68 2 }
69 1 return (ds1820_rdat);//返回读到的数据
70 1 }
71
72
73 void main()
74 {
75 1 unsigned char s,t,wendu,bai,shi,ge,fen,li,hao,si;
76 1 unsigned char display[]={0xc0,0xf9,0xA4,0xB0,0x99,0x92,0x82,0xf8,0x80,0x90,0xbf};
77 1 unsigned int i,TempDec;
78 1
79 1 while(1)
80 1 {
81 2 read_temp();
82 2
83 2
84 2 s= temperature[1]<<4; //取高字节低4位(温度读数高4位)
85 2 t = temperature[0]>>4; //取低字节高4位(温度读数低4位)
86 2 wendu=s|t; //组合成完整数据(整数部分)
87 2
88 2
89 2 if((wendu>200)&&(temperature[1]&0xf0==0xf0))
90 2 { P1=0xfe;
91 3 P2=display[10];
92 3 for(i=0;i<300;i++);
93 3
94 3
95 3 //求补取反加1,判断低8位是否有进位
96 3 if (temperature[0]==0)
97 3 { //有进位,高8位取反加1
98 4 temperature[0]=~temperature[0]+1;
99 4 temperature[1]=~temperature[1]+1;
100 4 }
101 3 else
102 3 { //没进位,高8位不加1
103 4 temperature[0]=~temperature[0]+1;
104 4 temperature[1]=~temperature[1];
105 4 }
106 3 }
107 2
108 2
109 2 s= temperature[1]<<4; //取高字节低4位(温度读数高4位)
110 2 t = temperature[0]>>4; //取低字节高4位(温度读数低4位)
111 2 wendu=s|t; //组合成完整数据(整数部分)
112 2
113 2 if(wendu>=30)
114 2 P0_1=0; //报警
115 2
116 2 bai=wendu/100;
117 2 shi=wendu%100/10;
C51 COMPILER V8.09 TEMPERETURE 11/28/2004 03:26:11 PAGE 3
118 2 ge=wendu%10;
119 2 TempDec = (temperature[0]&0x0f)*625;//小数部分,扩大1万倍
120 2 fen=TempDec/1000;
121 2 li=TempDec%1000/100;
122 2 hao=TempDec%100/10;
123 2 si=TempDec%10;
124 2
125 2
126 2
127 2
128 2 P1=0xfd;
129 2 P2=display[bai];
130 2 for(i=0;i<400;i++);
131 2
132 2 P1= 0xfb;
133 2 P2=display[shi];
134 2 for(i=0;i<400;i++);
135 2
136 2 P1= 0xf7;
137 2 P2=display[ge]&0x7f;
138 2 for(i=0;i<400;i++);
139 2
140 2 P1= 0xef;
141 2 P2=display[fen];
142 2 for(i=0;i<400;i++);
143 2
144 2 P1= 0xdf;
145 2 P2=display[li];
146 2 for(i=0;i<400;i++);
147 2
148 2 P1= 0xbf;
149 2 P2=display[hao];
150 2 for(i=0;i<400;i++);
151 2
152 2 P1= 0x7f;
153 2 P2=display[si];
154 2 //for(i=0;i<250;i++);
155 2
156 2 }
157 1
158 1
159 1 }
MODULE INFORMATION: STATIC OVERLAYABLE
CODE SIZE = 579 ----
CONSTANT SIZE = 11 ----
XDATA SIZE = ---- ----
PDATA SIZE = ---- ----
DATA SIZE = 2 21
IDATA SIZE = ---- ----
BIT SIZE = ---- 1
END OF MODULE INFORMATION.
C51 COMPILATION COMPLETE. 0 WARNING(S), 0 ERROR(S)
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -