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

📄 ds1820.lis

📁 用AVR单片机做的一些程序,包括跑马灯显示,PWM产生,ADC转换等
💻 LIS
📖 第 1 页 / 共 2 页
字号:
 00CE           ;               NOP();
 00CE 0000              nop
 00D0                   .dbline 98
 00D0           ;               if (DQ_R) {
 00D0 029B              sbis 0x0,2
 00D2 01C0              rjmp L17
 00D4                   .dbline 98
 00D4                   .dbline 99
 00D4           ;                       value|=0x80;
 00D4 4068              ori R20,128
 00D6                   .dbline 100
 00D6           ;                       }
 00D6           L17:
 00D6                   .dbline 101
 00D6 05E0              ldi R16,5
 00D8 93DF              xcall _delay_10us
 00DA                   .dbline 102
 00DA           L14:
 00DA                   .dbline 78
 00DA 6A95              dec R22
 00DC           L16:
 00DC                   .dbline 78
 00DC 6623              tst R22
 00DE A9F6              brne L13
 00E0                   .dbline 103
 00E0           ;               delay_10us(5);                  /*延时60uS*/
 00E0           ;               }
 00E0           ;       if (flag & 0x80) {                      /*恢复中断状态*/
 00E0 20900000          lds R2,_flag
 00E4 27FE              sbrs R2,7
 00E6 01C0              rjmp L19
 00E8                   .dbline 103
 00E8                   .dbline 104
 00E8           ;               SEI();
 00E8 7894              sei
 00EA                   .dbline 105
 00EA           ;               }
 00EA           L19:
 00EA                   .dbline 106
 00EA           ;       return(value);
 00EA 042F              mov R16,R20
 00EC                   .dbline -2
 00EC           L12:
 00EC 0E940000          xcall pop_gset2
 00F0                   .dbline 0 ; func end
 00F0 0895              ret
 00F2                   .dbsym r value 20 c
 00F2                   .dbsym r i 22 c
 00F2                   .dbend
 00F2                   .dbfunc e ds1820_write_byte _ds1820_write_byte fV
 00F2           ;              i -> R20
 00F2           ;          value -> R22
                        .even
 00F2           _ds1820_write_byte::
 00F2 0E940000          xcall push_gset2
 00F6 602F              mov R22,R16
 00F8                   .dbline -1
 00F8                   .dbline 110
 00F8           ; }
 00F8           ; 
 00F8           ; /*DS18B20字节写入函数*/
 00F8           ; void ds1820_write_byte(unsigned char value) {
 00F8                   .dbline 113
 00F8           ; 
 00F8           ;       unsigned char i;
 00F8           ;       flag = SREG;                            /*中断保护*/
 00F8 2FB6              in R2,0x3f
 00FA 20920000          sts _flag,R2
 00FE                   .dbline 114
 00FE           ;       CLI();                                          /*关中断*/
 00FE F894              cli
 0100                   .dbline 115
 0100 48E0              ldi R20,8
 0102 1EC0              xjmp L25
 0104           L22:
 0104                   .dbline 115
 0104           ;       for (i = 8; i != 0; i--) {
 0104                   .dbline 116
 0104           ;               DQ_OUT;
 0104 80916100          lds R24,97
 0108 8460              ori R24,4
 010A 80936100          sts 97,R24
 010E                   .dbline 117
 010E           ;               DQ_CLR;
 010E 80916200          lds R24,98
 0112 8B7F              andi R24,251
 0114 80936200          sts 98,R24
 0118                   .dbline 118
 0118           ;               NOP();                                  /*延时4uS*/
 0118 0000              nop
 011A                   .dbline 119
 011A           ;               NOP();
 011A 0000              nop
 011C                   .dbline 120
 011C           ;               NOP();
 011C 0000              nop
 011E                   .dbline 121
 011E           ;               NOP();
 011E 0000              nop
 0120                   .dbline 122
 0120           ;               if (value & 0x01) {
 0120 60FF              sbrs R22,0
 0122 05C0              rjmp L26
 0124                   .dbline 122
 0124                   .dbline 123
 0124           ;                       DQ_SET;
 0124 80916200          lds R24,98
 0128 8460              ori R24,4
 012A 80936200          sts 98,R24
 012E                   .dbline 124
 012E           ;                       }
 012E           L26:
 012E                   .dbline 125
 012E 07E0              ldi R16,7
 0130 67DF              xcall _delay_10us
 0132                   .dbline 126
 0132 80916200          lds R24,98
 0136 8460              ori R24,4
 0138 80936200          sts 98,R24
 013C                   .dbline 127
 013C 6695              lsr R22
 013E                   .dbline 128
 013E           L23:
 013E                   .dbline 115
 013E 4A95              dec R20
 0140           L25:
 0140                   .dbline 115
 0140 4423              tst R20
 0142 01F7              brne L22
 0144                   .dbline 129
 0144 20900000          lds R2,_flag
 0148 27FE              sbrs R2,7
 014A 01C0              rjmp L28
 014C                   .dbline 129
 014C                   .dbline 130
 014C 7894              sei
 014E                   .dbline 131
 014E           L28:
 014E                   .dbline -2
 014E           L21:
 014E 0E940000          xcall pop_gset2
 0152                   .dbline 0 ; func end
 0152 0895              ret
 0154                   .dbsym r i 20 c
 0154                   .dbsym r value 22 c
 0154                   .dbend
 0154                   .dbfunc e ds1820_start _ds1820_start fV
                        .even
 0154           _ds1820_start::
 0154                   .dbline -1
 0154                   .dbline 135
 0154           ;               delay_10us(7);                  /*延时80uS*/
 0154           ;               DQ_SET;                                 /*位结束*/
 0154           ;               value >>= 1;
 0154           ;               }
 0154           ;       if (flag & 0x80) {                      /*恢复中断状态*/
 0154           ;               SEI();
 0154           ;               }
 0154           ; }
 0154           ; 
 0154           ; /*启动ds1820转换*/
 0154           ; void ds1820_start(void) {
 0154                   .dbline 137
 0154           ; 
 0154           ;       ds1820_reset();
 0154 62DF              xcall _ds1820_reset
 0156                   .dbline 138
 0156           ;       ds1820_write_byte(0xCC);        /*勿略地址*/
 0156 0CEC              ldi R16,204
 0158 CCDF              xcall _ds1820_write_byte
 015A                   .dbline 139
 015A           ;       ds1820_write_byte(0x44);        /*启动转换*/
 015A 04E4              ldi R16,68
 015C CADF              xcall _ds1820_write_byte
 015E                   .dbline -2
 015E           L30:
 015E                   .dbline 0 ; func end
 015E 0895              ret
 0160                   .dbend
 0160                   .dbfunc e ds1820_read_temp _ds1820_read_temp fi
 0160           ;            buf -> y+0
 0160           ;              i -> R20,R21
                        .even
 0160           _ds1820_read_temp::
 0160 0E940000          xcall push_gset1
 0164 2997              sbiw R28,9
 0166                   .dbline -1
 0166                   .dbline 143
 0166           ; }
 0166           ; 
 0166           ; /*DS8B20读取温度信息*/
 0166           ; unsigned int ds1820_read_temp(void) {
 0166                   .dbline 148
 0166           ; 
 0166           ;       unsigned int i;
 0166           ;       unsigned char buf[9];
 0166           ; 
 0166           ;       ds1820_reset();
 0166 59DF              xcall _ds1820_reset
 0168                   .dbline 149
 0168           ;       ds1820_write_byte(0xCC);        /*勿略地址*/
 0168 0CEC              ldi R16,204
 016A C3DF              xcall _ds1820_write_byte
 016C                   .dbline 150
 016C           ;       ds1820_write_byte(0xBE);        /*读取温度*/
 016C 0EEB              ldi R16,190
 016E C1DF              xcall _ds1820_write_byte
 0170                   .dbline 151
 0170 4427              clr R20
 0172 5527              clr R21
 0174 08C0              xjmp L35
 0176           L32:
 0176                   .dbline 151
 0176                   .dbline 152
 0176 80DF              xcall _ds1820_read_byte
 0178 CE01              movw R24,R28
 017A FA01              movw R30,R20
 017C E80F              add R30,R24
 017E F91F              adc R31,R25
 0180 0083              std z+0,R16
 0182                   .dbline 153
 0182           L33:
 0182                   .dbline 151
 0182 4F5F              subi R20,255  ; offset = 1
 0184 5F4F              sbci R21,255
 0186           L35:
 0186                   .dbline 151
 0186           ;       for (i = 0; i < 9; i++) {
 0186 4930              cpi R20,9
 0188 E0E0              ldi R30,0
 018A 5E07              cpc R21,R30
 018C A0F3              brlo L32
 018E                   .dbline 154
 018E           ;               buf[i] = ds1820_read_byte();
 018E           ;               }
 018E           ;       i = buf[1];
 018E 4981              ldd R20,y+1
 0190 5527              clr R21
 0192                   .dbline 155
 0192           ;       i <<= 8;
 0192 542F              mov R21,R20
 0194 4427              clr R20
 0196                   .dbline 156
 0196           ;       i |= buf[0];
 0196 2880              ldd R2,y+0
 0198 3324              clr R3
 019A 4229              or R20,R2
 019C 5329              or R21,R3
 019E                   .dbline 158
 019E           ;       
 019E           ;       return i;
 019E 8A01              movw R16,R20
 01A0                   .dbline -2
 01A0           L31:
 01A0 2996              adiw R28,9
 01A2 0E940000          xcall pop_gset1
 01A6                   .dbline 0 ; func end
 01A6 0895              ret
 01A8                   .dbsym l buf 0 A[9:9]c
 01A8                   .dbsym r i 20 i
 01A8                   .dbend
                        .area bss(ram, con, rel)
 0000                   .dbfile E:\ICCAVR\project\AVRMEG~3\icc\016-DS18B20-LED4\DS1820.C
 0000           _flag::
 0000                   .blkb 1
 0001                   .dbsym e flag _flag c

⌨️ 快捷键说明

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