📄 ex9-2a.asm
字号:
$INCLUDE (STC12C5A.INC) ;包含STC12C5A60S2单片机寄存器定义文件
ADC_HI EQU 31H ;A/D转换结果高2位
ADC_LOW EQU 30H ;A/D转换结果低8位
ORG 0000H
LJMP MAIN
ORG 002BH
LJMP ADC_ISR ;ADC中断服务程序入口
ORG 0050H
MAIN:
MOV SP, #70H ;设置堆栈
ORL ADC_CONTR, #80H ;开A/D转换电源,第一次使用时要打开内部模拟电源
MOV A, #20H
LCALL DELAY ;开A/D转换电源后要加适当延时,1ms以内即可
MOV P1ASF,#04H ;设置P1.2的模拟量功能
MOV ADC_CONTR,#11100010B ;选择P1.2作为A/D转换通道
MOV A, #05H
LCALL DELAY ;如果切换A/D转换通道,则需要加延时
ORL AUXR1,#04H ;设置ADC转换结果存储格式(ADRJ=1)
ORL ADC_CONTR, #00001000B ;启动A/D转换
SETB EADC ;EADC=1, 开放ADC的中断控制位
SETB EA ;开放CPU总中断
SJMP $ ;循环等待中断
ADC_ISR: ;ADC中断服务程序入口
ANL ADC_CONTR, #11100111B ;将ADC_FLAG清0
MOV A, ADC_RES ;读取A/D转换结果高2位
ANL A,#03H ;屏蔽高6位
MOV ADC_HI, A ;保存A/D转换结果高2位
MOV A, ADC_RESL ;读取A/D转换结果低8位
MOV ADC_LOW, A ;保存A/D转换结果低8位
ORL ADC_CONTR, #00001000B ;启动A/D转换
RETI
DELAY: ;延时子程序
PUSH 02 ;将寄存器组0 的 R2 入栈
PUSH 03 ;将寄存器组0 的 R3 入栈
PUSH 04 ;将寄存器组0 的 R4 入栈
MOV R4, A
DELAY_LOOP0: ;DELAY_LOOP0循环延时200406个时钟周期
MOV R3, #200 ;2个时钟周期
Delay_LOOP1: ;DELAY_LOOP1循环延时1002个时钟周期
MOV R2, #249 ;2个时钟周期
DELAY_LOOP:
DJNZ R2, DELAY_LOOP ;4个时钟周期
DJNZ R3, DELAY_LOOP1 ;4个时钟周期
DJNZ R4, DELAY_LOOP0 ;4个时钟周期
POP 04
POP 03
POP 02
RET
END
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -