📄 ds18b20.lst
字号:
21C 0745 CPC R20,R21
21D F421 BNE 0x0222
21E E081 LDI R24,1
21F E090 LDI R25,0
220 015C MOVW R10,R24
221 C002 RJMP 0x0224
222 24AA CLR R10
223 24BB CLR R11
224 E089 LDI R24,0x9
225 E090 LDI R25,0
226 1784 CP R24,R20
227 0795 CPC R25,R21
228 F418 BCC 0x022C
229 E061 LDI R22,1
22A E070 LDI R23,0
22B C002 RJMP 0x022E
22C 2766 CLR R22
22D 2777 CLR R23
22E 0115 MOVW R2,R10
22F 2A26 OR R2,R22
230 2A37 OR R3,R23
231 2022 TST R2
232 F411 BNE 0x0235
233 2033 TST R3
234 F019 BEQ 0x0238
235 E340 LDI R20,0x30
236 E050 LDI R21,0
237 C002 RJMP 0x023A
(0195) else num = 0x30 + num;
238 5D40 SUBI R20,0xD0
239 4F5F SBCI R21,0xFF
(0196)
(0197) PORTA|=(1<<RS);
23A 9ADD SBI 0x1B,5
(0198) s_ms(500);
23B EF04 LDI R16,0xF4
23C E011 LDI R17,1
23D DEB9 RCALL _s_ms
(0199) PORTA&=~(1<<RW);
23E 98DE CBI 0x1B,6
(0200) s_ms(500);
23F EF04 LDI R16,0xF4
240 E011 LDI R17,1
241 DEB5 RCALL _s_ms
(0201) PORTD = num;
242 BB42 OUT 0x12,R20
(0202) s_ms(500);
243 EF04 LDI R16,0xF4
244 E011 LDI R17,1
245 DEB1 RCALL _s_ms
(0203) PORTA|=(1<<EN);
246 9ADF SBI 0x1B,7
(0204) s_ms(500);
247 EF04 LDI R16,0xF4
248 E011 LDI R17,1
249 DEAD RCALL _s_ms
(0205) PORTA&=~(1<<EN);
24A 98DF CBI 0x1B,7
(0206) s_ms(500);
24B EF04 LDI R16,0xF4
24C E011 LDI R17,1
24D DEA9 RCALL _s_ms
24E 940C 032D JMP pop_xgsetF00C
_WriteChar:
t --> R12
i --> R10
pBuffer --> R20
num --> Y,+8
col --> R10
row --> R22
250 940E 0334 CALL push_xgsetF03C
252 2EA2 MOV R10,R18
253 2F60 MOV R22,R16
254 854A LDD R20,Y+10
255 855B LDD R21,Y+11
(0207) }
(0208) //================================================================
(0209) // 描述:在任意位置写任意多个字符
(0210) // 入口:’row‘要写的字符所在的行,只能为1或2;
(0211) // ‘col’要写的字符所在的列,只能为0---15
(0212) // ‘num’要写字符的个数
(0213) // ‘pbuffer’要写字符的首地址
(0214) //==================================================================
(0215) void WriteChar(uchar row,uchar col,uint num,uchar *pBuffer)
(0216) {
(0217) uchar i,t;
(0218) if (row == 1) row = 0x80 + col;
256 3061 CPI R22,1
257 F419 BNE 0x025B
258 2D6A MOV R22,R10
259 5860 SUBI R22,0x80
25A C002 RJMP 0x025D
(0219) else row = 0xC0 + col;
25B 2D6A MOV R22,R10
25C 5460 SUBI R22,0x40
(0220) writecom(row);
25D 2F06 MOV R16,R22
25E DECC RCALL _writecom
(0221) //if (num<=0 | num>9) num =0x30;
(0222) //else num = 0x30 + num;
(0223)
(0224) PORTA|=(1<<RS);
25F 9ADD SBI 0x1B,5
(0225) s_ms(500);
260 EF04 LDI R16,0xF4
261 E011 LDI R17,1
262 DE94 RCALL _s_ms
(0226) PORTA&=~(1<<RW);
263 98DE CBI 0x1B,6
(0227) s_ms(500);
264 EF04 LDI R16,0xF4
265 E011 LDI R17,1
266 DE90 RCALL _s_ms
(0228) for(i=num;i!=0;i--)
267 84A8 LDD R10,Y+8
268 C014 RJMP 0x027D
(0229) {
(0230) t = *pBuffer;
269 01FA MOVW R30,R20
26A 80C0 LDD R12,Z+0
(0231) s_ms(500);
26B EF04 LDI R16,0xF4
26C E011 LDI R17,1
26D DE89 RCALL _s_ms
(0232) PORTD = t;
26E BAC2 OUT 0x12,R12
(0233) s_ms(500);
26F EF04 LDI R16,0xF4
270 E011 LDI R17,1
271 DE85 RCALL _s_ms
(0234) PORTA|=(1<<EN);
272 9ADF SBI 0x1B,7
(0235) s_ms(500);
273 EF04 LDI R16,0xF4
274 E011 LDI R17,1
275 DE81 RCALL _s_ms
(0236) PORTA&=~(1<<EN);
276 98DF CBI 0x1B,7
(0237) s_ms(500);
277 EF04 LDI R16,0xF4
278 E011 LDI R17,1
279 DE7D RCALL _s_ms
(0238) pBuffer++;
27A 5F4F SUBI R20,0xFF
27B 4F5F SBCI R21,0xFF
27C 94AA DEC R10
27D 20AA TST R10
27E F751 BNE 0x0269
27F 940C 033D JMP pop_xgsetF03C
_s_1ms:
aa --> R20
ms --> R16
281 934A ST R20,-Y
282 935A ST R21,-Y
FILE: E:\产品\开发板\光盘\16实验程序\DS18B20\DS18B20_main.c
(0001) //温度传感器DS18B20试验
(0002) //间隔2s采集一次温度值
(0003) //使用1602的液晶作为显示
(0004) #include <iom16v.h>
(0005) #include <macros.h>
(0006) #include "18B20.h"
(0007) #include "1602.h"
(0008)
(0009) uchar adc_0[]={"Temperature:"};
(0010) uchar adc_1[]={0xdf,0x43};
(0011)
(0012) //延时函数在16M时延时1ms
(0013) void s_1ms(unsigned int ms)
(0014) {
(0015) unsigned int aa;
(0016) for(;ms>=1;ms--)
283 C00C RJMP 0x0290
(0017) {
(0018) for(aa=0;aa<=2000;aa++)
284 2744 CLR R20
285 2755 CLR R21
286 C002 RJMP 0x0289
287 5F4F SUBI R20,0xFF
288 4F5F SBCI R21,0xFF
289 ED80 LDI R24,0xD0
28A E097 LDI R25,7
28B 1784 CP R24,R20
28C 0795 CPC R25,R21
28D F7C8 BCC 0x0287
28E 5001 SUBI R16,1
28F 4010 SBCI R17,0
290 3001 CPI R16,1
291 E0E0 LDI R30,0
292 071E CPC R17,R30
293 F780 BCC 0x0284
294 9159 LD R21,Y+
295 9149 LD R20,Y+
296 9508 RET
_main:
tem3 --> Y,+5
tem1 --> R10
tem2 --> R12
i --> R10
297 9724 SBIW R28,4
(0019) {;}
(0020) }
(0021) }
(0022)
(0023)
(0024) void main()
(0025) {
(0026) unsigned int i,tem3,tem2,tem1;
(0027) //端口初始化
(0028) DDRA = 0xff;
298 EF8F LDI R24,0xFF
299 BB8A OUT 0x1A,R24
(0029) PORTA = 0x00;
29A 2422 CLR R2
29B BA2B OUT 0x1B,R2
(0030) DDRB = 0xFF;
29C BB87 OUT 0x17,R24
(0031) PORTB = 0xF0;
29D EF80 LDI R24,0xF0
29E BB88 OUT 0x18,R24
(0032) DDRC = 0x00;
29F BA24 OUT 0x14,R2
(0033) PORTC = 0xFF;
2A0 EF8F LDI R24,0xFF
2A1 BB85 OUT 0x15,R24
(0034) DDRD = 0xff;
2A2 BB81 OUT 0x11,R24
(0035) PORTD = 0xff;
2A3 BB82 OUT 0x12,R24
(0036)
(0037) //延时200ms
(0038) s_1ms(200);
2A4 EC08 LDI R16,0xC8
2A5 E010 LDI R17,0
2A6 DFDA RCALL _s_1ms
(0039) //DS18B20复位
(0040) ds1820_reset();
2A7 DDC3 RCALL _ds1820_reset
(0041) //1602 初始化
(0042) LcdInit();
2A8 DE9E RCALL _LcdInit
(0043) WriteChar(1,0,12,adc_0);
2A9 E680 LDI R24,0x60
2AA E090 LDI R25,0
2AB 839B STD Y+3,R25
2AC 838A STD Y+2,R24
2AD E08C LDI R24,0xC
2AE E090 LDI R25,0
2AF 8399 STD Y+1,R25
2B0 8388 STD Y+0,R24
2B1 2722 CLR R18
2B2 E001 LDI R16,1
2B3 DF9C RCALL _WriteChar
(0044) WriteChar(1,14,2,adc_1);
2B4 E68D LDI R24,0x6D
2B5 E090 LDI R25,0
2B6 839B STD Y+3,R25
2B7 838A STD Y+2,R24
2B8 E082 LDI R24,2
2B9 E090 LDI R25,0
2BA 8399 STD Y+1,R25
2BB 8388 STD Y+0,R24
2BC E02E LDI R18,0xE
2BD E001 LDI R16,1
2BE DF91 RCALL _WriteChar
2BF C037 RJMP 0x02F7
(0045)
(0046) while (1)
(0047) {
(0048) //进行一次转换
(0049) ds1820_start();
2C0 DE0C RCALL _ds1820_start
(0050) s_1ms(2000);
2C1 ED00 LDI R16,0xD0
2C2 E017 LDI R17,7
2C3 DFBD RCALL _s_1ms
(0051) i = ds1820_read_temp(); //读取温度数值
2C4 DE0E RCALL _ds1820_read_temp
2C5 0158 MOVW R10,R16
(0052) i = (i * 10) / 16; //数值处理
2C6 E00A LDI R16,0xA
2C7 E010 LDI R17,0
2C8 0195 MOVW R18,R10
2C9 940E 0316 CALL empy16s
2CB 0158 MOVW R10,R16
2CC 94B6 LSR R11
2CD 94A7 ROR R10
2CE 94B6 LSR R11
2CF 94A7 ROR R10
2D0 94B6 LSR R11
2D1 94A7 ROR R10
2D2 94B6 LSR R11
2D3 94A7 ROR R10
(0053) //第3位没有显示
(0054) i = i % 1000;
2D4 EE28 LDI R18,0xE8
2D5 E033 LDI R19,3
2D6 0185 MOVW R16,R10
2D7 940E 02FA CALL mod16u
2D9 0158 MOVW R10,R16
(0055) //显示第2位
(0056) tem2= i / 100;
2DA E624 LDI R18,0x64
2DB E030 LDI R19,0
2DC 940E 02FC CALL div16u
2DE 0168 MOVW R12,R16
(0057) WriteNum(1,12,tem2);
2DF 82D9 STD Y+1,R13
2E0 82C8 STD Y+0,R12
2E1 E02C LDI R18,0xC
2E2 E030 LDI R19,0
2E3 E001 LDI R16,1
2E4 E010 LDI R17,0
2E5 DF22 RCALL _WriteNum
(0058) i = i % 100;
2E6 E624 LDI R18,0x64
2E7 E030 LDI R19,0
2E8 0185 MOVW R16,R10
2E9 940E 02FA CALL mod16u
(0059) //显示第1位
(0060) tem1= i / 10;
2EB E02A LDI R18,0xA
2EC E030 LDI R19,0
2ED 940E 02FC CALL div16u
2EF 0158 MOVW R10,R16
(0061) WriteNum(1,13,tem1);
FILE: <library>
2F0 82B9 STD Y+1,R11
2F1 82A8 STD Y+0,R10
2F2 E02D LDI R18,0xD
2F3 E030 LDI R19,0
2F4 E001 LDI R16,1
2F5 E010 LDI R17,0
2F6 DF11 RCALL _WriteNum
2F7 CFC8 RJMP 0x02C0
2F8 9624 ADIW R28,4
2F9 9508 RET
mod16u:
2FA 9468 BSET 6
2FB C001 RJMP xdiv16u
div16u:
2FC 94E8 BCLR 6
xdiv16u:
2FD 92EA ST R14,-Y
2FE 92FA ST R15,-Y
2FF 938A ST R24,-Y
300 24EE CLR R14
301 24FF CLR R15
302 E180 LDI R24,0x10
303 0F00 LSL R16
304 1F11 ROL R17
305 1CEE ROL R14
306 1CFF ROL R15
307 16E2 CP R14,R18
308 06F3 CPC R15,R19
309 F018 BCS 0x030D
30A 1AE2 SUB R14,R18
30B 0AF3 SBC R15,R19
30C 9503 INC R16
30D 958A DEC R24
30E F7A1 BNE 0x0303
30F F416 BRTC 0x0312
310 2D0E MOV R16,R14
311 2D1F MOV R17,R15
312 9189 LD R24,Y+
313 90F9 LD R15,Y+
314 90E9 LD R14,Y+
315 9508 RET
empy16s:
316 920A ST R0,-Y
317 921A ST R1,-Y
318 938A ST R24,-Y
319 939A ST R25,-Y
31A 9F02 MUL R16,R18
31B 01C0 MOVW R24,R0
31C 9F12 MUL R17,R18
31D 0D90 ADD R25,R0
31E 9F03 MUL R16,R19
31F 0D90 ADD R25,R0
320 018C MOVW R16,R24
321 9199 LD R25,Y+
322 9189 LD R24,Y+
323 9019 LD R1,Y+
324 9009 LD R0,Y+
325 9508 RET
push_xgsetF00C:
326 937A ST R23,-Y
327 936A ST R22,-Y
328 935A ST R21,-Y
329 934A ST R20,-Y
32A 92BA ST R11,-Y
32B 92AA ST R10,-Y
32C 9508 RET
pop_xgsetF00C:
32D 90A9 LD R10,Y+
32E 90B9 LD R11,Y+
32F 9149 LD R20,Y+
330 9159 LD R21,Y+
331 9169 LD R22,Y+
332 9179 LD R23,Y+
333 9508 RET
push_xgsetF03C:
334 937A ST R23,-Y
335 936A ST R22,-Y
336 935A ST R21,-Y
337 934A ST R20,-Y
338 92DA ST R13,-Y
339 92CA ST R12,-Y
33A 92BA ST R11,-Y
33B 92AA ST R10,-Y
33C 9508 RET
pop_xgsetF03C:
33D 90A9 LD R10,Y+
33E 90B9 LD R11,Y+
33F 90C9 LD R12,Y+
340 90D9 LD R13,Y+
341 9149 LD R20,Y+
342 9159 LD R21,Y+
343 9169 LD R22,Y+
344 9179 LD R23,Y+
345 9508 RET
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -