⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 ds18b20.lis

📁 AVR-based single-chip temperature display system, so absolutely! DS18B20 sensors used
💻 LIS
📖 第 1 页 / 共 3 页
字号:
 00AA                   .dbline 75
 00AA           ;               value >>= 1;
 00AA 4695              lsr R20
 00AC                   .dbline 76
 00AC           ;               DQ_OUT;
 00AC D79A              sbi 0x1a,7
 00AE                   .dbline 77
 00AE           ;               DQ_CLR;
 00AE DF98              cbi 0x1b,7
 00B0                   .dbline 78
 00B0           ;               delay_nus(10);
 00B0 0AE0              ldi R16,10
 00B2 10E0              ldi R17,0
 00B4 A7DF              xcall _delay_nus
 00B6                   .dbline 79
 00B6           ;               DQ_SET;
 00B6 DF9A              sbi 0x1b,7
 00B8                   .dbline 80
 00B8           ;               DQ_IN;
 00B8 D798              cbi 0x1a,7
 00BA                   .dbline 81
 00BA           ;               delay_nus(10);
 00BA 0AE0              ldi R16,10
 00BC 10E0              ldi R17,0
 00BE A2DF              xcall _delay_nus
 00C0                   .dbline 82
 00C0           ;               if (DQ_R) {
 00C0 CF9B              sbis 0x19,7
 00C2 01C0              rjmp L27
 00C4                   .dbline 82
 00C4                   .dbline 83
 00C4           ;                       value|=0x80;
 00C4 4068              ori R20,128
 00C6                   .dbline 84
 00C6           ;                       }
 00C6           L27:
 00C6                   .dbline 85
 00C6 0CE3              ldi R16,60
 00C8 10E0              ldi R17,0
 00CA 9CDF              xcall _delay_nus
 00CC                   .dbline 86
 00CC           L24:
 00CC                   .dbline 74
 00CC 6A95              dec R22
 00CE           L26:
 00CE                   .dbline 74
 00CE 6623              tst R22
 00D0 61F7              brne L23
 00D2                   .dbline 87
 00D2           ;               delay_nus(60);          /*延时60uS*/
 00D2           ;               }
 00D2           ;       if (flag & 0x80) {                      /*恢复中断状态*/
 00D2 20900500          lds R2,_flag
 00D6 27FE              sbrs R2,7
 00D8 01C0              rjmp L29
 00DA                   .dbline 87
 00DA                   .dbline 88
 00DA           ;               SEI();
 00DA 7894              sei
 00DC                   .dbline 89
 00DC           ;               }
 00DC           L29:
 00DC                   .dbline 90
 00DC           ;       return(value);
 00DC 042F              mov R16,R20
 00DE                   .dbline -2
 00DE           L22:
 00DE 0E940000          xcall pop_gset2
 00E2                   .dbline 0 ; func end
 00E2 0895              ret
 00E4                   .dbsym r value 20 c
 00E4                   .dbsym r i 22 c
 00E4                   .dbend
 00E4                   .dbfunc e ds1820_write_byte _ds1820_write_byte fV
 00E4           ;              i -> R20
 00E4           ;          value -> R22
                        .even
 00E4           _ds1820_write_byte::
 00E4 0E940000          xcall push_gset2
 00E8 602F              mov R22,R16
 00EA                   .dbline -1
 00EA                   .dbline 94
 00EA           ; }
 00EA           ; 
 00EA           ; /*DS18B20字节写入函数*/
 00EA           ; void ds1820_write_byte(unsigned char value) {
 00EA                   .dbline 97
 00EA           ; 
 00EA           ;       unsigned char i;
 00EA           ;       flag = SREG;                            /*中断保护*/
 00EA 2FB6              in R2,0x3f
 00EC 20920500          sts _flag,R2
 00F0                   .dbline 98
 00F0           ;       CLI();                                          /*关中断*/
 00F0 F894              cli
 00F2                   .dbline 99
 00F2 48E0              ldi R20,8
 00F4 0DC0              xjmp L35
 00F6           L32:
 00F6                   .dbline 99
 00F6           ;       for (i = 8; i != 0; i--) {
 00F6                   .dbline 100
 00F6           ;               DQ_OUT;
 00F6 D79A              sbi 0x1a,7
 00F8                   .dbline 101
 00F8           ;               DQ_CLR;
 00F8 DF98              cbi 0x1b,7
 00FA                   .dbline 102
 00FA           ;               delay_nus(4);
 00FA 04E0              ldi R16,4
 00FC 10E0              ldi R17,0
 00FE 82DF              xcall _delay_nus
 0100                   .dbline 103
 0100           ;               if (value & 0x01) {
 0100 60FD              sbrc R22,0
 0102                   .dbline 103
 0102                   .dbline 104
 0102           ;                       DQ_SET;
 0102 DF9A              sbi 0x1b,7
 0104                   .dbline 105
 0104           ;                       }
 0104           L36:
 0104                   .dbline 106
 0104 00E5              ldi R16,80
 0106 10E0              ldi R17,0
 0108 7DDF              xcall _delay_nus
 010A                   .dbline 107
 010A DF9A              sbi 0x1b,7
 010C                   .dbline 108
 010C 6695              lsr R22
 010E                   .dbline 109
 010E           L33:
 010E                   .dbline 99
 010E 4A95              dec R20
 0110           L35:
 0110                   .dbline 99
 0110 4423              tst R20
 0112 89F7              brne L32
 0114                   .dbline 110
 0114 20900500          lds R2,_flag
 0118 27FE              sbrs R2,7
 011A 01C0              rjmp L38
 011C                   .dbline 110
 011C                   .dbline 111
 011C 7894              sei
 011E                   .dbline 112
 011E           L38:
 011E                   .dbline -2
 011E           L31:
 011E 0E940000          xcall pop_gset2
 0122                   .dbline 0 ; func end
 0122 0895              ret
 0124                   .dbsym r i 20 c
 0124                   .dbsym r value 22 c
 0124                   .dbend
 0124                   .dbfunc e ds1820_start _ds1820_start fV
                        .even
 0124           _ds1820_start::
 0124                   .dbline -1
 0124                   .dbline 116
 0124           ;               delay_nus(80);  /*延时80uS*/
 0124           ;               DQ_SET;                                 /*位结束*/
 0124           ;               value >>= 1;
 0124           ;               }
 0124           ;       if (flag & 0x80) {                      /*恢复中断状态*/
 0124           ;               SEI();
 0124           ;               }
 0124           ; }
 0124           ; 
 0124           ; /*启动ds1820转换*/
 0124           ; void ds1820_start(void) {
 0124                   .dbline 118
 0124           ; 
 0124           ;       ds1820_reset();
 0124 97DF              xcall _ds1820_reset
 0126                   .dbline 119
 0126           ;       ds1820_write_byte(0xCC);        /*勿略地址*/
 0126 0CEC              ldi R16,204
 0128 DDDF              xcall _ds1820_write_byte
 012A                   .dbline 120
 012A           ;       ds1820_write_byte(0x44);        /*启动转换*/
 012A 04E4              ldi R16,68
 012C DBDF              xcall _ds1820_write_byte
 012E                   .dbline -2
 012E           L40:
 012E                   .dbline 0 ; func end
 012E 0895              ret
 0130                   .dbend
 0130                   .dbfunc e ds1820_read_temp _ds1820_read_temp fi
 0130           ;            buf -> y+0
 0130           ;              i -> R20,R21
                        .even
 0130           _ds1820_read_temp::
 0130 0E940000          xcall push_gset1
 0134 2997              sbiw R28,9
 0136                   .dbline -1
 0136                   .dbline 124
 0136           ; }
 0136           ; 
 0136           ; /*DS8B20读取温度信息*/
 0136           ; unsigned int ds1820_read_temp(void) {
 0136                   .dbline 129
 0136           ; 
 0136           ;       unsigned int i;
 0136           ;       unsigned char buf[9];
 0136           ; 
 0136           ;       ds1820_reset();
 0136 8EDF              xcall _ds1820_reset
 0138                   .dbline 130
 0138           ;       ds1820_write_byte(0xCC);        /*勿略地址*/
 0138 0CEC              ldi R16,204
 013A D4DF              xcall _ds1820_write_byte
 013C                   .dbline 131
 013C           ;       ds1820_write_byte(0xBE);        /*读取温度*/
 013C 0EEB              ldi R16,190
 013E D2DF              xcall _ds1820_write_byte
 0140                   .dbline 132
 0140 4427              clr R20
 0142 5527              clr R21
 0144 08C0              xjmp L45
 0146           L42:
 0146                   .dbline 132
 0146                   .dbline 133
 0146 A8DF              xcall _ds1820_read_byte
 0148 CE01              movw R24,R28
 014A FA01              movw R30,R20
 014C E80F              add R30,R24
 014E F91F              adc R31,R25
 0150 0083              std z+0,R16
 0152                   .dbline 134
 0152           L43:
 0152                   .dbline 132
 0152 4F5F              subi R20,255  ; offset = 1
 0154 5F4F              sbci R21,255
 0156           L45:
 0156                   .dbline 132
 0156           ;       for (i = 0; i < 9; i++) {
 0156 4930              cpi R20,9
 0158 E0E0              ldi R30,0
 015A 5E07              cpc R21,R30
 015C A0F3              brlo L42
 015E                   .dbline 135
 015E           ;               buf[i] = ds1820_read_byte();
 015E           ;               }
 015E           ;       i = buf[1];
 015E 4981              ldd R20,y+1
 0160 5527              clr R21
 0162                   .dbline 136
 0162           ;       i <<= 8;
 0162 542F              mov R21,R20
 0164 4427              clr R20
 0166                   .dbline 137
 0166           ;       i |= buf[0];
 0166 2880              ldd R2,y+0
 0168 3324              clr R3
 016A 4229              or R20,R2
 016C 5329              or R21,R3
 016E                   .dbline 139
 016E           ;       
 016E           ;       return i;
 016E 8A01              movw R16,R20
 0170                   .dbline -2
 0170           L41:
 0170 2996              adiw R28,9
 0172 0E940000          xcall pop_gset1
 0176                   .dbline 0 ; func end
 0176 0895              ret
 0178                   .dbsym l buf 0 A[9:9]c
 0178                   .dbsym r i 20 i
 0178                   .dbend
 0178                   .dbfunc e time_to_disbuffer _time_to_disbuffer fV
 0178           ;              d -> y+2
 0178           ;              c -> y+0
 0178           ;              b -> R18,R19
 0178           ;              a -> R16,R17
                        .even
 0178           _time_to_disbuffer::
 0178                   .dbline -1
 0178                   .dbline 142
 0178           ; }
 0178           ; void time_to_disbuffer(int a,int b,int c,int d)//时间送显示缓冲区函数
 0178           ; {   
 0178                   .dbline 144
 0178           ;   
 0178           ;     dis_buff[0] = a;
 0178 00930100          sts _dis_buff,R16
 017C                   .dbline 145
 017C           ;     dis_buff[1] =b;
 017C 20930200          sts _dis_buff+1,R18
 0180                   .dbline 146
 0180           ;       dis_buff[2] = c;
 0180 2880              ldd R2,y+0
 0182 3980              ldd R3,y+1
 0184 20920300          sts _dis_buff+2,R2
 0188                   .dbline 147
 0188           ;     dis_buff[3] =d;
 0188 2A80              ldd R2,y+2
 018A 3B80              ldd R3,y+3
 018C 20920400          sts _dis_buff+3,R2
 0190                   .dbline -2
 0190           L47:
 0190                   .dbline 0 ; func end
 0190 0895              ret
 0192                   .dbsym l d 2 I
 0192                   .dbsym l c 0 I
 0192                   .dbsym r b 18 I
 0192                   .dbsym r a 16 I
 0192                   .dbend
 0192                   .dbfunc e display _display fV
                        .even
 0192           _display::
 0192                   .dbline -1
 0192                   .dbline 151
 0192                   .dbline 151
 0192 8FEF              ldi R24,255
 0194 82BB              out 0x12,R24
 0196                   .dbline 152
 0196 80E0              ldi R24,<_dis_buff
 0198 90E0              ldi R25,>_dis_buff

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -