📄 ds18b20.lis
字号:
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 + -