ds1820.lis

来自「avr单片机atmage16驱动小灯的一些例程 并且包括一些收发数据的程序利用」· LIS 代码 · 共 542 行 · 第 1/2 页

LIS
542
字号
 008C           ;               NOP();
 008C 0000              nop
 008E                   .dbline 120
 008E           ;               NOP();
 008E 0000              nop
 0090                   .dbline 121
 0090           ;               if (DQ_R) {
 0090 CF9B              sbis 0x19,7
 0092 01C0              rjmp L17
 0094                   .dbline 121
 0094                   .dbline 122
 0094           ;                       value|=0x80;
 0094 4068              ori R20,128
 0096                   .dbline 123
 0096           ;                       }
 0096           L17:
 0096                   .dbline 124
 0096 05E0              ldi R16,5
 0098 B3DF              xcall _delay_10us
 009A                   .dbline 125
 009A           L14:
 009A                   .dbline 101
 009A 6A95              dec R22
 009C           L16:
 009C                   .dbline 101
 009C 6623              tst R22
 009E 29F7              brne L13
 00A0                   .dbline 126
 00A0           ;               delay_10us(5);                  /*延时60uS*/
 00A0           ;               }
 00A0           ;       if (flag & 0x80) {                      /*恢复中断状态*/
 00A0 20900000          lds R2,_flag
 00A4 27FE              sbrs R2,7
 00A6 01C0              rjmp L19
 00A8                   .dbline 126
 00A8                   .dbline 127
 00A8           ;               SEI();
 00A8 7894              sei
 00AA                   .dbline 128
 00AA           ;               }
 00AA           L19:
 00AA                   .dbline 129
 00AA           ;       return(value);
 00AA 042F              mov R16,R20
 00AC                   .dbline -2
 00AC           L12:
 00AC 0E940000          xcall pop_gset2
 00B0                   .dbline 0 ; func end
 00B0 0895              ret
 00B2                   .dbsym r value 20 c
 00B2                   .dbsym r i 22 c
 00B2                   .dbend
 00B2                   .dbfunc e ds1820_write_byte _ds1820_write_byte fV
 00B2           ;              i -> R20
 00B2           ;          value -> R22
                        .even
 00B2           _ds1820_write_byte::
 00B2 0E940000          xcall push_gset2
 00B6 602F              mov R22,R16
 00B8                   .dbline -1
 00B8                   .dbline 138
 00B8           ; }
 00B8           ; 
 00B8           ; /*===================================================================
 00B8           ; //    函数功能:      向 1-WIRE 总线上写一个字节
 00B8           ; //    形参:          value           写到总线上的值
 00B8           ; //    返回:          void
 00B8           ; //    编写:          2004/8/25
 00B8           ; ===================================================================*/
 00B8           ; void ds1820_write_byte(unsigned char value) {
 00B8                   .dbline 141
 00B8           ; 
 00B8           ;       unsigned char i;
 00B8           ;       flag = SREG;                            /*中断保护*/
 00B8 2FB6              in R2,0x3f
 00BA 20920000          sts _flag,R2
 00BE                   .dbline 142
 00BE           ;       CLI();                                          /*关中断*/
 00BE F894              cli
 00C0                   .dbline 143
 00C0 48E0              ldi R20,8
 00C2 0DC0              xjmp L25
 00C4           L22:
 00C4                   .dbline 143
 00C4           ;       for (i = 8; i != 0; i--) {
 00C4                   .dbline 144
 00C4           ;               DQ_OUT;
 00C4 D79A              sbi 0x1a,7
 00C6                   .dbline 145
 00C6           ;               DQ_CLR;
 00C6 DF98              cbi 0x1b,7
 00C8                   .dbline 146
 00C8           ;               NOP();                                  /*延时4uS*/
 00C8 0000              nop
 00CA                   .dbline 147
 00CA           ;               NOP();
 00CA 0000              nop
 00CC                   .dbline 148
 00CC           ;               NOP();
 00CC 0000              nop
 00CE                   .dbline 149
 00CE           ;               NOP();
 00CE 0000              nop
 00D0                   .dbline 150
 00D0           ;               if (value & 0x01) {
 00D0 60FD              sbrc R22,0
 00D2                   .dbline 150
 00D2                   .dbline 151
 00D2           ;                       DQ_SET;
 00D2 DF9A              sbi 0x1b,7
 00D4                   .dbline 152
 00D4           ;                       }
 00D4           L26:
 00D4                   .dbline 153
 00D4 07E0              ldi R16,7
 00D6 94DF              xcall _delay_10us
 00D8                   .dbline 154
 00D8 DF9A              sbi 0x1b,7
 00DA                   .dbline 155
 00DA 6695              lsr R22
 00DC                   .dbline 156
 00DC           L23:
 00DC                   .dbline 143
 00DC 4A95              dec R20
 00DE           L25:
 00DE                   .dbline 143
 00DE 4423              tst R20
 00E0 89F7              brne L22
 00E2                   .dbline 157
 00E2 20900000          lds R2,_flag
 00E6 27FE              sbrs R2,7
 00E8 01C0              rjmp L28
 00EA                   .dbline 157
 00EA                   .dbline 158
 00EA 7894              sei
 00EC                   .dbline 159
 00EC           L28:
 00EC                   .dbline -2
 00EC           L21:
 00EC 0E940000          xcall pop_gset2
 00F0                   .dbline 0 ; func end
 00F0 0895              ret
 00F2                   .dbsym r i 20 c
 00F2                   .dbsym r value 22 c
 00F2                   .dbend
 00F2                   .dbfunc e ds1820_start _ds1820_start fV
                        .even
 00F2           _ds1820_start::
 00F2                   .dbline -1
 00F2                   .dbline 163
 00F2           ;               delay_10us(7);                  /*延时80uS*/
 00F2           ;               DQ_SET;                                 /*位结束*/
 00F2           ;               value >>= 1;
 00F2           ;               }
 00F2           ;       if (flag & 0x80) {                      /*恢复中断状态*/
 00F2           ;               SEI();
 00F2           ;               }
 00F2           ; }
 00F2           ; 
 00F2           ; /*启动ds1820转换*/
 00F2           ; void ds1820_start(void) {
 00F2                   .dbline 165
 00F2           ; 
 00F2           ;       ds1820_reset();
 00F2 93DF              xcall _ds1820_reset
 00F4                   .dbline 166
 00F4           ;       ds1820_write_byte(0xCC);        /*勿略地址*/
 00F4 0CEC              ldi R16,204
 00F6 DDDF              xcall _ds1820_write_byte
 00F8                   .dbline 167
 00F8           ;       ds1820_write_byte(0x44);        /*启动转换*/
 00F8 04E4              ldi R16,68
 00FA DBDF              xcall _ds1820_write_byte
 00FC                   .dbline -2
 00FC           L30:
 00FC                   .dbline 0 ; func end
 00FC 0895              ret
 00FE                   .dbend
 00FE                   .dbfunc e ds1820_read_temp _ds1820_read_temp fi
 00FE           ;            buf -> y+0
 00FE           ;              i -> R20,R21
                        .even
 00FE           _ds1820_read_temp::
 00FE 0E940000          xcall push_gset1
 0102 2997              sbiw R28,9
 0104                   .dbline -1
 0104                   .dbline 176
 0104           ; }
 0104           ; 
 0104           ; /*===================================================================
 0104           ; //    函数功能:      读取温度
 0104           ; //    形参:          *temperature    温度存储空间
 0104           ; //    返回:          unsigned char   true为有效
 0104           ; //    编写:          2004/8/25
 0104           ; ===================================================================*/
 0104           ; unsigned int ds1820_read_temp(void) {
 0104                   .dbline 181
 0104           ; 
 0104           ;       unsigned int i;
 0104           ;       unsigned char buf[9];
 0104           ; 
 0104           ;       ds1820_reset();
 0104 8ADF              xcall _ds1820_reset
 0106                   .dbline 182
 0106           ;       ds1820_write_byte(0xCC);        /*勿略地址*/
 0106 0CEC              ldi R16,204
 0108 D4DF              xcall _ds1820_write_byte
 010A                   .dbline 183
 010A           ;       ds1820_write_byte(0xBE);        /*读取温度*/
 010A 0EEB              ldi R16,190
 010C D2DF              xcall _ds1820_write_byte
 010E                   .dbline 184
 010E 4427              clr R20
 0110 5527              clr R21
 0112 08C0              xjmp L35
 0114           L32:
 0114                   .dbline 184
 0114                   .dbline 185
 0114 A1DF              xcall _ds1820_read_byte
 0116 CE01              movw R24,R28
 0118 FA01              movw R30,R20
 011A E80F              add R30,R24
 011C F91F              adc R31,R25
 011E 0083              std z+0,R16
 0120                   .dbline 186
 0120           L33:
 0120                   .dbline 184
 0120 4F5F              subi R20,255  ; offset = 1
 0122 5F4F              sbci R21,255
 0124           L35:
 0124                   .dbline 184
 0124           ;       for (i = 0; i < 9; i++) {
 0124 4930              cpi R20,9
 0126 E0E0              ldi R30,0
 0128 5E07              cpc R21,R30
 012A A0F3              brlo L32
 012C                   .dbline 187
 012C           ;               buf[i] = ds1820_read_byte();
 012C           ;               }
 012C           ;       i = buf[1];
 012C 4981              ldd R20,y+1
 012E 5527              clr R21
 0130                   .dbline 188
 0130           ;       i <<= 8;
 0130 542F              mov R21,R20
 0132 4427              clr R20
 0134                   .dbline 189
 0134           ;       i |= buf[0];
 0134 2880              ldd R2,y+0
 0136 3324              clr R3
 0138 4229              or R20,R2
 013A 5329              or R21,R3
 013C                   .dbline 191
 013C           ;       
 013C           ;       return i;
 013C 8A01              movw R16,R20
 013E                   .dbline -2
 013E           L31:
 013E 2996              adiw R28,9
 0140 0E940000          xcall pop_gset1
 0144                   .dbline 0 ; func end
 0144 0895              ret
 0146                   .dbsym l buf 0 A[9:9]c
 0146                   .dbsym r i 20 i
 0146                   .dbend
                        .area bss(ram, con, rel)
 0000                   .dbfile E:\ICCAVR\project\AVRMEG~2\icc\030-DS18B20-LED4\DS1820.C
 0000           _flag::
 0000                   .blkb 1
 0001                   .dbsym e flag _flag c

⌨️ 快捷键说明

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