📄 ex9-1a.asm
字号:
$INCLUDE (STC12C5A.INC) ;包含STC12C5A60S2单片机寄存器定义文件
ADC_DAT EQU 30H ;A/D转换结果
ORG 0000H
LJMP MAIN
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转换通道,则需要加延时
WAIT_AD:
ORL ADC_CONTR, #00001000B ;启动A/D转换
MOV A, #00010000B ;判断A/D转换是否完成
ANL A, ADC_CONTR
JZ WAIT_AD ;A/D 转换尚未完成, 继续等待
ANL ADC_CONTR, #11100111B ;将ADC_FLAG清0
MOV A, ADC_RES ;读取A/D转换结果
MOV ADC_DAT, A ;保存A/D转换结果
LJMP WAIT_AD ;等待下一次转换完成
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 + -