.DEF HLEDBYTE=R19 ;存放ADCH
.DEF LLEDBYTE=R18 ;存放ADCL
.DEF TEMP=R16 ;数据暂存器
.ORG $0000 ;代码段起始位置
RJMP RESET ;系统上电复位,跳转到主程序
.org $0009
RJMP tim0_ovf
.ORG $000E ;ADC INTER 中断入口地址
RJMP ADC_INT
RESET:
LDI TEMP,$02 ;设堆栈指针$025F
OUT SPH,TEMP
LDI TEMP,$5F
OUT SPL,TEMP
LDI TEMP,$FF ;B 口D 口为输出
OUT DDRB,TEMP
LDI TEMP,$C0
OUT PORTD,TEMP ;开通LED 数目管,硬件设定高电平亮
CLR TEMP
OUT DDRB,TEMP ;A 口为输入
OUT PORTB,TEMP
MAIN:
CLT ;清T 标志
SEI ;开中断
sbi acsr,7
RCALL CONINI ;调用A/D 初始化
rcall tim0ini
WAIT:
BRTC WAIT ;等待中断
CLT
START:
OUT PINB,R18
OUT PIND,R19
RCALL DELAY
RJMP MAIN ;返回主程序
ADC_INT:
IN LLEDBYTE,ADCL ;中断后,读取ADC 数据寄存器低位数据
IN HLEDBYTE,ADCH ;取ADC 数据寄存器高位数据
CBI ADSC,6 ;停止ADC 转换
SET ;置T 标志
RETI ;中断返回
CONINI:
LDI TEMP,$8D ;设置ADC 转换,中断触发,ADC 为单一模式且32MCU 除频
OUT ADCSR,TEMP
CLR TEMP ;
OUT ADMUX,TEMP ;选择0 通道
SBI ADCSR,6
RET
DELAY:
LDI R27,$10 ;延时子程序
DELAY1:
DEC R26
BRNE DELAY1
DEC R27
BRNE DELAY1
RET
tim0_ovf:
inc R10
RETI
tim0ini:
clr R10
ldi TEMP,$02
out TCCR0,temp
ldi temp,$01
out TIMSK,temp
ret