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

📄 zz.lis

📁 avr基础程序大全
💻 LIS
📖 第 1 页 / 共 5 页
字号:
 01EC           ;       delay_10us(7);                          /*延时80uS*/
 01EC 07E0              ldi R16,7
 01EE E6DF              xcall _delay_10us
 01F0                   .dbline 35
 01F0           ;       i = DQ_R;
 01F0 43B3              in R20,0x13
 01F2 4870              andi R20,8
 01F4                   .dbline 36
 01F4           ;       delay_10us(49);                         /*延时500uS(保持>480uS)*/
 01F4 01E3              ldi R16,49
 01F6 E2DF              xcall _delay_10us
 01F8                   .dbline 37
 01F8           ;       if (flag & 0x80) {                      /*恢复中断状态*/
 01F8 20901800          lds R2,_flag
 01FC 27FE              sbrs R2,7
 01FE 01C0              rjmp L50
 0200           X14:
 0200                   .dbline 37
 0200                   .dbline 38
 0200           ;               SEI();
 0200 7894              sei
 0202                   .dbline 39
 0202           ;               }
 0202           L50:
 0202                   .dbline 40
 0202           ;       if (i) {
 0202 4423              tst R20
 0204 11F0              breq L52
 0206           X15:
 0206                   .dbline 40
 0206                   .dbline 41
 0206           ;               return 0x00;
 0206 0027              clr R16
 0208 01C0              xjmp L49
 020A           L52:
 020A                   .dbline 43
 020A           ;               }
 020A           ;       else {
 020A                   .dbline 44
 020A           ;               return 0x01;
 020A 01E0              ldi R16,1
 020C                   .dbline -2
 020C           L49:
 020C                   .dbline 0 ; func end
 020C 4991              ld R20,y+
 020E 0895              ret
 0210                   .dbsym r i 20 c
 0210                   .dbend
 0210                   .dbfunc e ds1820_read_byte _ds1820_read_byte fc
 0210           ;          value -> R20
 0210           ;              i -> R22
                        .even
 0210           _ds1820_read_byte::
 0210 4A93              st -y,R20
 0212 6A93              st -y,R22
 0214                   .dbline -1
 0214                   .dbline 49
 0214           ;               }
 0214           ; }
 0214           ; 
 0214           ; /*DS18B20字节读取函数*/
 0214           ; unsigned char ds1820_read_byte(void) {
 0214                   .dbline 52
 0214           ; 
 0214           ;       unsigned char i;
 0214           ;       unsigned char value = 0;
 0214 4427              clr R20
 0216                   .dbline 53
 0216           ;       flag = SREG;                            /*中断保护*/
 0216 2FB6              in R2,0x3f
 0218 20921800          sts _flag,R2
 021C                   .dbline 54
 021C           ;       CLI();                                          /*关中断*/
 021C F894              cli
 021E                   .dbline 55
 021E           ;       for (i = 8; i != 0; i--) {
 021E 68E0              ldi R22,8
 0220 19C0              xjmp L58
 0222           L55:
 0222                   .dbline 55
 0222                   .dbline 56
 0222           ;               value >>= 1;
 0222 4695              lsr R20
 0224                   .dbline 57
 0224           ;               DQ_OUT;
 0224 A39A              sbi 0x14,3
 0226                   .dbline 58
 0226           ;               DQ_CLR;
 0226 AB98              cbi 0x15,3
 0228                   .dbline 59
 0228           ;               delay4us;                                       /*延时4uS*/
 0228                   .dbline 59
 0228 0000              nop
 022A                   .dbline 59
 022A 0000              nop
 022C                   .dbline 59
 022C 0000              nop
 022E                   .dbline 59
 022E 0000              nop
 0230                   .dbline 59
 0230                   .dbline 59
 0230                   .dbline 60
 0230           ;               DQ_SET;
 0230 AB9A              sbi 0x15,3
 0232                   .dbline 61
 0232           ;               DQ_IN;
 0232 A398              cbi 0x14,3
 0234                   .dbline 62
 0234           ;               delay10us;                                      /*延时10uS*/
 0234                   .dbline 62
 0234 0000              nop
 0236                   .dbline 62
 0236 0000              nop
 0238                   .dbline 62
 0238 0000              nop
 023A                   .dbline 62
 023A 0000              nop
 023C                   .dbline 62
 023C 0000              nop
 023E                   .dbline 62
 023E 0000              nop
 0240                   .dbline 62
 0240 0000              nop
 0242                   .dbline 62
 0242 0000              nop
 0244                   .dbline 62
 0244 0000              nop
 0246                   .dbline 62
 0246 0000              nop
 0248                   .dbline 62
 0248                   .dbline 62
 0248                   .dbline 63
 0248           ;               if (DQ_R) {
 0248 9B9B              sbis 0x13,3
 024A 01C0              rjmp L59
 024C           X16:
 024C                   .dbline 63
 024C                   .dbline 64
 024C           ;                       value|=0x80;
 024C 4068              ori R20,128
 024E                   .dbline 65
 024E           ;                       }
 024E           L59:
 024E                   .dbline 66
 024E           ;               delay_10us(5);                  /*延时60uS*/
 024E 05E0              ldi R16,5
 0250 B5DF              xcall _delay_10us
 0252                   .dbline 67
 0252           ;               }
 0252           L56:
 0252                   .dbline 55
 0252 6A95              dec R22
 0254           L58:
 0254                   .dbline 55
 0254 6623              tst R22
 0256 29F7              brne L55
 0258           X17:
 0258                   .dbline 68
 0258           ;       if (flag & 0x80) {                      /*恢复中断状态*/
 0258 20901800          lds R2,_flag
 025C 27FE              sbrs R2,7
 025E 01C0              rjmp L61
 0260           X18:
 0260                   .dbline 68
 0260                   .dbline 69
 0260           ;               SEI();
 0260 7894              sei
 0262                   .dbline 70
 0262           ;               }
 0262           L61:
 0262                   .dbline 71
 0262           ;       return(value);
 0262 042F              mov R16,R20
 0264                   .dbline -2
 0264           L54:
 0264                   .dbline 0 ; func end
 0264 6991              ld R22,y+
 0266 4991              ld R20,y+
 0268 0895              ret
 026A                   .dbsym r value 20 c
 026A                   .dbsym r i 22 c
 026A                   .dbend
 026A                   .dbfunc e ds1820_write_byte _ds1820_write_byte fV
 026A           ;              i -> R20
 026A           ;          value -> R10
                        .even
 026A           _ds1820_write_byte::
 026A AA92              st -y,R10
 026C 4A93              st -y,R20
 026E A02E              mov R10,R16
 0270                   .dbline -1
 0270                   .dbline 75
 0270           ; }
 0270           ; 
 0270           ; /*DS18B20字节写入函数*/
 0270           ; void ds1820_write_byte(unsigned char value) {
 0270                   .dbline 78
 0270           ; 
 0270           ;       unsigned char i;
 0270           ;       flag = SREG;                            /*中断保护*/
 0270 2FB6              in R2,0x3f
 0272 20921800          sts _flag,R2
 0276                   .dbline 79
 0276           ;       CLI();                                          /*关中断*/
 0276 F894              cli
 0278                   .dbline 80
 0278           ;       for (i = 8; i != 0; i--) {
 0278 48E0              ldi R20,8
 027A 0EC0              xjmp L67
 027C           L64:
 027C                   .dbline 80
 027C                   .dbline 81
 027C           ;               DQ_OUT;
 027C A39A              sbi 0x14,3
 027E                   .dbline 82
 027E           ;               DQ_CLR;
 027E AB98              cbi 0x15,3
 0280                   .dbline 83
 0280           ;               delay4us;                                       /*延时4uS*/
 0280                   .dbline 83
 0280 0000              nop
 0282                   .dbline 83
 0282 0000              nop
 0284                   .dbline 83
 0284 0000              nop
 0286                   .dbline 83
 0286 0000              nop
 0288                   .dbline 83
 0288                   .dbline 83
 0288                   .dbline 84
 0288           ;               if (value & 0x01) {DQ_SET;}
 0288 A0FE              sbrs R10,0
 028A 01C0              rjmp L68
 028C           X19:
 028C                   .dbline 84
 028C                   .dbline 84
 028C AB9A              sbi 0x15,3
 028E                   .dbline 84
 028E           L68:
 028E                   .dbline 86
 028E           ;               //每次都只写最低位,如果最低位是1的话输出高电平作为写1信号,否则无动作即为0                                               
 028E           ;               delay_10us(7);                  /*延时80uS*/
 028E 07E0              ldi R16,7
 0290 95DF              xcall _delay_10us
 0292                   .dbline 87
 0292           ;               DQ_SET;                                 /*位结束*/
 0292 AB9A              sbi 0x15,3
 0294                   .dbline 88
 0294           ;               value >>= 1;
 0294 A694              lsr R10
 0296                   .dbline 89
 0296           ;               }
 0296           L65:
 0296                   .dbline 80
 0296 4A95              dec R20
 0298           L67:
 0298                   .dbline 80
 0298 4423              tst R20
 029A 81F7              brne L64
 029C           X20:
 029C                   .dbline 90
 029C           ;       if (flag & 0x80) {                      /*恢复中断状态*/
 029C 20901800          lds R2,_flag
 02A0 27FE              sbrs R2,7
 02A2 01C0              rjmp L70
 02A4           X21:
 02A4                   .dbline 90
 02A4                   .dbline 91
 02A4           ;               SEI();
 02A4 7894              sei
 02A6                   .dbline 92
 02A6           ;               }
 02A6           L70:
 02A6                   .dbline -2
 02A6           L63:
 02A6                   .dbline 0 ; func end
 02A6 4991              ld R20,y+
 02A8 A990              ld R10,y+
 02AA 0895              ret
 02AC                   .dbsym r i 20 c
 02AC                   .dbsym r value 10 c
 02AC                   .dbend
 02AC                   .dbfunc e ds1820_read_temp _ds1820_read_temp fI
 02AC           ;             tt -> y+0
 02AC           ;              c -> R20,R21
 02AC           ;              b -> R22,R23
 02AC           ;              a -> R10,R11
 02AC           ;              t -> R12,R13
                        .even
 02AC           _ds1820_read_temp::
 02AC 0E940000          xcall push_xgsetF03C
 02B0 2497              sbiw R28,4
 02B2                   .dbline -1
 02B2                   .dbline 97
 02B2           ; }
 02B2           ; 
 02B2           ; /*DS8B20读取温度信息*/
 02B2           ; ds1820_read_temp(void) 
 02B2           ; {
 02B2                   .dbline 99
 02B2           ; 
 02B2           ;       unsigned int a = 0, b = 0, c = 0, t = 0;
 02B2                   .dbline 99
 02B2                   .dbline 99
 02B2                   .dbline 99
 02B2                   .dbline 100
 02B2           ;     float tt = 0; 
 02B2 00E0              ldi R16,<L73
 02B4 10E0              ldi R17,>L73
 02B6 0E940000          xcall lpm32
 02BA 0883              std y+0,R16
 02BC 1983              std y+1,R17
 02BE 2A83              std y+2,R18
 02C0 3B83              std y+3,R19
 02C2                   .dbline 102
 02C2           ; 
 02C2           ;       ds1820_reset();
 02C2 89DF              xcall _ds1820_reset
 02C4                   .dbline 103
 02C4           ;         ds1820_write_byte(0xCC);      /*勿略地址*/
 02C4 0CEC              ldi R16,204
 02C6 D1DF              xcall _ds1820_write_byte
 02C8                   .dbline 104
 02C8           ;         ds1820_write_byte(0x44);      /*启动转换*/
 02C8 04E4              ldi R16,68
 02CA CFDF              xcall _ds1820_write_byte
 02CC                   .dbline 105
 02CC           ;         ds1820_reset();
 02CC 84DF              xcall _ds1820_reset
 02CE                   .dbline 106
 02CE           ;         ds1820_write_byte(0xCC);      /*勿略地址*/
 02CE 0CEC              ldi R16,204
 02D0 CCDF              xcall _ds1820_write_byte
 02D2                   .dbline 107
 02D2           ;         ds1820_write_byte(0xBE);      /*读取温度*/
 02D2 0EEB              ldi R16,190
 02D4 CADF              xcall _ds1820_write_byte
 02D6                   .dbline 108
 02D6           ;          a = ds1820_read_byte(); //读取温度寄存器

⌨️ 快捷键说明

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