📄 ac10-2.lis
字号:
0172 ; /****************************************************/
0172 ; void adc_init(void)
0172 ; {
0172 .dbline 64
0172 ; ADMUX = 0x07;
0172 87E0 ldi R24,7
0174 87B9 out 0x7,R24
0176 .dbline 65
0176 ; ACSR = 0x80;
0176 80E8 ldi R24,128
0178 88B9 out 0x8,R24
017A .dbline 66
017A ; ADCSR = 0xE9;
017A 89EE ldi R24,233
017C 86B9 out 0x6,R24
017E .dbline -2
017E L18:
017E .dbline 0 ; func end
017E 0895 ret
0180 .dbend
.area vector(rom, abs)
.org 56
0038 0C94C000 jmp _adc_isr
.area text(rom, con, rel)
0180 .dbfile d:\MYDOCU~1\ac10-2\ac10-2.c
0180 .dbfunc e adc_isr _adc_isr fV
.even
0180 _adc_isr::
0180 2A92 st -y,R2
0182 3A92 st -y,R3
0184 4A92 st -y,R4
0186 5A92 st -y,R5
0188 8A93 st -y,R24
018A 2FB6 in R2,0x3f
018C 2A92 st -y,R2
018E .dbline -1
018E .dbline 71
018E ; }
018E ; /****************************************************/
018E ; #pragma interrupt_handler adc_isr:15
018E ; void adc_isr(void)
018E ; {
018E .dbline 73
018E ; //conversion complete, read value (int) using...
018E ; value=ADCL;
018E 24B0 in R2,0x4
0190 3324 clr R3
0192 30920500 sts _value+1,R3
0196 20920400 sts _value,R2
019A .dbline 74
019A ; value|=(int)ADCH << 8;
019A 25B0 in R2,0x5
019C 3324 clr R3
019E 322C mov R3,R2
01A0 2224 clr R2
01A2 40900400 lds R4,_value
01A6 50900500 lds R5,_value+1
01AA 4228 or R4,R2
01AC 5328 or R5,R3
01AE 50920500 sts _value+1,R5
01B2 40920400 sts _value,R4
01B6 .dbline 75
01B6 ; flag=1;
01B6 81E0 ldi R24,1
01B8 80930000 sts _flag,R24
01BC .dbline -2
01BC L19:
01BC 2990 ld R2,y+
01BE 2FBE out 0x3f,R2
01C0 8991 ld R24,y+
01C2 5990 ld R5,y+
01C4 4990 ld R4,y+
01C6 3990 ld R3,y+
01C8 2990 ld R2,y+
01CA .dbline 0 ; func end
01CA 1895 reti
01CC .dbend
01CC .dbfunc e init_devices _init_devices fV
.even
01CC _init_devices::
01CC .dbline -1
01CC .dbline 79
01CC ; }
01CC ; /***************************************/
01CC ; void init_devices(void)
01CC ; {
01CC .dbline 80
01CC ; port_init();
01CC 19DF xcall _port_init
01CE .dbline 81
01CE ; timer0_init();
01CE 23DF xcall _timer0_init
01D0 .dbline 82
01D0 ; timer1_init();
01D0 BEDF xcall _timer1_init
01D2 .dbline 83
01D2 ; adc_init();
01D2 CFDF xcall _adc_init
01D4 .dbline 84
01D4 ; TIMSK = 0x05;
01D4 85E0 ldi R24,5
01D6 89BF out 0x39,R24
01D8 .dbline 85
01D8 ; SREG=0x80;
01D8 80E8 ldi R24,128
01DA 8FBF out 0x3f,R24
01DC .dbline -2
01DC L20:
01DC .dbline 0 ; func end
01DC 0895 ret
01DE .dbend
01DE .dbfunc e delay _delay fV
01DE ; i -> R20,R21
01DE ; j -> R22,R23
01DE ; k -> R16,R17
.even
01DE _delay::
01DE 0E940000 xcall push_gset2
01E2 .dbline -1
01E2 .dbline 89
01E2 ; }
01E2 ; /***************************************/
01E2 ; void delay(uint k)
01E2 ; {
01E2 .dbline 91
01E2 ; uint i,j;
01E2 ; for(i=0;i<k;i++)
01E2 4427 clr R20
01E4 5527 clr R21
01E6 0BC0 xjmp L25
01E8 L22:
01E8 .dbline 92
01E8 ; {
01E8 .dbline 93
01E8 6627 clr R22
01EA 7727 clr R23
01EC 02C0 xjmp L29
01EE L26:
01EE .dbline 93
01EE L27:
01EE .dbline 93
01EE 6F5F subi R22,255 ; offset = 1
01F0 7F4F sbci R23,255
01F2 L29:
01F2 .dbline 93
01F2 6C38 cpi R22,140
01F4 E0E0 ldi R30,0
01F6 7E07 cpc R23,R30
01F8 D0F3 brlo L26
01FA .dbline 94
01FA L23:
01FA .dbline 91
01FA 4F5F subi R20,255 ; offset = 1
01FC 5F4F sbci R21,255
01FE L25:
01FE .dbline 91
01FE 4017 cp R20,R16
0200 5107 cpc R21,R17
0202 90F3 brlo L22
0204 .dbline -2
0204 L21:
0204 0E940000 xcall pop_gset2
0208 .dbline 0 ; func end
0208 0895 ret
020A .dbsym r i 20 i
020A .dbsym r j 22 i
020A .dbsym r k 16 i
020A .dbend
020A .dbfunc e conv _conv fi
020A ; y -> R10,R11
020A ; x -> y+0
020A ; i -> R10,R11
.even
020A _conv::
020A 0E940000 xcall push_gset3
020E 5801 movw R10,R16
0210 2497 sbiw R28,4
0212 .dbline -1
0212 .dbline 98
0212 ; for(j=0;j<140;j++);
0212 ; }
0212 ; }
0212 ; /******************************************/
0212 ; uint conv(uint i)
0212 ; {
0212 .dbline 101
0212 ; long x;
0212 ; uint y;
0212 ; x=(5000*(long)i)/1023;
0212 1501 movw R2,R10
0214 4424 clr R4
0216 5524 clr R5
0218 48E8 ldi R20,136
021A 53E1 ldi R21,19
021C 60E0 ldi R22,0
021E 70E0 ldi R23,0
0220 5A92 st -y,R5
0222 4A92 st -y,R4
0224 3A92 st -y,R3
0226 2A92 st -y,R2
0228 8A01 movw R16,R20
022A 9B01 movw R18,R22
022C 0E940000 xcall empy32s
0230 4FEF ldi R20,255
0232 53E0 ldi R21,3
0234 60E0 ldi R22,0
0236 70E0 ldi R23,0
0238 7A93 st -y,R23
023A 6A93 st -y,R22
023C 5A93 st -y,R21
023E 4A93 st -y,R20
0240 0E940000 xcall div32s
0244 FE01 movw R30,R28
0246 0083 std z+0,R16
0248 1183 std z+1,R17
024A 2283 std z+2,R18
024C 3383 std z+3,R19
024E .dbline 102
024E ; y=(uint)x;
024E FE01 movw R30,R28
0250 A080 ldd R10,z+0
0252 B180 ldd R11,z+1
0254 .dbline 103
0254 ; return y;
0254 8501 movw R16,R10
0256 .dbline -2
0256 L30:
0256 2496 adiw R28,4
0258 0E940000 xcall pop_gset3
025C .dbline 0 ; func end
025C 0895 ret
025E .dbsym r y 10 i
025E .dbsym l x 0 L
025E .dbsym r i 10 i
025E .dbend
025E .dbfunc e main _main fV
.even
025E _main::
025E .dbline -1
025E .dbline 107
025E ; }
025E ; /******************************************/
025E ; void main(void)
025E ; {
025E .dbline 108
025E ; init_devices();
025E B6DF xcall _init_devices
0260 2BC0 xjmp L33
0262 L32:
0262 .dbline 110
0262 ; while(1)
0262 ; {
0262 .dbline 111
0262 ; if(flag==1)
0262 80910000 lds R24,_flag
0266 8130 cpi R24,1
0268 21F5 brne L35
026A .dbline 112
026A ; {
026A .dbline 113
026A ; dis_val=conv(value);
026A 00910400 lds R16,_value
026E 10910500 lds R17,_value+1
0272 CBDF xcall _conv
0274 10930300 sts _dis_val+1,R17
0278 00930200 sts _dis_val,R16
027C .dbline 114
027C ; if(dis_val<2000){OUT2_1;OUT1_0;}
027C 003D cpi R16,208
027E E7E0 ldi R30,7
0280 1E07 cpc R17,R30
0282 28F4 brsh L37
0284 .dbline 114
0284 .dbline 114
0284 C19A sbi 0x18,1
0286 .dbline 114
0286 88B3 in R24,0x18
0288 8E7F andi R24,254
028A 88BB out 0x18,R24
028C .dbline 114
028C 0FC0 xjmp L38
028E L37:
028E .dbline 115
028E ; else if(dis_val<3000){OUT1_1;OUT2_1;}
028E 80910200 lds R24,_dis_val
0292 90910300 lds R25,_dis_val+1
0296 883B cpi R24,184
0298 EBE0 ldi R30,11
029A 9E07 cpc R25,R30
029C 18F4 brsh L39
029E .dbline 115
029E .dbline 115
029E C09A sbi 0x18,0
02A0 .dbline 115
02A0 C19A sbi 0x18,1
02A2 .dbline 115
02A2 04C0 xjmp L40
02A4 L39:
02A4 .dbline 116
02A4 ; else {OUT2_0;OUT1_1;}
02A4 .dbline 116
02A4 88B3 in R24,0x18
02A6 8D7F andi R24,253
02A8 88BB out 0x18,R24
02AA .dbline 116
02AA C09A sbi 0x18,0
02AC .dbline 116
02AC L40:
02AC L38:
02AC .dbline 117
02AC ; flag=0;
02AC 2224 clr R2
02AE 20920000 sts _flag,R2
02B2 .dbline 118
02B2 ; }
02B2 L35:
02B2 .dbline 119
02B2 0AE0 ldi R16,10
02B4 10E0 ldi R17,0
02B6 93DF xcall _delay
02B8 .dbline 120
02B8 L33:
02B8 .dbline 109
02B8 D4CF xjmp L32
02BA X4:
02BA .dbline -2
02BA L31:
02BA .dbline 0 ; func end
02BA 0895 ret
02BC .dbend
.area bss(ram, con, rel)
0000 .dbfile d:\MYDOCU~1\ac10-2\ac10-2.c
0000 _flag::
0000 .blkb 1
0001 .dbsym e flag _flag c
0001 _i::
0001 .blkb 1
0002 .dbsym e i _i c
0002 _dis_val::
0002 .blkb 2
0004 .dbsym e dis_val _dis_val i
0004 _value::
0004 .blkb 2
0006 .dbsym e value _value i
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -