📄 ds1302_18b20_1602.lst
字号:
(0027) LCD_write_byte(0,temp_h+48);
164 2D2A MOV R18,R10
165 5D20 SUBI R18,0xD0
166 2700 CLR R16
167 DF58 RCALL _LCD_write_byte
(0028) LCD_write_byte(0,temp_l+48);
168 2F26 MOV R18,R22
169 5D20 SUBI R18,0xD0
16A 2700 CLR R16
16B DF54 RCALL _LCD_write_byte
(0029) switch(temp_decimal)
16C 2755 CLR R21
16D 3040 CPI R20,0
16E E0E0 LDI R30,0
16F 075E CPC R21,R30
170 F40C BGE 0x0172
171 C090 RJMP 0x0202
172 E08F LDI R24,0xF
173 E090 LDI R25,0
174 1784 CP R24,R20
175 0795 CPC R25,R21
176 F40C BGE 0x0178
177 C08A RJMP 0x0202
178 E584 LDI R24,0x54
179 E090 LDI R25,0
17A 01FA MOVW R30,R20
17B 0FEE LSL R30
17C 1FFF ROL R31
17D 0FE8 ADD R30,R24
17E 1FF9 ADC R31,R25
17F 9025 LPM R2,Z+
180 9034 LPM R3,0(Z)
181 01F1 MOVW R30,R2
182 9409 IJMP
(0030) {
(0031) case 0 : LCD_write_string(12,2,".00");break;
183 EC86 LDI R24,0xC6
184 E090 LDI R25,0
185 8399 STD Y+1,R25
186 8388 STD Y+0,R24
187 E022 LDI R18,2
188 E00C LDI R16,0xC
189 DF6C RCALL _LCD_write_string
18A C077 RJMP 0x0202
(0032) case 1 : LCD_write_string(12,2,".06");break;
18B EC82 LDI R24,0xC2
18C E090 LDI R25,0
18D 8399 STD Y+1,R25
18E 8388 STD Y+0,R24
18F E022 LDI R18,2
190 E00C LDI R16,0xC
191 DF64 RCALL _LCD_write_string
192 C06F RJMP 0x0202
(0033) case 2 : LCD_write_string(12,2,".12");break;
193 EB8E LDI R24,0xBE
194 E090 LDI R25,0
195 8399 STD Y+1,R25
196 8388 STD Y+0,R24
197 E022 LDI R18,2
198 E00C LDI R16,0xC
199 DF5C RCALL _LCD_write_string
19A C067 RJMP 0x0202
(0034) case 3 : LCD_write_string(12,2,".18");break;
19B EB8A LDI R24,0xBA
19C E090 LDI R25,0
19D 8399 STD Y+1,R25
19E 8388 STD Y+0,R24
19F E022 LDI R18,2
1A0 E00C LDI R16,0xC
1A1 DF54 RCALL _LCD_write_string
1A2 C05F RJMP 0x0202
(0035) case 4 : LCD_write_string(12,2,".25");break;
1A3 EB86 LDI R24,0xB6
1A4 E090 LDI R25,0
1A5 8399 STD Y+1,R25
1A6 8388 STD Y+0,R24
1A7 E022 LDI R18,2
1A8 E00C LDI R16,0xC
1A9 DF4C RCALL _LCD_write_string
1AA C057 RJMP 0x0202
(0036) case 5 : LCD_write_string(12,2,".31");break;
1AB EB82 LDI R24,0xB2
1AC E090 LDI R25,0
1AD 8399 STD Y+1,R25
1AE 8388 STD Y+0,R24
1AF E022 LDI R18,2
1B0 E00C LDI R16,0xC
1B1 DF44 RCALL _LCD_write_string
1B2 C04F RJMP 0x0202
(0037) case 6 : LCD_write_string(12,2,".37");break;
1B3 EA8E LDI R24,0xAE
1B4 E090 LDI R25,0
1B5 8399 STD Y+1,R25
1B6 8388 STD Y+0,R24
1B7 E022 LDI R18,2
1B8 E00C LDI R16,0xC
1B9 DF3C RCALL _LCD_write_string
1BA C047 RJMP 0x0202
(0038) case 7 : LCD_write_string(12,2,".43");break;
1BB EA8A LDI R24,0xAA
1BC E090 LDI R25,0
1BD 8399 STD Y+1,R25
1BE 8388 STD Y+0,R24
1BF E022 LDI R18,2
1C0 E00C LDI R16,0xC
1C1 DF34 RCALL _LCD_write_string
1C2 C03F RJMP 0x0202
(0039) case 8 : LCD_write_string(12,2,".50");break;
1C3 EA86 LDI R24,0xA6
1C4 E090 LDI R25,0
1C5 8399 STD Y+1,R25
1C6 8388 STD Y+0,R24
1C7 E022 LDI R18,2
1C8 E00C LDI R16,0xC
1C9 DF2C RCALL _LCD_write_string
1CA C037 RJMP 0x0202
(0040) case 9 : LCD_write_string(12,2,".56");break;
1CB EA82 LDI R24,0xA2
1CC E090 LDI R25,0
1CD 8399 STD Y+1,R25
1CE 8388 STD Y+0,R24
1CF E022 LDI R18,2
1D0 E00C LDI R16,0xC
1D1 DF24 RCALL _LCD_write_string
1D2 C02F RJMP 0x0202
(0041) case 10 : LCD_write_string(12,2,".61");break;
1D3 E98E LDI R24,0x9E
1D4 E090 LDI R25,0
1D5 8399 STD Y+1,R25
1D6 8388 STD Y+0,R24
1D7 E022 LDI R18,2
1D8 E00C LDI R16,0xC
1D9 DF1C RCALL _LCD_write_string
1DA C027 RJMP 0x0202
(0042) case 11 : LCD_write_string(12,2,".68");break;
1DB E98A LDI R24,0x9A
1DC E090 LDI R25,0
1DD 8399 STD Y+1,R25
1DE 8388 STD Y+0,R24
1DF E022 LDI R18,2
1E0 E00C LDI R16,0xC
1E1 DF14 RCALL _LCD_write_string
1E2 C01F RJMP 0x0202
(0043) case 12 : LCD_write_string(12,2,".75");break;
1E3 E986 LDI R24,0x96
1E4 E090 LDI R25,0
1E5 8399 STD Y+1,R25
1E6 8388 STD Y+0,R24
1E7 E022 LDI R18,2
1E8 E00C LDI R16,0xC
1E9 DF0C RCALL _LCD_write_string
1EA C017 RJMP 0x0202
(0044) case 13 : LCD_write_string(12,2,".81");break;
1EB E982 LDI R24,0x92
1EC E090 LDI R25,0
1ED 8399 STD Y+1,R25
1EE 8388 STD Y+0,R24
1EF E022 LDI R18,2
1F0 E00C LDI R16,0xC
1F1 DF04 RCALL _LCD_write_string
1F2 C00F RJMP 0x0202
(0045) case 14 : LCD_write_string(12,2,".87");break;
1F3 E88E LDI R24,0x8E
1F4 E090 LDI R25,0
1F5 8399 STD Y+1,R25
1F6 8388 STD Y+0,R24
1F7 E022 LDI R18,2
1F8 E00C LDI R16,0xC
1F9 DEFC RCALL _LCD_write_string
1FA C007 RJMP 0x0202
(0046) case 15 : LCD_write_string(12,2,".93");break;
1FB E88A LDI R24,0x8A
1FC E090 LDI R25,0
1FD 8399 STD Y+1,R25
1FE 8388 STD Y+0,R24
1FF E022 LDI R18,2
200 E00C LDI R16,0xC
201 DEF4 RCALL _LCD_write_string
202 9622 ADIW R28,2
203 940C 048A JMP pop_xgsetF03C
_Temperature:
tl_l --> R14
th_h --> R20
temp_negative --> R20
Tl --> R10
Th --> R12
205 940E 0452 CALL push_xgset30FC
207 2EA2 MOV R10,R18
208 2EC0 MOV R12,R16
(0047) }
(0048) }
(0049) /************************************************
(0050) ************************************************/
(0051) void Temperature(uint8_t Th,uint8_t Tl)
(0052) {
(0053) uint16_t temp_negative,th_h,tl_l;
(0054) if((Th&0x80)==0)//温度为正
209 FCC7 SBRC R12,7
20A C00A RJMP 0x0215
(0055) {
(0056) LCD_set_xy(9,2);
20B E022 LDI R18,2
20C E009 LDI R16,0x9
20D DED8 RCALL _LCD_set_xy
(0057) Positive();
20E E22B LDI R18,0x2B
20F 2700 CLR R16
210 DEAF RCALL _LCD_write_byte
(0058) Temp_display(Tl,Th);
211 2D2C MOV R18,R12
212 2D0A MOV R16,R10
213 DF37 RCALL _Temp_display
(0059) }
214 C019 RJMP 0x022E
(0060) else //温度为负
(0061) {
(0062) LCD_set_xy(9,2);
215 E022 LDI R18,2
216 E009 LDI R16,0x9
217 DECE RCALL _LCD_set_xy
(0063) Negative();
218 E22D LDI R18,0x2D
219 2700 CLR R16
21A DEA5 RCALL _LCD_write_byte
(0064) th_h=(uint16_t)Th;
21B 2D4C MOV R20,R12
21C 2755 CLR R21
(0065) tl_l=(uint16_t)Tl;
21D 2CEA MOV R14,R10
21E 24FF CLR R15
(0066) th_h<<=8;
21F 2F54 MOV R21,R20
220 2744 CLR R20
(0067) temp_negative=(th_h|tl_l);
221 294E OR R20,R14
222 295F OR R21,R15
(0068) temp_negative=~temp_negative+1;
223 9540 COM R20
224 9550 COM R21
225 5F4F SUBI R20,0xFF
226 4F5F SBCI R21,0xFF
(0069) Tl=(uint8_t)temp_negative;
227 2EA4 MOV R10,R20
(0070) temp_negative>>=8;
228 2F45 MOV R20,R21
229 2755 CLR R21
(0071) Th=(uint8_t)temp_negative;
22A 2EC4 MOV R12,R20
(0072) Temp_display(Tl,Th);
22B 2D2C MOV R18,R12
22C 2D0A MOV R16,R10
22D DF1D RCALL _Temp_display
(0073) }
22E 940C 043C JMP pop_xgset30FC
(0074) }
(0075) /*************************************************
(0076) 函 数 名:Delay_us
(0077) 功 能:软件延时1.1us
(0078) 入口参数:us 延时时间
(0079) 出口参数:无
(0080) 修改时间:2007.02.16
(0081) *************************************************/
(0082) void Delay_us(uint16_t us)
(0083) {
_Delay_us:
us --> R16
230 C002 RJMP 0x0233
(0084) while(us>1)
(0085) {
(0086) us--;
231 5001 SUBI R16,1
232 4010 SBCI R17,0
233 E081 LDI R24,1
234 E090 LDI R25,0
235 1780 CP R24,R16
236 0791 CPC R25,R17
237 F3C8 BCS 0x0231
238 9508 RET
_Init_18b20:
exist --> R20
239 934A ST R20,-Y
(0087) }
(0088) }
(0089) /*************************************************
(0090) 函 数 名:Reset_18b20
(0091) 功 能:复位DS18B20
(0092) 入口参数:无
(0093) 出口参数:exist : exist=1,存在;exist=0,不存在
(0094) 修改日期:2007.02.16
(0095) *************************************************/
(0096) uint8_t Init_18b20(void)
(0097) {
(0098) uint8_t exist=1;
23A E041 LDI R20,1
(0099) Set_low(); //设置成输出模式
23B 9A8F SBI 0x11,7
23C 9897 CBI 0x12,7
(0100) Delay_us(600); //复位低电平480us~960us
23D E508 LDI R16,0x58
23E E012 LDI R17,2
23F DFF0 RCALL _Delay_us
(0101) Set_high(); //拉高电平
240 9A8F SBI 0x11,7
241 9A97 SBI 0x12,7
(0102) Read(); //设置成输入模式
242 988F CBI 0x11,7
(0103) Delay_us(100); //延时100us
243 E604 LDI R16,0x64
244 E010 LDI R17,0
245 DFEA RCALL _Delay_us
(0104) exist=~(DS18B20_PIN&DS18B20_IO); //读端口电平
246 B340 IN R20,0x10
247 7840 ANDI R20,0x80
248 9540 COM R20
(0105) Delay_us(480); //延时480us
249 EE00 LDI R16,0xE0
24A E011 LDI R17,1
24B DFE4 RCALL _Delay_us
(0106) DDRA|=0X10; //设置成输出模式
24C 9AD4 SBI 0x1A,4
(0107) return (exist); //返回exist的值
24D 2F04 MOV R16,R20
24E 9149 LD R20,Y+
24F 9508 RET
_Read_1_byte:
r_data --> R10
temp --> R22
i --> R20
250 940E 0465 CALL push_xgsetF00C
(0108) }
(0109) /*************************************************
(0110) 函 数 名:Read_1_byte
(0111) 功 能:从DS18B20读取一个字节的数据
(0112) 入口参数:无
(0113) 出口参数:r_data
(0114) 修改日期:2007.02.16
(0115) *************************************************/
(0116) uint8_t Read_1_byte(void)
(0117) {
(0118) uint8_t i,r_data=0x00,temp;
252 24AA CLR R10
(0119) for(i=0;i<8;i++)
253 2744 CLR R20
254 C01F RJMP 0x0274
(0120) {
(0121) Set_low();
255 9A8F SBI 0x11,7
256 9897 CBI 0x12,7
(0122) Delay_us(3);
257 E003 LDI R16,3
258 E010 LDI R17,0
259 DFD6 RCALL _Delay_us
(0123) Read();
25A 988F CBI 0x11,7
(0124) Delay_us(8);
25B E008 LDI R16,0x8
25C E010 LDI R17,0
25D DFD2 RCALL _Delay_us
(0125) temp=(DS18B20_PIN&DS18B20_IO);
25E B360 IN R22,0x10
25F 7860 ANDI R22,0x80
(0126) if(temp)
260 F031 BEQ 0x0267
(0127) {
(0128) r_data|=(1<<i);
261 E001 LDI R16,1
262 2F14 MOV R17,R20
263 940E 0493 CALL lsl8
265 2AA0 OR R10,R16
(0129) }
266 C007 RJMP 0x026E
(0130) else
(0131) {
(0132) r_data&=~(1<<i);
267 E001 LDI R16,1
268 2F14 MOV R17,R20
269 940E 0493 CALL lsl8
26B 2E20 MOV R2,R16
26C 9420 COM R2
26D 20A2 AND R10,R2
(0133) }
(0134) Delay_us(50);
26E E302 LDI R16,0x32
26F E010 LDI R17,0
270 DFBF RCALL _Delay_us
(0135) Set_high();
271 9A8F SBI 0x11,7
272 9A97 SBI 0x12,7
273 9543 INC R20
274 3048 CPI R20,0x8
275 F2F8 BCS 0x0255
(0136) }
(0137) return (r_data);
276 2D0A MOV R16,R10
277 940C 046C JMP pop_xgsetF00C
_Write_1_byte:
temp --> R22
i --> R20
cmd --> R10
279 940E 0465 CALL push_xgsetF00C
27B 2EA0 MOV R10,R16
(0138) }
(0139) /*************************************************
(0140) 函 数 名:Write_1_byte
(0141) 功 能:写一个字节到DS18B20
(0142) 入口参数:cmd
(0143) 出口参数:无
(0144) 修改日期:2007.02.16
(0145) *************************************************/
(0146) void Write_1_byte(uint8_t cmd)
(0147) {
(0148) uint8_t i,temp;
(0149) for(i=0;i<8;i++)
27C 2744 CLR R20
27D C00B RJMP 0x0289
(0150) {
(0151) temp=(cmd>>i);
27E 2D0A MOV R16,R10
27F 2F14 MOV R17,R20
280 940E 0499 CALL lsr8
282 2F60 MOV R22,R16
(0152) temp&=0x01;
283 7061 ANDI R22,1
(0153) if(temp)
284 F011 BEQ 0x0287
(0154) {
(0155) Write_1();
285 D007 RCALL _Write_1
(0156) }
286 C001 RJMP 0x0288
(0157) else
(0158) {
(0159) Write_0();
287 D010 RCALL _Write_0
288 9543 INC R20
289 3048 CPI R20,0x8
28A F398 BCS 0x027E
28B 940C 046C JMP pop_xgsetF00C
(0160) }
(0161) }
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -