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