📄 adc.s
字号:
.module ADC.c
.area data(ram, con, rel)
_adc_rel::
.blkb 2
.area idata
.word 0
.area data(ram, con, rel)
.dbfile G:\Mega8程序\TCXO评估板\Main\ADC.c
.dbsym e adc_rel _adc_rel i
_adc_mux::
.blkb 1
.area idata
.byte 0
.area data(ram, con, rel)
.dbfile G:\Mega8程序\TCXO评估板\Main\ADC.c
.dbsym e adc_mux _adc_mux c
.area text(rom, con, rel)
.dbfile G:\Mega8程序\TCXO评估板\Main\ADC.c
.dbfunc e adc_init _adc_init fV
.even
_adc_init::
.dbline -1
.dbline 7
; #include <iom8v.h>
; #include <macros.h>
; #define Vref 4995//参考电压值
; unsigned int adc_rel=0;//AD转换结果
; unsigned char adc_mux=0;//AD通道,默认为0通道
; void adc_init(void)//ADC初始化,并启动AD转换
; {DDRC=0x00;
.dbline 7
clr R2
out 0x14,R2
.dbline 8
; PORTC=0x00;
out 0x15,R2
.dbline 9
; ADCSRA = 0x00;
out 0x6,R2
.dbline 11
; //状态控制寄存器复位
; ADMUX =(1<<REFS0)|(adc_mux&0x0f);
lds R24,_adc_mux
andi R24,15
ori R24,64
out 0x7,R24
.dbline 13
; //选择内部AVCC为基准,并选取当前转换通道(转换为0~7)
; ACSR =(1<<ACD);
ldi R24,128
out 0x8,R24
.dbline 15
; //关闭模拟比较器(使用ADC时必须关断)
; ADCSRA=(1<<ADEN)|(1<<ADSC)|(1<<ADIE)|(1<<ADPS2)|(1<<ADPS1) ;
ldi R24,206
out 0x6,R24
.dbline -2
L1:
.dbline 0 ; func end
ret
.dbend
.area vector(rom, abs)
.org 28
rjmp _adc_isr
.area text(rom, con, rel)
.dbfile G:\Mega8程序\TCXO评估板\Main\ADC.c
.dbfunc e adc_isr _adc_isr fV
.even
_adc_isr::
st -y,R24
st -y,R25
in R24,0x3f
st -y,R24
.dbline -1
.dbline 20
; //允许AD转换,启动AD转换,开启AD转换中断,64预分频
; }
; #pragma interrupt_handler adc_isr:iv_ADC //ADC完成中断
; void adc_isr(void)
; {adc_rel=ADC&0x3ff;
.dbline 20
in R24,0x4
in R25,0x5
andi R25,3
sts _adc_rel+1,R25
sts _adc_rel,R24
.dbline 22
; //摒除高位数据,10位转换
; ADMUX=(1<<REFS0)|(adc_mux&0x0f);
lds R24,_adc_mux
andi R24,15
ori R24,64
out 0x7,R24
.dbline 24
; //选择内部AVCC为基准,并选取当前转换通道(转换为0~7)
; ADCSRA|=(1<<ADSC);
sbi 0x6,6
.dbline -2
L2:
ld R24,y+
out 0x3f,R24
ld R25,y+
ld R24,y+
.dbline 0 ; func end
reti
.dbend
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -