📄 ad.lis
字号:
.module ad.c
.area text(rom, con, rel)
0000 .dbfile F:\IccAvr_Pro\ad.c
.area data(ram, con, rel)
0000 _AD_value::
0000 .blkb 2
.area idata
0000 0000 .word 0
.area data(ram, con, rel)
0002 .blkb 2
.area idata
0002 0000 .word 0
.area data(ram, con, rel)
0004 .blkb 2
.area idata
0004 0000 .word 0
.area data(ram, con, rel)
0006 .blkb 2
.area idata
0006 0000 .word 0
.area data(ram, con, rel)
0008 .blkb 2
.area idata
0008 0000 .word 0
.area data(ram, con, rel)
000A .blkb 2
.area idata
000A 0000 .word 0
.area data(ram, con, rel)
000C .blkb 2
.area idata
000C 0000 .word 0
.area data(ram, con, rel)
000E .blkb 2
.area idata
000E 0000 .word 0
.area data(ram, con, rel)
0010 .dbsym e AD_value _AD_value A[16:8]i
.area lit(rom, con, rel)
0000 _ad_channel::
0000 0001 .byte 0,1
0002 0203 .byte 2,3
0004 0405 .byte 4,5
0006 0607 .byte 6,7
0008 .dbsym e ad_channel _ad_channel A[8:8]kc
.area vector(rom, abs)
.org 56
0038 0C940000 jmp _adc_isr
.area lit(rom, con, rel)
.area text(rom, con, rel)
0000 .dbfunc e adc_isr _adc_isr fV
.even
0000 _adc_isr::
0000 0A92 st -y,R0
0002 1A92 st -y,R1
0004 2A92 st -y,R2
0006 3A92 st -y,R3
0008 4A92 st -y,R4
000A 5A92 st -y,R5
000C 6A92 st -y,R6
000E 7A92 st -y,R7
0010 8A93 st -y,R24
0012 9A93 st -y,R25
0014 EA93 st -y,R30
0016 FA93 st -y,R31
0018 0FB6 in R0,0x3f
001A 0A92 st -y,R0
001C .dbline -1
001C .dbline 9
001C ; #include "ad.h"
001C ;
001C ; unsigned int AD_value[AD_size]={0,0,0,0,0,0,0,0};
001C ; unsigned char ad_index;
001C ; const unsigned char ad_channel[AD_size]={0,1,2,3,4,5,6,7};
001C ; unsigned char ad_frist_flag;
001C ; #pragma interrupt_handler adc_isr:15
001C ; void adc_isr(void)
001C ; {
001C .dbline 13
001C ; //conversion complete, read value (int) using...
001C ; // value=ADCL; //Read 8 low bits first (important)
001C ; // value|=(int)ADCH << 8; //read 2 high bits and shift into top byte
001C ; if(ad_frist_flag)
001C 20900000 lds R2,_ad_frist_flag
0020 2220 tst R2
0022 21F0 breq L2
0024 .dbline 14
0024 ; ad_frist_flag=0;
0024 2224 clr R2
0026 20920000 sts _ad_frist_flag,R2
002A 33C0 xjmp L3
002C L2:
002C .dbline 16
002C ; else
002C ; {
002C .dbline 17
002C ; AD_value[ad_index]=ADCL;
002C 20900100 lds R2,_ad_index
0030 82E0 ldi R24,2
0032 829D mul R24,R2
0034 F001 movw R30,R0
0036 80E0 ldi R24,<_AD_value
0038 90E0 ldi R25,>_AD_value
003A E80F add R30,R24
003C F91F adc R31,R25
003E 24B0 in R2,0x4
0040 3324 clr R3
0042 3182 std z+1,R3
0044 2082 std z+0,R2
0046 .dbline 18
0046 ; AD_value[ad_index]|=(int)AD_value[ad_index]<<8;
0046 20900100 lds R2,_ad_index
004A 82E0 ldi R24,2
004C 829D mul R24,R2
004E 1001 movw R2,R0
0050 80E0 ldi R24,<_AD_value
0052 90E0 ldi R25,>_AD_value
0054 280E add R2,R24
0056 391E adc R3,R25
0058 F101 movw R30,R2
005A 4080 ldd R4,z+0
005C 5180 ldd R5,z+1
005E 3201 movw R6,R4
0060 762C mov R7,R6
0062 6624 clr R6
0064 4628 or R4,R6
0066 5728 or R5,R7
0068 5182 std z+1,R5
006A 4082 std z+0,R4
006C .dbline 19
006C ; ad_index++;
006C 80910100 lds R24,_ad_index
0070 8F5F subi R24,255 ; addi 1
0072 80930100 sts _ad_index,R24
0076 .dbline 20
0076 ; if(ad_index<sizeof(ad_channel))
0076 8830 cpi R24,8
0078 60F4 brsh L4
007A .dbline 21
007A ; {
007A .dbline 22
007A ; ADMUX|=ad_channel[ad_index];
007A 80E0 ldi R24,<_ad_channel
007C 90E0 ldi R25,>_ad_channel
007E E0910100 lds R30,_ad_index
0082 FF27 clr R31
0084 E80F add R30,R24
0086 F91F adc R31,R25
0088 E491 lpm R30,Z
008A 27B0 in R2,0x7
008C 2E2A or R2,R30
008E 27B8 out 0x7,R2
0090 .dbline 23
0090 ; ADCSRA|=BIT(ADSC);
0090 369A sbi 0x6,6
0092 .dbline 24
0092 ; }
0092 L4:
0092 .dbline 25
0092 L3:
0092 .dbline -2
0092 L1:
0092 0990 ld R0,y+
0094 0FBE out 0x3f,R0
0096 F991 ld R31,y+
0098 E991 ld R30,y+
009A 9991 ld R25,y+
009C 8991 ld R24,y+
009E 7990 ld R7,y+
00A0 6990 ld R6,y+
00A2 5990 ld R5,y+
00A4 4990 ld R4,y+
00A6 3990 ld R3,y+
00A8 2990 ld R2,y+
00AA 1990 ld R1,y+
00AC 0990 ld R0,y+
00AE .dbline 0 ; func end
00AE 1895 reti
00B0 .dbend
00B0 .dbfunc e adc_init _adc_init fV
.even
00B0 _adc_init::
00B0 .dbline -1
00B0 .dbline 29
00B0 ; }
00B0 ; }
00B0 ;
00B0 ; void adc_init(void)
00B0 ; {
00B0 .dbline 30
00B0 ; ADCSR = 0x00; //disable adc
00B0 2224 clr R2
00B2 26B8 out 0x6,R2
00B4 .dbline 32
00B4 ; //select adc input 0
00B4 ; ADMUX=BIT(REFS0);
00B4 80E4 ldi R24,64
00B6 87B9 out 0x7,R24
00B8 .dbline 33
00B8 ; ADCSR=BIT(ADPS2)|BIT(ADEN)|BIT(ADIE);
00B8 8CE8 ldi R24,140
00BA 86B9 out 0x6,R24
00BC .dbline 34
00BC ; ad_frist_flag=1;
00BC 81E0 ldi R24,1
00BE 80930000 sts _ad_frist_flag,R24
00C2 .dbline -2
00C2 L6:
00C2 .dbline 0 ; func end
00C2 0895 ret
00C4 .dbend
00C4 .dbfunc e adc_start _adc_start fV
.even
00C4 _adc_start::
00C4 .dbline -1
00C4 .dbline 39
00C4 ;
00C4 ; }
00C4 ;
00C4 ; void adc_start(void)
00C4 ; {
00C4 .dbline 40
00C4 ; ADMUX|=ad_channel[ad_index++];
00C4 20900100 lds R2,_ad_index
00C8 3324 clr R3
00CA 822D mov R24,R2
00CC 8F5F subi R24,255 ; addi 1
00CE 80930100 sts _ad_index,R24
00D2 80E0 ldi R24,<_ad_channel
00D4 90E0 ldi R25,>_ad_channel
00D6 E22D mov R30,R2
00D8 FF27 clr R31
00DA E80F add R30,R24
00DC F91F adc R31,R25
00DE E491 lpm R30,Z
00E0 27B0 in R2,0x7
00E2 2E2A or R2,R30
00E4 27B8 out 0x7,R2
00E6 .dbline 41
00E6 ; ADCSR|=BIT(ADSC);
00E6 369A sbi 0x6,6
00E8 .dbline -2
00E8 L7:
00E8 .dbline 0 ; func end
00E8 0895 ret
00EA .dbend
.area bss(ram, con, rel)
0000 _ad_frist_flag::
0000 .blkb 1
0001 .dbsym e ad_frist_flag _ad_frist_flag c
0001 _ad_index::
0001 .blkb 1
0002 .dbsym e ad_index _ad_index c
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -