📄 wadc0.asm
字号:
;参考程序A.WADC0.ASM程序转化通道AIN0.0的输入值,LCD显示两位16进制数.
;测试前将S6的第一拨码开关拨到ON.
$include (c8051f020.inc)
TCMS EQU 1234H ;设定T3初始化重载计数值
INTBit BIT 20H.0
ORG 0
AJMP main
ORG 7BH
AJMP ADC_ISR
ORG 0100H
main: MOV WDTCN,#0deH
MOV WDTCN,#0adH ;禁止看门狗定时器
MOV R1,#30H ;从地址30H开始赋常数#0AH,#0DH,#0CH,#00H,#68H,#68H
MOV @R1,#0AH ;准备显示字符"ADC0"
INC R1
MOV @R1,#0DH
INC R1
MOV @R1,#0CH
INC R1
MOV @R1,#00H
INC R1
MOV @R1,#68H
INC R1
MOV @R1,#68H
CLR INTBit ;清INTBIT位
LCALL PORT_Init;I/O口初始化
LCALL LCD_Init ;液晶初始化
LCALL Timer3_Init ;初始化定时3
LCALL ADC_Init ;初始化A/D
SETB EA ;使能总中断标志
MOV AMX0SL,#00 ;选择通道0
LCALL Delay
LOOP:JNB INTBit,LOOP ;ADC0中断是否发生?
ANL TMR3CN,#0fbH ;ADC0中断已经发生,关定时器3
CLR INTBit ;清INTBIT位
MOV P7,#02H ;返回初始位置,LCD的归位指令
MOV P6,#1H ;写LCD的命令寄存器
MOV P6,#0H ;结束写LCD的命令寄存器的操作
MOV R1,#39H ;将A/D转化值保存到RAM 36H,37H,38H,39H中去.
MOV A,ADC0L
ANL A,#0FH
MOV @R1,A
MOV A,ADC0L
SWAP A
ANL A,#0FH
DEC R1
MOV @R1,A
MOV A,ADC0H
ANL A,#0FH
DEC R1
MOV @R1,A
MOV A,ADC0H
SWAP A
ANL A,#0FH
DEC R1
MOV @R1,A
MOV P6,#05H ;准备送数据
LCALL Delay ;延时
MOV R1,#30H ;显示数据首地址
MOV R2,#0AH ;显示数据长度
NDATA: MOV A,@R1;将显示数据转化为液晶的显示字符码
MOV R0,A
CLR C
SUBB A,#0AH
JC KK ;C=1,A=0----9
MOV A,R0 ;C=0,A=0AH----0FH
ADD A,#37H ;将BCD码转换为ASCII码. 0AH+37H=41H ('A')
AJMP TT
KK: MOV A,R0
ADD A,#30H ;将BCD码转换为ASCII码. 0H+30H=30H ('0')
TT: MOV P7,A ;送显示数据
MOV P6,#05H
MOV P6,#04H
INC R1
LCALL Delay
DJNZ R2,NDATA ;数据是否送完
ORL TMR3CN,#04H ;使能定时器3
SJMP LOOP
RET
LCD_Init:MOV P6,#1H ;初始化液晶模块
LCALL Delay
MOV P7,#38H ;两行显示
MOV P6,#1H ; 写命令
MOV P6,#0H
LCALL Delay
MOV P7,#0EH ;LCD显示开关控制命令,开显示,开光标,字符不闪烁
MOV P6,#01H ;写命令
MOV P6,#0H
LCALL Delay
MOV P7,#1cH ;AC自动增1,整体显示不移动
MOV P6,#1H ; 写命令
MOV P6,#0H
LCALL Delay
MOV P7,#01H ;清除DDRAM,置AC=0
MOV P6,#1H ; 写命令
MOV P6,#0H
LCALL Delay
RET
Timer3_Init: ;初始化定时器3
MOV TMR3CN,#00H
MOV TMR3RLH, #HIGH(-TCMS) ;初始化重载值
MOV TMR3RLL, #LOW(-TCMS)
MOV TMR3H, #0ffh ;设置自动重载值
MOV TMR3L, #0ffh
ORL TMR3CN,#04H
RET
ADC_Init: ;初始化A/D
ORL ADC0CN,#84H;ADC0使能,定时器3溢出使能模/数转换
ORL REF0CN,#03H;内部电压基准提供从VREF脚输出,ADC0电压基准取自VREF0
ORL ADC0CF,#50H;设定转换周期,设定增益为1
ORL AMX0CF,#00H;单端输入
ORL EIE2,#02H ;允许ADC0转换结束中断
RET
;初始化I/O口
PORT_Init:
ORL P74OUT,#0c0H ;P6,P7为推挽输出
RET
ADC_ISR: ;A/D中断服务程序
CLR AD0INT ;清ADC0的中断标志位
SETB INTBit ;置INTBIT位
RETI
Delay: MOV R7, #01h ;延时子程序
Delay1: MOV R6, #80h
Delay0: MOV R5, #00h
DJNZ R5, $
DJNZ R6, Delay0
DJNZ R7, Delay1
RET
END
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -