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