📄 ds18b20_main.lis
字号:
0428 .dbline 230
0428 ; t = *pBuffer;
0428 FA01 movw R30,R20
042A C080 ldd R12,z+0
042C .dbline 231
042C ; s_ms(500);
042C 04EF ldi R16,500
042E 11E0 ldi R17,1
0430 89DE xcall _s_ms
0432 .dbline 232
0432 ; PORTD = t;
0432 C2BA out 0x12,R12
0434 .dbline 233
0434 ; s_ms(500);
0434 04EF ldi R16,500
0436 11E0 ldi R17,1
0438 85DE xcall _s_ms
043A .dbline 234
043A ; PORTA|=(1<<EN);
043A DF9A sbi 0x1b,7
043C .dbline 235
043C ; s_ms(500);
043C 04EF ldi R16,500
043E 11E0 ldi R17,1
0440 81DE xcall _s_ms
0442 .dbline 236
0442 ; PORTA&=~(1<<EN);
0442 DF98 cbi 0x1b,7
0444 .dbline 237
0444 ; s_ms(500);
0444 04EF ldi R16,500
0446 11E0 ldi R17,1
0448 7DDE xcall _s_ms
044A .dbline 238
044A ; pBuffer++;
044A 4F5F subi R20,255 ; offset = 1
044C 5F4F sbci R21,255
044E .dbline 239
044E ; }
044E L78:
044E .dbline 228
044E AA94 dec R10
0450 L80:
0450 .dbline 228
0450 AA20 tst R10
0452 51F7 brne L77
0454 X20:
0454 .dbline -2
0454 L74:
0454 .dbline 0 ; func end
0454 0C940000 xjmp pop_xgsetF03C
0458 .dbsym r t 12 c
0458 .dbsym r i 10 c
0458 .dbsym r pBuffer 20 pc
0458 .dbsym l num 8 i
0458 .dbsym r col 10 c
0458 .dbsym r row 22 c
0458 .dbend
.area data(ram, con, rel)
0000 .dbfile E:\产品\开发板\光盘\16实验程序\DS18B20\1602.h
0000 _adc_0::
0000 .blkb 13
.area idata
0000 54656D70657261747572653A00 .byte 'T,'e,'m,'p,'e,'r,'a,'t,'u,'r,'e,58,0
.area data(ram, con, rel)
000D .dbfile E:\产品\开发板\光盘\16实验程序\DS18B20\1602.h
000D .dbfile E:\产品\开发板\光盘\16实验程序\DS18B20\DS18B20_main.c
000D .dbsym e adc_0 _adc_0 A[13:13]c
000D _adc_1::
000D .blkb 2
.area idata
000D DF43 .byte 223,'C
.area data(ram, con, rel)
000F .dbfile E:\产品\开发板\光盘\16实验程序\DS18B20\DS18B20_main.c
000F .dbsym e adc_1 _adc_1 A[2:2]c
.area text(rom, con, rel)
0458 .dbfile E:\产品\开发板\光盘\16实验程序\DS18B20\DS18B20_main.c
0458 .dbfunc e s_1ms _s_1ms fV
0458 ; aa -> R20,R21
0458 ; ms -> R16,R17
.even
0458 _s_1ms::
0458 4A93 st -y,R20
045A 5A93 st -y,R21
045C .dbline -1
045C .dbline 14
045C ; //温度传感器DS18B20试验
045C ; //间隔2s采集一次温度值
045C ; //使用1602的液晶作为显示
045C ; #include <iom16v.h>
045C ; #include <macros.h>
045C ; #include "18B20.h"
045C ; #include "1602.h"
045C ;
045C ; uchar adc_0[]={"Temperature:"};
045C ; uchar adc_1[]={0xdf,0x43};
045C ;
045C ; //延时函数在16M时延时1ms
045C ; void s_1ms(unsigned int ms)
045C ; {
045C .dbline 16
045C ; unsigned int aa;
045C ; for(;ms>=1;ms--)
045C 0CC0 xjmp L85
045E L82:
045E .dbline 17
045E ; {
045E .dbline 18
045E ; for(aa=0;aa<=2000;aa++)
045E 4427 clr R20
0460 5527 clr R21
0462 02C0 xjmp L89
0464 L86:
0464 .dbline 19
0464 ; {;}
0464 .dbline 19
0464 .dbline 19
0464 L87:
0464 .dbline 18
0464 4F5F subi R20,255 ; offset = 1
0466 5F4F sbci R21,255
0468 L89:
0468 .dbline 18
0468 80ED ldi R24,2000
046A 97E0 ldi R25,7
046C 8417 cp R24,R20
046E 9507 cpc R25,R21
0470 C8F7 brsh L86
0472 X21:
0472 .dbline 20
0472 ; }
0472 L83:
0472 .dbline 16
0472 0150 subi R16,1
0474 1040 sbci R17,0
0476 L85:
0476 .dbline 16
0476 0130 cpi R16,1
0478 E0E0 ldi R30,0
047A 1E07 cpc R17,R30
047C 80F7 brsh L82
047E X22:
047E .dbline -2
047E L81:
047E .dbline 0 ; func end
047E 5991 ld R21,y+
0480 4991 ld R20,y+
0482 0895 ret
0484 .dbsym r aa 20 i
0484 .dbsym r ms 16 i
0484 .dbend
0484 .dbfunc e main _main fV
0484 ; tem3 -> <dead>
0484 ; tem1 -> R10,R11
0484 ; tem2 -> R12,R13
0484 ; i -> R10,R11
.even
0484 _main::
0484 2497 sbiw R28,4
0486 .dbline -1
0486 .dbline 25
0486 ; }
0486 ;
0486 ;
0486 ; void main()
0486 ; {
0486 .dbline 28
0486 ; unsigned int i,tem3,tem2,tem1;
0486 ; //端口初始化
0486 ; DDRA = 0xff;
0486 8FEF ldi R24,255
0488 8ABB out 0x1a,R24
048A .dbline 29
048A ; PORTA = 0x00;
048A 2224 clr R2
048C 2BBA out 0x1b,R2
048E .dbline 30
048E ; DDRB = 0xFF;
048E 87BB out 0x17,R24
0490 .dbline 31
0490 ; PORTB = 0xF0;
0490 80EF ldi R24,240
0492 88BB out 0x18,R24
0494 .dbline 32
0494 ; DDRC = 0x00;
0494 24BA out 0x14,R2
0496 .dbline 33
0496 ; PORTC = 0xFF;
0496 8FEF ldi R24,255
0498 85BB out 0x15,R24
049A .dbline 34
049A ; DDRD = 0xff;
049A 81BB out 0x11,R24
049C .dbline 35
049C ; PORTD = 0xff;
049C 82BB out 0x12,R24
049E .dbline 38
049E ;
049E ; //延时200ms
049E ; s_1ms(200);
049E 08EC ldi R16,200
04A0 10E0 ldi R17,0
04A2 DADF xcall _s_1ms
04A4 .dbline 40
04A4 ; //DS18B20复位
04A4 ; ds1820_reset();
04A4 C3DD xcall _ds1820_reset
04A6 .dbline 42
04A6 ; //1602 初始化
04A6 ; LcdInit();
04A6 9EDE xcall _LcdInit
04A8 .dbline 43
04A8 ; WriteChar(1,0,12,adc_0);
04A8 80E0 ldi R24,<_adc_0
04AA 90E0 ldi R25,>_adc_0
04AC 9B83 std y+3,R25
04AE 8A83 std y+2,R24
04B0 8CE0 ldi R24,12
04B2 90E0 ldi R25,0
04B4 9983 std y+1,R25
04B6 8883 std y+0,R24
04B8 2227 clr R18
04BA 01E0 ldi R16,1
04BC 9CDF xcall _WriteChar
04BE .dbline 44
04BE ; WriteChar(1,14,2,adc_1);
04BE 80E0 ldi R24,<_adc_1
04C0 90E0 ldi R25,>_adc_1
04C2 9B83 std y+3,R25
04C4 8A83 std y+2,R24
04C6 82E0 ldi R24,2
04C8 90E0 ldi R25,0
04CA 9983 std y+1,R25
04CC 8883 std y+0,R24
04CE 2EE0 ldi R18,14
04D0 01E0 ldi R16,1
04D2 91DF xcall _WriteChar
04D4 37C0 xjmp L92
04D6 L91:
04D6 .dbline 47
04D6 ;
04D6 ; while (1)
04D6 ; {
04D6 .dbline 49
04D6 ; //进行一次转换
04D6 ; ds1820_start();
04D6 0CDE xcall _ds1820_start
04D8 .dbline 50
04D8 ; s_1ms(2000);
04D8 00ED ldi R16,2000
04DA 17E0 ldi R17,7
04DC BDDF xcall _s_1ms
04DE .dbline 51
04DE ; i = ds1820_read_temp(); //读取温度数值
04DE 0EDE xcall _ds1820_read_temp
04E0 5801 movw R10,R16
04E2 .dbline 52
04E2 ; i = (i * 10) / 16; //数值处理
04E2 0AE0 ldi R16,10
04E4 10E0 ldi R17,0
04E6 9501 movw R18,R10
04E8 0E940000 xcall empy16s
04EC 5801 movw R10,R16
04EE B694 lsr R11
04F0 A794 ror R10
04F2 B694 lsr R11
04F4 A794 ror R10
04F6 B694 lsr R11
04F8 A794 ror R10
04FA B694 lsr R11
04FC A794 ror R10
04FE .dbline 54
04FE ; //第3位没有显示
04FE ; i = i % 1000;
04FE 28EE ldi R18,1000
0500 33E0 ldi R19,3
0502 8501 movw R16,R10
0504 0E940000 xcall mod16u
0508 5801 movw R10,R16
050A .dbline 56
050A ; //显示第2位
050A ; tem2= i / 100;
050A 24E6 ldi R18,100
050C 30E0 ldi R19,0
050E 0E940000 xcall div16u
0512 6801 movw R12,R16
0514 .dbline 57
0514 ; WriteNum(1,12,tem2);
0514 D982 std y+1,R13
0516 C882 std y+0,R12
0518 2CE0 ldi R18,12
051A 30E0 ldi R19,0
051C 01E0 ldi R16,1
051E 10E0 ldi R17,0
0520 22DF xcall _WriteNum
0522 .dbline 58
0522 ; i = i % 100;
0522 24E6 ldi R18,100
0524 30E0 ldi R19,0
0526 8501 movw R16,R10
0528 0E940000 xcall mod16u
052C .dbline 60
052C ; //显示第1位
052C ; tem1= i / 10;
052C 2AE0 ldi R18,10
052E 30E0 ldi R19,0
0530 0E940000 xcall div16u
0534 5801 movw R10,R16
0536 .dbline 61
0536 ; WriteNum(1,13,tem1);
0536 B982 std y+1,R11
0538 A882 std y+0,R10
053A 2DE0 ldi R18,13
053C 30E0 ldi R19,0
053E 01E0 ldi R16,1
0540 10E0 ldi R17,0
0542 11DF xcall _WriteNum
0544 .dbline 62
0544 ; }
0544 L92:
0544 .dbline 46
0544 C8CF xjmp L91
0546 X23:
0546 .dbline -2
0546 L90:
0546 .dbline 0 ; func end
0546 2496 adiw R28,4
0548 0895 ret
054A .dbsym l tem3 5 i
054A .dbsym r tem1 10 i
054A .dbsym r tem2 12 i
054A .dbsym r i 10 i
054A .dbend
.area bss(ram, con, rel)
0000 .dbfile E:\产品\开发板\光盘\16实验程序\DS18B20\DS18B20_main.c
0000 _init_f::
0000 .blkb 1
0001 .dbfile E:\产品\开发板\光盘\16实验程序\DS18B20\18B20.h
0001 .dbsym e init_f _init_f c
0001 ; }
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -