📄 asm.asm
字号:
;本程序演示从P1.2采集外部电压值进行模数转换,通过P1口显示其二进制值,并通过串口发送
LED_MCU_START EQU P3.7;定义P3.7为工作指示灯
ADC_CONTR EQU 0BCH;模数转换控制特殊功能寄存器
ADC_RES EQU 0BDH;模数转换结果高8位寄存器
P1ASF EQU 9DH;P1口模拟功能控制寄存器
ADC_POWER_ON_SPEED_CHANNEL_2 EQU 10000010B;打开模数转换电源,模数转换从通道2(P1.2)进行
ADC_CHANNEL_2_RESULT EQU 32H;通道2的模数转换结果保存在32H单元上
ORG 0000H
LJMP MAIN
ORG 0050H
MAIN:CLR LED_MCU_START;打开工作指示灯
MOV SP,7FH
ACALL INITIATE_RS232;初始化串口
ACALL ADC_POWER_ON;打开模数转换开关
ACALL SET_P12_ASF;设置P1.2为模数转换通道
ACALL SET_ADC_CHANNEL_2;模数转换从通道2(P1.2)进行
ACALL GET_AD_RESULT;开始模数转换
ACALL SEND_AD_RESULT;发送模数转换结果
ACALL SET_P12_NORMAL_IO;设置P1.2为普通I/O口
MOV A,ADC_CHANNEL_2_RESULT;模数转换结果移至累加器
CPL A;取反
MOV P1,A;通过P1口的发光数码管显示
ACALL DELAY
MAIN_LOOP:
SJMP MAIN
INITIATE_RS232:
CLR ES;禁止串口中断
MOV TMOD,#20H
MOV SCON,#50H
MOV TH1,#216;使用18.432MHz的晶振,波特率为1200bps
MOV TL1,#216
SETB TR1
RET
SEND_BYTE:
CLR TI
MOV SBUF,A
SEND_BYTE_WAIT_FINISH:
JNB TI,SEND_BYTE_WAIT_FINISH
CLR TI
RET
ADC_POWER_ON:
PUSH ACC
ORL ADC_CONTR,#80H
MOV A,#20H
ACALL DELAY
POP ACC
RET
SET_P12_ASF:
PUSH ACC
MOV A,#00000100B
ORL P1ASF,A
POP ACC
RET
SET_P12_NORMAL_IO:
PUSH ACC
MOV A,#11111011B
ANL P1ASF,A
POP ACC
RET
SET_ADC_CHANNEL_2:
MOV ADC_CONTR,#ADC_POWER_ON_SPEED_CHANNEL_2
MOV A,#05H
ACALL DELAY
RET
SEND_AD_RESULT:
PUSH ACC
MOV A,ADC_CHANNEL_2_RESULT
ACALL SEND_BYTE
POP ACC
RET
GET_AD_RESULT:
PUSH ACC
MOV ADC_RES,#0
ORL ADC_CONTR,#00001000B
NOP;启动模数转换后,等待4个机器周期方可正确读取ADC_CONTR的值
NOP
NOP
NOP
WAIT_AD_FINISH:
MOV A,#00010000B
ANL A,ADC_CONTR
JZ WAIT_AD_FINISH
ANL ADC_CONTR,#11100111B
MOV A,ADC_RES
MOV ADC_CHANNEL_2_RESULT,A
POP ACC
DELAY:
PUSH 02
PUSH 03
PUSH 04
MOV R4,A
DELAY_LOOP0:
MOV R3,#200
DELAY_LOOP1:
MOV R2,#249
DELAY_LOOP:
DJNZ R2,DELAY_LOOP
DJNZ R3,DELAY_LOOP1
DJNZ R4,DELAY_LOOP0
POP 04
POP 03
POP 02
RET
END
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -