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

📄 ds1820.lis

📁 DS18B20的使用情况以及电路接法和原代码!可以参考做测温电路
💻 LIS
📖 第 1 页 / 共 2 页
字号:
 0090 CB9B              sbis 0x19,3
 0092 01C0              rjmp L17
 0094                   .dbline 89
 0094                   .dbline 90
 0094           ;                       value|=0x80;
 0094 4068              ori R20,128
 0096                   .dbline 91
 0096           ;                       }
 0096           L17:
 0096                   .dbline 92
 0096 05E0              ldi R16,5
 0098 B3DF              xcall _delay_10us
 009A                   .dbline 93
 009A           L14:
 009A                   .dbline 81
 009A 6A95              dec R22
 009C           L16:
 009C                   .dbline 81
 009C 6623              tst R22
 009E 29F7              brne L13
 00A0                   .dbline 94
 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 94
 00A8                   .dbline 95
 00A8           ;               SEI();
 00A8 7894              sei
 00AA                   .dbline 96
 00AA           ;               }
 00AA           L19:
 00AA                   .dbline 97
 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 101
 00B8           ; }
 00B8           ; 
 00B8           ; /*DS18B20字节写入函数*/
 00B8           ; void ds1820_write_byte(unsigned char value) {
 00B8                   .dbline 104
 00B8           ; 
 00B8           ;       unsigned char i;
 00B8           ;       flag = SREG;                            /*中断保护*/
 00B8 2FB6              in R2,0x3f
 00BA 20920000          sts _flag,R2
 00BE                   .dbline 105
 00BE           ;       CLI();                                          /*关中断*/
 00BE F894              cli
 00C0                   .dbline 106
 00C0 48E0              ldi R20,8
 00C2 0DC0              xjmp L25
 00C4           L22:
 00C4                   .dbline 106
 00C4           ;       for (i = 8; i != 0; i--) {
 00C4                   .dbline 107
 00C4           ;               DQ_OUT;
 00C4 D39A              sbi 0x1a,3
 00C6                   .dbline 108
 00C6           ;               DQ_CLR;
 00C6 DB98              cbi 0x1b,3
 00C8                   .dbline 109
 00C8           ;               delay4us;                                       /*延时4uS*/
 00C8                   .dbline 109
 00C8 0000              nop
 00CA                   .dbline 109
 00CA 0000              nop
 00CC                   .dbline 109
 00CC 0000              nop
 00CE                   .dbline 109
 00CE 0000              nop
 00D0                   .dbline 109
 00D0                   .dbline 109
 00D0                   .dbline 110
 00D0           ;               if (value & 0x01) {DQ_SET;}
 00D0 60FD              sbrc R22,0
 00D2                   .dbline 110
 00D2                   .dbline 110
 00D2 DB9A              sbi 0x1b,3
 00D4                   .dbline 110
 00D4           L26:
 00D4                   .dbline 112
 00D4 07E0              ldi R16,7
 00D6 94DF              xcall _delay_10us
 00D8                   .dbline 113
 00D8 DB9A              sbi 0x1b,3
 00DA                   .dbline 114
 00DA 6695              lsr R22
 00DC                   .dbline 115
 00DC           L23:
 00DC                   .dbline 106
 00DC 4A95              dec R20
 00DE           L25:
 00DE                   .dbline 106
 00DE 4423              tst R20
 00E0 89F7              brne L22
 00E2                   .dbline 116
 00E2 20900000          lds R2,_flag
 00E6 27FE              sbrs R2,7
 00E8 01C0              rjmp L28
 00EA                   .dbline 116
 00EA                   .dbline 117
 00EA 7894              sei
 00EC                   .dbline 118
 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 122
 00F2           ;               //每次都只写最低位,如果最低位是1的话输出高电平作为写1信号,否则无动作即为0                                               
 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 124
 00F2           ; 
 00F2           ;       ds1820_reset();
 00F2 93DF              xcall _ds1820_reset
 00F4                   .dbline 125
 00F4           ;       ds1820_write_byte(0xCC);        /*勿略地址*/
 00F4 0CEC              ldi R16,204
 00F6 DDDF              xcall _ds1820_write_byte
 00F8                   .dbline 126
 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 130
 0104           ; }
 0104           ; 
 0104           ; /*DS8B20读取温度信息*/
 0104           ; unsigned int ds1820_read_temp(void) {
 0104                   .dbline 135
 0104           ; 
 0104           ;       unsigned int i;
 0104           ;       unsigned char buf[9];
 0104           ; 
 0104           ;       ds1820_reset();
 0104 8ADF              xcall _ds1820_reset
 0106                   .dbline 136
 0106           ;       ds1820_write_byte(0xCC);        /*勿略地址*/
 0106 0CEC              ldi R16,204
 0108 D4DF              xcall _ds1820_write_byte
 010A                   .dbline 137
 010A           ;       ds1820_write_byte(0xBE);        /*读取温度*/
 010A 0EEB              ldi R16,190
 010C D2DF              xcall _ds1820_write_byte
 010E                   .dbline 138
 010E           ;       for (i = 0; i < 9; i++) 
 010E 4427              clr R20
 0110 5527              clr R21
 0112 08C0              xjmp L35
 0114           L32:
 0114                   .dbline 139
 0114                   .dbline 140
 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 141
 0120           L33:
 0120                   .dbline 138
 0120 4F5F              subi R20,255  ; offset = 1
 0122 5F4F              sbci R21,255
 0124           L35:
 0124                   .dbline 138
 0124 4930              cpi R20,9
 0126 E0E0              ldi R30,0
 0128 5E07              cpc R21,R30
 012A A0F3              brlo L32
 012C                   .dbline 142
 012C           ;           {
 012C           ;               buf[i] = ds1820_read_byte();
 012C           ;               }
 012C           ;       i = buf[1];
 012C 4981              ldd R20,y+1
 012E 5527              clr R21
 0130                   .dbline 143
 0130           ;       i <<= 8;
 0130 542F              mov R21,R20
 0132 4427              clr R20
 0134                   .dbline 144
 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 146
 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 D:\+++资料+++\学习\avr\程序\18b20new\DS1820.C
 0000           _flag::
 0000                   .blkb 1
 0001                   .dbsym e flag _flag c

⌨️ 快捷键说明

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