📄 ds18b20_main.lis
字号:
00E0 20900000 lds R2,_init_f
00E4 27FE sbrs R2,7
00E6 01C0 rjmp L29
00E8 X8:
00E8 .dbline 99
00E8 ; {
00E8 .dbline 100
00E8 ; SEI();
00E8 7894 sei
00EA .dbline 101
00EA ; }
00EA L29:
00EA .dbline -2
00EA L22:
00EA .dbline 0 ; func end
00EA 4991 ld R20,y+
00EC A990 ld R10,y+
00EE 0895 ret
00F0 .dbsym r i 20 c
00F0 .dbsym r value 10 c
00F0 .dbend
00F0 .dbfunc e ds1820_start _ds1820_start fV
.even
00F0 _ds1820_start::
00F0 .dbline -1
00F0 .dbline 106
00F0 ; }
00F0 ;
00F0 ; //启动ds1820转换
00F0 ; void ds1820_start(void)
00F0 ; {
00F0 .dbline 107
00F0 ; ds1820_reset();
00F0 9DDF xcall _ds1820_reset
00F2 .dbline 108
00F2 ; ds1820_write_byte(0xCC); //勿略ROM
00F2 0CEC ldi R16,204
00F4 DCDF xcall _ds1820_write_byte
00F6 .dbline 109
00F6 ; ds1820_write_byte(0x44); //启动转换
00F6 04E4 ldi R16,68
00F8 DADF xcall _ds1820_write_byte
00FA .dbline -2
00FA L31:
00FA .dbline 0 ; func end
00FA 0895 ret
00FC .dbend
00FC .dbfunc e ds1820_read_temp _ds1820_read_temp fi
00FC ; buf -> y+0
00FC ; i -> R20,R21
.even
00FC _ds1820_read_temp::
00FC 4A93 st -y,R20
00FE 5A93 st -y,R21
0100 2997 sbiw R28,9
0102 .dbline -1
0102 .dbline 114
0102 ; }
0102 ;
0102 ; //读温度
0102 ; unsigned int ds1820_read_temp(void)
0102 ; {
0102 .dbline 117
0102 ; unsigned int i;
0102 ; unsigned char buf[9];
0102 ; ds1820_reset();
0102 94DF xcall _ds1820_reset
0104 .dbline 118
0104 ; ds1820_write_byte(0xCC); //勿略ROM
0104 0CEC ldi R16,204
0106 D3DF xcall _ds1820_write_byte
0108 .dbline 119
0108 ; ds1820_write_byte(0xBE); //读温度
0108 0EEB ldi R16,190
010A D1DF xcall _ds1820_write_byte
010C .dbline 120
010C ; for (i = 0; i < 9; i++) {
010C 4427 clr R20
010E 5527 clr R21
0110 08C0 xjmp L36
0112 L33:
0112 .dbline 120
0112 .dbline 121
0112 ; buf[i] = ds1820_read_byte();
0112 A7DF xcall _ds1820_read_byte
0114 CE01 movw R24,R28
0116 FA01 movw R30,R20
0118 E80F add R30,R24
011A F91F adc R31,R25
011C 0083 std z+0,R16
011E .dbline 122
011E ; }
011E L34:
011E .dbline 120
011E 4F5F subi R20,255 ; offset = 1
0120 5F4F sbci R21,255
0122 L36:
0122 .dbline 120
0122 4930 cpi R20,9
0124 E0E0 ldi R30,0
0126 5E07 cpc R21,R30
0128 A0F3 brlo L33
012A X9:
012A .dbline 123
012A ; i = buf[1];
012A 4981 ldd R20,y+1
012C 5527 clr R21
012E .dbline 124
012E ; i <<= 8;
012E 542F mov R21,R20
0130 4427 clr R20
0132 .dbline 125
0132 ; i |= buf[0];
0132 2880 ldd R2,y+0
0134 3324 clr R3
0136 4229 or R20,R2
0138 5329 or R21,R3
013A .dbline 126
013A ; return i;
013A 8A01 movw R16,R20
013C .dbline -2
013C L32:
013C .dbline 0 ; func end
013C 2996 adiw R28,9
013E 5991 ld R21,y+
0140 4991 ld R20,y+
0142 0895 ret
0144 .dbsym l buf 0 A[9:9]c
0144 .dbsym r i 20 i
0144 .dbend
0144 .dbfile E:\产品\开发板\光盘\16实验程序\DS18B20\1602.h
0144 .dbfunc e s_ms _s_ms fV
0144 ; ms -> R16,R17
.even
0144 _s_ms::
0144 .dbline -1
0144 .dbline 9
0144 ; #define uchar unsigned char
0144 ; #define uint unsigned int
0144 ;
0144 ; #define RS 5
0144 ; #define RW 6
0144 ; #define EN 7
0144 ;
0144 ; void s_ms(uint ms)
0144 ; {
0144 .dbline 10
0144 ; for(;ms>1;ms--);
0144 02C0 xjmp L42
0146 L39:
0146 .dbline 10
0146 L40:
0146 .dbline 10
0146 0150 subi R16,1
0148 1040 sbci R17,0
014A L42:
014A .dbline 10
014A 81E0 ldi R24,1
014C 90E0 ldi R25,0
014E 8017 cp R24,R16
0150 9107 cpc R25,R17
0152 C8F3 brlo L39
0154 X10:
0154 .dbline -2
0154 L38:
0154 .dbline 0 ; func end
0154 0895 ret
0156 .dbsym r ms 16 i
0156 .dbend
0156 .dbfunc e busy _busy fV
0156 ; temp -> R20
.even
0156 _busy::
0156 4A93 st -y,R20
0158 .dbline -1
0158 .dbline 15
0158 ; }
0158 ;
0158 ; //查忙
0158 ; void busy(void)
0158 ; {
0158 .dbline 17
0158 ; uchar temp;
0158 ; s_ms(500);
0158 04EF ldi R16,500
015A 11E0 ldi R17,1
015C F3DF xcall _s_ms
015E .dbline 18
015E ; PORTA&=~(1<<RS); //RS=0
015E DD98 cbi 0x1b,5
0160 .dbline 19
0160 ; s_ms(500);
0160 04EF ldi R16,500
0162 11E0 ldi R17,1
0164 EFDF xcall _s_ms
0166 .dbline 20
0166 ; PORTA|=(1<<RW); //RW=1
0166 DE9A sbi 0x1b,6
0168 .dbline 21
0168 ; s_ms(500);
0168 04EF ldi R16,500
016A 11E0 ldi R17,1
016C EBDF xcall _s_ms
016E 1AC0 xjmp L45
0170 L44:
0170 .dbline 23
0170 ; while(temp)
0170 ; {
0170 .dbline 24
0170 ; PORTA|=(1<<EN); //EN=1
0170 DF9A sbi 0x1b,7
0172 .dbline 25
0172 ; s_ms(500);
0172 04EF ldi R16,500
0174 11E0 ldi R17,1
0176 E6DF xcall _s_ms
0178 .dbline 26
0178 ; DDRD=0x00; //A口变输入
0178 2224 clr R2
017A 21BA out 0x11,R2
017C .dbline 27
017C ; PORTD=0xff; //上拉使能
017C 8FEF ldi R24,255
017E 82BB out 0x12,R24
0180 .dbline 28
0180 ; s_ms(500);
0180 04EF ldi R16,500
0182 11E0 ldi R17,1
0184 DFDF xcall _s_ms
0186 .dbline 29
0186 ; temp = PIND&0x80; //读取A口
0186 40B3 in R20,0x10
0188 4078 andi R20,128
018A .dbline 30
018A ; s_ms(500);
018A 04EF ldi R16,500
018C 11E0 ldi R17,1
018E DADF xcall _s_ms
0190 .dbline 31
0190 ; DDRD=0xff;
0190 8FEF ldi R24,255
0192 81BB out 0x11,R24
0194 .dbline 32
0194 ; PORTD=0xff; //A口变输出
0194 82BB out 0x12,R24
0196 .dbline 33
0196 ; s_ms(500);
0196 04EF ldi R16,500
0198 11E0 ldi R17,1
019A D4DF xcall _s_ms
019C .dbline 34
019C ; PORTA&=~(1<<EN); //EN=0
019C DF98 cbi 0x1b,7
019E .dbline 35
019E ; s_ms(500);
019E 04EF ldi R16,500
01A0 11E0 ldi R17,1
01A2 D0DF xcall _s_ms
01A4 .dbline 36
01A4 ; }
01A4 L45:
01A4 .dbline 22
01A4 4423 tst R20
01A6 21F7 brne L44
01A8 X11:
01A8 .dbline -2
01A8 L43:
01A8 .dbline 0 ; func end
01A8 4991 ld R20,y+
01AA 0895 ret
01AC .dbsym r temp 20 c
01AC .dbend
01AC .dbfunc e writecom _writecom fV
01AC ; com -> R10
.even
01AC _writecom::
01AC AA92 st -y,R10
01AE A02E mov R10,R16
01B0 .dbline -1
01B0 .dbline 41
01B0 ; }
01B0 ;
01B0 ; //写指令
01B0 ; void writecom(uchar com)
01B0 ; {
01B0 .dbline 42
01B0 ; busy();
01B0 D2DF xcall _busy
01B2 .dbline 43
01B2 ; s_ms(500);
01B2 04EF ldi R16,500
01B4 11E0 ldi R17,1
01B6 C6DF xcall _s_ms
01B8 .dbline 44
01B8 ; PORTA&=~(1<<RS); //RS=0
01B8 DD98 cbi 0x1b,5
01BA .dbline 45
01BA ; s_ms(500);
01BA 04EF ldi R16,500
01BC 11E0 ldi R17,1
01BE C2DF xcall _s_ms
01C0 .dbline 46
01C0 ; PORTA&=~(1<<RW); //RW=0
01C0 DE98 cbi 0x1b,6
01C2 .dbline 47
01C2 ; s_ms(500);
01C2 04EF ldi R16,500
01C4 11E0 ldi R17,1
01C6 BEDF xcall _s_ms
01C8 .dbline 48
01C8 ; PORTA|=(1<<EN); //EN=1
01C8 DF9A sbi 0x1b,7
01CA .dbline 49
01CA ; s_ms(500);
01CA 04EF ldi R16,500
01CC 11E0 ldi R17,1
01CE BADF xcall _s_ms
01D0 .dbline 50
01D0 ; PORTD = com; //输出指令
01D0 A2BA out 0x12,R10
01D2 .dbline 51
01D2 ; s_ms(500);
01D2 04EF ldi R16,500
01D4 11E0 ldi R17,1
01D6 B6DF xcall _s_ms
01D8 .dbline 52
01D8 ; PORTA&=~(1<<EN); //EN=0
01D8 DF98 cbi 0x1b,7
01DA .dbline 53
01DA ; s_ms(500);
01DA 04EF ldi R16,500
01DC 11E0 ldi R17,1
01DE B2DF xcall _s_ms
01E0 .dbline -2
01E0 L47:
01E0 .dbline 0 ; func end
01E0 A990 ld R10,y+
01E2 0895 ret
01E4 .dbsym r com 10 c
01E4 .dbend
01E4 .dbfunc e LcdInit _LcdInit fV
.even
01E4 _LcdInit::
01E4 .dbline -1
01E4 .dbline 58
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -