📄 18b20.lst
字号:
C51 COMPILER V7.07 18B20 01/28/2008 14:49:00 PAGE 1
C51 COMPILER V7.07, COMPILATION OF MODULE 18B20
OBJECT MODULE PLACED IN 18B20.OBJ
COMPILER INVOKED BY: C:\Keil\C51\BIN\C51.EXE 18B20.c ROM(SMALL) BROWSE DEBUG OBJECTEXTEND
stmt level source
1 #include <AT89x051.H>
2
3 sfr WDT_CONTR = 0xe1;
4 sbit DQ = P1^0; //* 18B20 I/O Line
5 sbit LED_WRK = P1^7; //* Working Led
6 sbit PLC_signal = P1^6; //*24V signal
7
8 void Delay(unsigned int i)
9 {
10 1 i=i*12;
11 1 while(i--);
12 1 }
13 /***************************************************************************************
14 ** 函数组标号 :5-2
15 **
16 ** 函数名称 :Init_DS18B20
17 ** 描述 :18B20初始化
18 **
19 ** 创建人 :King.Chen
20 ** 创建日期 :2006-11-26
21 **--------------------------------------------------------------------------------------
22 ** 修改人 :
23 ** 修改日期 :
24 ** 描述 :
25 **--------------------------------------------------------------------------------------
26 ***************************************************************************************/
27 void Init_DS18B20(void)
28 {
29 1 unsigned char x;
30 1
31 1 DQ = 1; //* DQ复位
32 1 Delay(8); //* 稍做延时
33 1
34 1 DQ = 0; //* DQ拉低
35 1 Delay(80); //* 精确延时,大于480us
36 1
37 1 DQ = 1; //* 拉高总线
38 1
39 1 Delay(14);
40 1 x=DQ; //稍做延时后 如果x=0则初始化成功 x=1则初始化失败
41 1
42 1 Delay(20);
43 1 }
44 /***************************************************************************************
45 ** 函数组标号 :5-3
46 **
47 ** 函数名称 :ReadOneChar
48 ** 描述 :读一个字节
49 **
50 ** 返回值 :unsigned char
51 **
52 ** 创建人 :King.Chen
53 ** 创建日期 :2006-11-26
54 **--------------------------------------------------------------------------------------
55 ** 修改人 :
C51 COMPILER V7.07 18B20 01/28/2008 14:49:00 PAGE 2
56 ** 修改日期 :
57 ** 描述 :
58 **--------------------------------------------------------------------------------------
59 ***************************************************************************************/
60 unsigned char ReadOneChar(void)
61 {
62 1 unsigned char i=0;
63 1 unsigned char dat = 0;
64 1
65 1 for (i=8;i>0;i--)
66 1 {
67 2 DQ = 0; // 给脉冲信号
68 2 dat>>=1;
69 2 DQ = 1; // 给脉冲信号
70 2
71 2 if(DQ)
72 2 dat|=0x80;
73 2 Delay(4);
74 2 }
75 1
76 1 return(dat);
77 1 }
78 /***************************************************************************************
79 ** 函数组标号 :5-4
80 **
81 ** 函数名称 :WriteOneChar
82 ** 描述 :写一个字节
83 **
84 ** 参数 :unsigned char dat
85 **
86 ** 创建人 :King.Chen
87 ** 创建日期 :2006-11-26
88 **--------------------------------------------------------------------------------------
89 ** 修改人 :
90 ** 修改日期 :
91 ** 描述 :
92 **--------------------------------------------------------------------------------------
93 ***************************************************************************************/
94 void WriteOneChar(unsigned char dat)
95 {
96 1 unsigned char i=0;
97 1
98 1 for (i=8; i>0; i--)
99 1 {
100 2 DQ = 0;
101 2 DQ = dat&0x01;
102 2 Delay(5);
103 2 DQ = 1;
104 2 dat>>=1;
105 2 }
106 1
107 1 Delay(4);
108 1 }
109 /***************************************************************************************
110 ** 函数组标号 :5-5
111 **
112 ** 函数名称 :ReadTemperature
113 ** 描述 :读取温度
114 **
115 ** 返回值 :unsigned int
116 **
117 ** 创建人 :King.Chen
C51 COMPILER V7.07 18B20 01/28/2008 14:49:00 PAGE 3
118 ** 创建日期 :2006-11-26
119 **--------------------------------------------------------------------------------------
120 ** 修改人 :
121 ** 修改日期 :
122 ** 描述 :
123 **--------------------------------------------------------------------------------------
124 ***************************************************************************************/
125 unsigned int ReadTemperature(void)
126 {
127 1 unsigned char a=0;
128 1 unsigned char b=0;
129 1 unsigned char t=0;
130 1
131 1 Init_DS18B20();
132 1
133 1 WriteOneChar(0xCC); //* 跳过读序号列号的操作
134 1
135 1 WriteOneChar(0x44); //* 启动温度转换
136 1
137 1 Init_DS18B20();
138 1
139 1 WriteOneChar(0xCC); //* 跳过读序号列号的操作
140 1
141 1 WriteOneChar(0xBE); //* 读取温度寄存器等(共可读9个寄存器) 前两个就是温度
142 1
143 1 a=ReadOneChar(); //* 读取温度值低位
144 1 b=ReadOneChar(); //* 读取温度值高位
145 1
146 1 a=a>>4; //* 低位右移4位,舍弃小数部分
147 1 t=b<<4; //* 高位左移4位,舍弃符号位
148 1 t=t|a;
149 1
150 1 return(t);
151 1 }
152 void delay1s(void)//200ms延时子程序
153 {
154 1 unsigned char i,j,k;
155 1 WDT_CONTR=0x3c;//喂狗
156 1 for(i=5;i>0;i--)
157 1 for(j=132;j>0;j--)
158 1 for(k=150;k>0;k--);
159 1 }
160 main()
161 {
162 1 unsigned char Temperature;
163 1 unsigned char k;
164 1 // unsigned int sum;
165 1 /* TMOD=0x01;//设T/C1为定时方1
166 1 TH0=0x3C;//50MS
167 1 TL0=0xb0;
168 1 EA=1; //系统中断允许
169 1 ET0=1;
170 1 TR0=1;*/
171 1 PLC_signal=1;
172 1 LED_WRK=1;
173 1
174 1 while(1)
175 1 {
176 2 WDT_CONTR=0x3c;//喂狗
177 2 Temperature=0;
178 2 Temperature=ReadTemperature();
179 2 if(Temperature>=45)
C51 COMPILER V7.07 18B20 01/28/2008 14:49:00 PAGE 4
180 2 {
181 3 for(k=0;k<10;k++)delay1s();
182 3 WDT_CONTR=0x3c;//喂狗
183 3 Temperature=ReadTemperature();
184 3 if(Temperature>=45)
185 3 {
186 4 PLC_signal=0;
187 4 LED_WRK=0;
188 4 }
189 3
190 3 }
191 2 else
192 2 {
193 3 PLC_signal=1;
194 3 LED_WRK=1;
195 3 }
196 2 for(k=0;k<10;k++)delay1s();
197 2 }
198 1
199 1 }
200 /*timer0() interrupt 1 using 1 //中断定时处理程序
201 {
202 TR0=0; //关定时器
203 WDT_CONTR=0x3c;//喂狗
204 TH0=0x3C;//50MS
205 TL0=0xb0;
206 TR0=1; //开定时器
207 }*/
208
209 /***************************************************************************************
210 ** End of File
211 ***************************************************************************************/
MODULE INFORMATION: STATIC OVERLAYABLE
CODE SIZE = 248 ----
CONSTANT SIZE = ---- ----
XDATA SIZE = ---- ----
PDATA SIZE = ---- ----
DATA SIZE = ---- 2
IDATA SIZE = ---- ----
BIT SIZE = ---- ----
END OF MODULE INFORMATION.
C51 COMPILATION COMPLETE. 0 WARNING(S), 0 ERROR(S)
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -