📄 ad.s
字号:
.module ad.c
.area text(rom, con, rel)
.dbfile F:\IccAvr_Pro\ad.c
.area data(ram, con, rel)
_AD_value::
.blkb 2
.area idata
.word 0
.area data(ram, con, rel)
.blkb 2
.area idata
.word 0
.area data(ram, con, rel)
.blkb 2
.area idata
.word 0
.area data(ram, con, rel)
.blkb 2
.area idata
.word 0
.area data(ram, con, rel)
.blkb 2
.area idata
.word 0
.area data(ram, con, rel)
.blkb 2
.area idata
.word 0
.area data(ram, con, rel)
.blkb 2
.area idata
.word 0
.area data(ram, con, rel)
.blkb 2
.area idata
.word 0
.area data(ram, con, rel)
.dbsym e AD_value _AD_value A[16:8]i
.area lit(rom, con, rel)
_ad_channel::
.byte 0,1
.byte 2,3
.byte 4,5
.byte 6,7
.dbsym e ad_channel _ad_channel A[8:8]kc
.area vector(rom, abs)
.org 56
jmp _adc_isr
.area lit(rom, con, rel)
.area text(rom, con, rel)
.dbfunc e adc_isr _adc_isr fV
.even
_adc_isr::
st -y,R0
st -y,R1
st -y,R2
st -y,R3
st -y,R4
st -y,R5
st -y,R6
st -y,R7
st -y,R24
st -y,R25
st -y,R30
st -y,R31
in R0,0x3f
st -y,R0
.dbline -1
.dbline 9
; #include "ad.h"
;
; unsigned int AD_value[AD_size]={0,0,0,0,0,0,0,0};
; unsigned char ad_index;
; const unsigned char ad_channel[AD_size]={0,1,2,3,4,5,6,7};
; unsigned char ad_frist_flag;
; #pragma interrupt_handler adc_isr:15
; void adc_isr(void)
; {
.dbline 13
; //conversion complete, read value (int) using...
; // value=ADCL; //Read 8 low bits first (important)
; // value|=(int)ADCH << 8; //read 2 high bits and shift into top byte
; if(ad_frist_flag)
lds R2,_ad_frist_flag
tst R2
breq L2
.dbline 14
; ad_frist_flag=0;
clr R2
sts _ad_frist_flag,R2
xjmp L3
L2:
.dbline 16
; else
; {
.dbline 17
; AD_value[ad_index]=ADCL;
lds R2,_ad_index
ldi R24,2
mul R24,R2
movw R30,R0
ldi R24,<_AD_value
ldi R25,>_AD_value
add R30,R24
adc R31,R25
in R2,0x4
clr R3
std z+1,R3
std z+0,R2
.dbline 18
; AD_value[ad_index]|=(int)AD_value[ad_index]<<8;
lds R2,_ad_index
ldi R24,2
mul R24,R2
movw R2,R0
ldi R24,<_AD_value
ldi R25,>_AD_value
add R2,R24
adc R3,R25
movw R30,R2
ldd R4,z+0
ldd R5,z+1
movw R6,R4
mov R7,R6
clr R6
or R4,R6
or R5,R7
std z+1,R5
std z+0,R4
.dbline 19
; ad_index++;
lds R24,_ad_index
subi R24,255 ; addi 1
sts _ad_index,R24
.dbline 20
; if(ad_index<sizeof(ad_channel))
cpi R24,8
brsh L4
.dbline 21
; {
.dbline 22
; ADMUX|=ad_channel[ad_index];
ldi R24,<_ad_channel
ldi R25,>_ad_channel
lds R30,_ad_index
clr R31
add R30,R24
adc R31,R25
lpm R30,Z
in R2,0x7
or R2,R30
out 0x7,R2
.dbline 23
; ADCSRA|=BIT(ADSC);
sbi 0x6,6
.dbline 24
; }
L4:
.dbline 25
L3:
.dbline -2
L1:
ld R0,y+
out 0x3f,R0
ld R31,y+
ld R30,y+
ld R25,y+
ld R24,y+
ld R7,y+
ld R6,y+
ld R5,y+
ld R4,y+
ld R3,y+
ld R2,y+
ld R1,y+
ld R0,y+
.dbline 0 ; func end
reti
.dbend
.dbfunc e adc_init _adc_init fV
.even
_adc_init::
.dbline -1
.dbline 29
; }
; }
;
; void adc_init(void)
; {
.dbline 30
; ADCSR = 0x00; //disable adc
clr R2
out 0x6,R2
.dbline 32
; //select adc input 0
; ADMUX=BIT(REFS0);
ldi R24,64
out 0x7,R24
.dbline 33
; ADCSR=BIT(ADPS2)|BIT(ADEN)|BIT(ADIE);
ldi R24,140
out 0x6,R24
.dbline 34
; ad_frist_flag=1;
ldi R24,1
sts _ad_frist_flag,R24
.dbline -2
L6:
.dbline 0 ; func end
ret
.dbend
.dbfunc e adc_start _adc_start fV
.even
_adc_start::
.dbline -1
.dbline 39
;
; }
;
; void adc_start(void)
; {
.dbline 40
; ADMUX|=ad_channel[ad_index++];
lds R2,_ad_index
clr R3
mov R24,R2
subi R24,255 ; addi 1
sts _ad_index,R24
ldi R24,<_ad_channel
ldi R25,>_ad_channel
mov R30,R2
clr R31
add R30,R24
adc R31,R25
lpm R30,Z
in R2,0x7
or R2,R30
out 0x7,R2
.dbline 41
; ADCSR|=BIT(ADSC);
sbi 0x6,6
.dbline -2
L7:
.dbline 0 ; func end
ret
.dbend
.area bss(ram, con, rel)
_ad_frist_flag::
.blkb 1
.dbsym e ad_frist_flag _ad_frist_flag c
_ad_index::
.blkb 1
.dbsym e ad_index _ad_index c
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -