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

📄 ds18b20.lis

📁 AVR-based single-chip temperature display system, so absolutely! DS18B20 sensors used
💻 LIS
📖 第 1 页 / 共 3 页
字号:
 019A E0910000          lds R30,_posit
 019E FF27              clr R31
 01A0 E80F              add R30,R24
 01A2 F91F              adc R31,R25
 01A4 E081              ldd R30,z+0
 01A6 FF27              clr R31
 01A8 80E0              ldi R24,<_led_7
 01AA 90E0              ldi R25,>_led_7
 01AC E80F              add R30,R24
 01AE F91F              adc R31,R25
 01B0 2080              ldd R2,z+0
 01B2 25BA              out 0x15,R2
 01B4                   .dbline 153
 01B4 80E0              ldi R24,<_position
 01B6 90E0              ldi R25,>_position
 01B8 E0910000          lds R30,_posit
 01BC FF27              clr R31
 01BE E80F              add R30,R24
 01C0 F91F              adc R31,R25
 01C2 2080              ldd R2,z+0
 01C4 22BA              out 0x12,R2
 01C6                   .dbline 154
 01C6 80910000          lds R24,_posit
 01CA 8F5F              subi R24,255    ; addi 1
 01CC 282E              mov R2,R24
 01CE 20920000          sts _posit,R2
 01D2 8430              cpi R24,4
 01D4 18F0              brlo L52
 01D6                   .dbline 154
 01D6 2224              clr R2
 01D8 20920000          sts _posit,R2
 01DC           L52:
 01DC                   .dbline -2
 01DC           L51:
 01DC                   .dbline 0 ; func end
 01DC 0895              ret
 01DE                   .dbend
                        .area vector(rom, abs)
                        .org 76
 004C 0C94EF00          jmp _TIMER0_COMP
                        .area text(rom, con, rel)
 01DE                   .dbfile G:\ds18b20\ds18b20.c
 01DE                   .dbfunc e TIMER0_COMP _TIMER0_COMP fV
                        .even
 01DE           _TIMER0_COMP::
 01DE 0E940000          xcall push_lset
 01E2                   .dbline -1
 01E2                   .dbline 160
 01E2           ; 
 01E2           ; }
 01E2           ; void display(void)//数码管显示程序
 01E2           ; {     PORTD = 0xff;
 01E2           ;   PORTC = led_7[dis_buff[posit]];
 01E2           ;   PORTD= position[posit];
 01E2           ;   if (++posit >=4 ) posit = 0;
 01E2           ; } 
 01E2           ; 
 01E2           ; // Timer 0 比较匹配中断服务
 01E2           ; #pragma interrupt_handler TIMER0_COMP:20 
 01E2           ; void TIMER0_COMP(void)
 01E2           ; { 
 01E2                   .dbline 161
 01E2           ;   display(); 
 01E2 D7DF              xcall _display
 01E4                   .dbline -2
 01E4           L54:
 01E4 0E940000          xcall pop_lset
 01E8                   .dbline 0 ; func end
 01E8 1895              reti
 01EA                   .dbend
 01EA                   .dbfunc e main _main fV
 01EA           ;              j -> <dead>
 01EA           ;              i -> R20,R21
                        .even
 01EA           _main::
 01EA 2497              sbiw R28,4
 01EC                   .dbline -1
 01EC                   .dbline 166
 01EC           ;  
 01EC           ; }
 01EC           ;   
 01EC           ; void main(void)
 01EC           ; {
 01EC                   .dbline 168
 01EC           ;   int i,j;
 01EC           ;   PORTD=0xFF;           // 显示控制I/O端口初始化
 01EC 8FEF              ldi R24,255
 01EE 82BB              out 0x12,R24
 01F0                   .dbline 169
 01F0           ;   DDRD=0xFF;
 01F0 81BB              out 0x11,R24
 01F2                   .dbline 170
 01F2           ;   PORTC=0XfF;
 01F2 85BB              out 0x15,R24
 01F4                   .dbline 171
 01F4           ;   DDRC=0xFF;
 01F4 84BB              out 0x14,R24
 01F6                   .dbline 176
 01F6           ;   
 01F6           ; 
 01F6           ;   // T/C0 初始化
 01F6           ;   
 01F6           ;   TCCR0=0x0B;           // 内部时钟,64分频(4M/64=62.5KHz),CTC模式
 01F6 8BE0              ldi R24,11
 01F8 83BF              out 0x33,R24
 01FA                   .dbline 177
 01FA           ;   TCNT0=0x00;
 01FA 2224              clr R2
 01FC 22BE              out 0x32,R2
 01FE                   .dbline 178
 01FE           ;   OCR0=0x7C;           // OCR0 = 0x7C(124),(124+1)/62.5=2ms
 01FE 8CE7              ldi R24,124
 0200 8CBF              out 0x3c,R24
 0202                   .dbline 179
 0202           ;   TIMSK=0x02;           // 允许T/C0比较匹配中断
 0202 82E0              ldi R24,2
 0204 89BF              out 0x39,R24
 0206                   .dbline 180
 0206           ;   SEI(); //允许全局中断
 0206 7894              sei
 0208 8CC0              xjmp L57
 020A           L56:
 020A                   .dbline 182
 020A           ;   
 020A           ;       while (1) {
 020A                   .dbline 183
 020A           ;               ds1820_start();                                 /*启动一次转换*/
 020A 8CDF              xcall _ds1820_start
 020C                   .dbline 184
 020C           ;               delay_nms(10);                                  /*等待转换结束*/
 020C 0AE0              ldi R16,10
 020E 10E0              ldi R17,0
 0210 12DF              xcall _delay_nms
 0212                   .dbline 185
 0212           ;               i=ds1820_read_temp();                           /*读取温度数值*/
 0212 8EDF              xcall _ds1820_read_temp
 0214 A801              movw R20,R16
 0216                   .dbline 186
 0216           ;               if(i>=0xf000)//判断是不是负数
 0216 0030              cpi R16,0
 0218 E0EF              ldi R30,240
 021A 1E07              cpc R17,R30
 021C 08F4              brsh X1
 021E 42C0              xjmp L59
 0220           X1:
 0220                   .dbline 187
 0220           ;               {
 0220                   .dbline 188
 0220           ;               i=~i;           //转换,先取反,在加1.
 0220 4095              com R20
 0222 5095              com R21
 0224                   .dbline 189
 0224           ;               i+=1;
 0224 4F5F              subi R20,255  ; offset = 1
 0226 5F4F              sbci R21,255
 0228                   .dbline 190
 0228           ;               i = (i * 10) / 16;                              /*数值处理*/
 0228 0AE0              ldi R16,10
 022A 10E0              ldi R17,0
 022C 9A01              movw R18,R20
 022E 0E940000          xcall empy16s
 0232 20E1              ldi R18,16
 0234 30E0              ldi R19,0
 0236 0E940000          xcall div16s
 023A A801              movw R20,R16
 023C                   .dbline 191
 023C           ;               led_buf[3] = i / 1000;                  /*将显示信息加载到显示缓存区*/
 023C 28EE              ldi R18,1000
 023E 33E0              ldi R19,3
 0240 0E940000          xcall div16s
 0244 00931300          sts _led_buf+3,R16
 0248                   .dbline 192
 0248           ;               i = i % 1000;
 0248 28EE              ldi R18,1000
 024A 33E0              ldi R19,3
 024C 8A01              movw R16,R20
 024E 0E940000          xcall mod16s
 0252 A801              movw R20,R16
 0254                   .dbline 193
 0254           ;               led_buf[2] = i / 100;
 0254 24E6              ldi R18,100
 0256 30E0              ldi R19,0
 0258 0E940000          xcall div16s
 025C 00931200          sts _led_buf+2,R16
 0260                   .dbline 194
 0260           ;               i = i % 100;
 0260 24E6              ldi R18,100
 0262 30E0              ldi R19,0
 0264 8A01              movw R16,R20
 0266 0E940000          xcall mod16s
 026A A801              movw R20,R16
 026C                   .dbline 195
 026C           ;               led_buf[1] = i / 10;
 026C 2AE0              ldi R18,10
 026E 30E0              ldi R19,0
 0270 0E940000          xcall div16s
 0274 00931100          sts _led_buf+1,R16
 0278                   .dbline 196
 0278           ;               led_buf[0] = i % 10;
 0278 2AE0              ldi R18,10
 027A 30E0              ldi R19,0
 027C 8A01              movw R16,R20
 027E 0E940000          xcall mod16s
 0282 00931000          sts _led_buf,R16
 0286                   .dbline 197
 0286           ;               time_to_disbuffer(led_buf[1],led_buf[2],10,11);
 0286 8BE0              ldi R24,11
 0288 90E0              ldi R25,0
 028A 9B83              std y+3,R25
 028C 8A83              std y+2,R24
 028E 8AE0              ldi R24,10
 0290 9983              std y+1,R25
 0292 8883              std y+0,R24
 0294 20911200          lds R18,_led_buf+2
 0298 3327              clr R19
 029A 00911100          lds R16,_led_buf+1
 029E 1127              clr R17
 02A0 6BDF              xcall _time_to_disbuffer
 02A2                   .dbline 198
 02A2           ;               }
 02A2 3FC0              xjmp L60
 02A4           L59:
 02A4                   .dbline 200
 02A4           ;               else
 02A4           ;               {       
 02A4                   .dbline 201
 02A4           ;               i = (i * 10) / 16;                              /*数值处理*/
 02A4 0AE0              ldi R16,10
 02A6 10E0              ldi R17,0
 02A8 9A01              movw R18,R20
 02AA 0E940000          xcall empy16s
 02AE 20E1              ldi R18,16
 02B0 30E0              ldi R19,0
 02B2 0E940000          xcall div16s
 02B6 A801              movw R20,R16
 02B8                   .dbline 202
 02B8           ;               led_buf[3] = i / 1000;                  /*将显示信息加载到显示缓存区*/
 02B8 28EE              ldi R18,1000
 02BA 33E0              ldi R19,3
 02BC 0E940000          xcall div16s
 02C0 00931300          sts _led_buf+3,R16
 02C4                   .dbline 203
 02C4           ;               i = i % 1000;
 02C4 28EE              ldi R18,1000
 02C6 33E0              ldi R19,3
 02C8 8A01              movw R16,R20
 02CA 0E940000          xcall mod16s
 02CE A801              movw R20,R16
 02D0                   .dbline 204
 02D0           ;               led_buf[2] = i / 100;
 02D0 24E6              ldi R18,100
 02D2 30E0              ldi R19,0
 02D4 0E940000          xcall div16s
 02D8 00931200          sts _led_buf+2,R16
 02DC                   .dbline 205
 02DC           ;               i = i % 100;
 02DC 24E6              ldi R18,100
 02DE 30E0              ldi R19,0
 02E0 8A01              movw R16,R20
 02E2 0E940000          xcall mod16s
 02E6 A801              movw R20,R16
 02E8                   .dbline 206
 02E8           ;               led_buf[1] = i / 10;
 02E8 2AE0              ldi R18,10
 02EA 30E0              ldi R19,0
 02EC 0E940000          xcall div16s
 02F0 00931100          sts _led_buf+1,R16
 02F4                   .dbline 207
 02F4           ;               led_buf[0] = i % 10;    
 02F4 2AE0              ldi R18,10
 02F6 30E0              ldi R19,0
 02F8 8A01              movw R16,R20
 02FA 0E940000          xcall mod16s
 02FE 00931000          sts _led_buf,R16
 0302                   .dbline 208
 0302           ;               time_to_disbuffer(led_buf[1],led_buf[2],led_buf[3],led_buf[0]);
 0302 202E              mov R2,R16
 0304 3324              clr R3
 0306 3B82              std y+3,R3
 0308 2A82              std y+2,R2
 030A 20901300          lds R2,_led_buf+3
 030E 3324              clr R3
 0310 3982              std y+1,R3
 0312 2882              std y+0,R2
 0314 20911200          lds R18,_led_buf+2
 0318 3327              clr R19
 031A 00911100          lds R16,_led_buf+1
 031E 1127              clr R17
 0320 2BDF              xcall _time_to_disbuffer
 0322                   .dbline 209
 0322           ;               }
 0322           L60:
 0322                   .dbline 210
 0322           L57:
 0322                   .dbline 182
 0322 73CF              xjmp L56
 0324           X0:
 0324                   .dbline -2
 0324           L55:
 0324 2496              adiw R28,4
 0326                   .dbline 0 ; func end
 0326 0895              ret
 0328                   .dbsym l j 5 I
 0328                   .dbsym r i 20 I
 0328                   .dbend
                        .area bss(ram, con, rel)
 0000                   .dbfile G:\ds18b20\ds18b20.c
 0000           _posit::
 0000                   .blkb 1
 0001                   .dbsym e posit _posit c
 0001           _dis_buff::
 0001                   .blkb 4
 0005                   .dbsym e dis_buff _dis_buff A[4:4]c
 0005           _flag::
 0005                   .blkb 1
 0006                   .dbsym e flag _flag c

⌨️ 快捷键说明

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