📄 adc.asm
字号:
//-----------------------------------------------------------------------------
// 版权归新华龙电子公司所有
//-----------------------------------------------------------------------------
//
// 文件名:ADC.ASM
//
// 编写人:LC
//
// 编写时间:2005/2/25
//
// 目标器件: C8051F02x
//
// 编译工具: Silicon Laboratories IDE
//
// 程序说明: 此程序模/数转化通道AIN0.0的输入值,测试前将S6的第一拨码开关拨到ON
//------------------------------------------------------------------------------------
// // 头文件包含
//------------------------------------------------------------------------------------
$include (c8051f020.inc)
SYSCLK EQU 2000000
TC_5ms EQU (SYSCLK / 12) * 5
LCDBit BIT 20H.0
ORG 0
AJMP main
ORG 7BH
AJMP ADC_ISR
ORG 0100H
;延时子程序
Delay:
MOV R7, #01h
Delay1:
MOV R6, #80h
Delay0:
MOV R5, #00h
DJNZ R5, $
DJNZ R6, Delay0
DJNZ R7, Delay1
RET
//------------------------------------------------------------------------------------
//主程序
//------------------------------------------------------------------------------------
main:
MOV R1,#30H ;从地址30H开始赋常数#0AH,#0DH,#0CH,#00H,#68H,#68H
MOV @R1,#0AH
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
MOV WDTCN,#0deH
MOV WDTCN,#0adH ;禁止看门狗定时器
CLR LCDBit ;清液晶显示位
LCALL PORT_Init ;I/O口初始化
LCALL LCD_Init ;液晶初始化
LCALL Timer3_Init ;初始化定时3
LCALL ADC_Init ;初始化A/D
SETB EA ;使能总中断标志
ORL AMX0SL,#00 ;通道0
LCALL Delay
;ORL AMX0SL,#01H 通道1
;LCALL Delay
;ORL AMX0SL,#02H 通道2
;LCALL Delay
;ORL AMX0SL,#03H 通道3
;LCALL Delay
;ORL AMX0SL,#04H 通道4
;LCALL Delay
;ORL AMX0SL,#05H 通道5
;LCALL Delay
;ORL AMX0SL,#06H 通道6
;LCALL Delay
;ORL AMX0SL,#07H 通道7
LOOP:
JNB LCDBit,LOOP ;是否显示到LCD
ANL TMR3CN,#0fbH ;关定时器3
CLR LCDBit ;清LCD显示位
MOV P7,#02H ;返回初始位置
MOV P6,#08H
MOV P6,#09H
MOV R1,#39H ;将A/D转化值保存到36H~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,#0dH ;准备送数据
LCALL Delay ;延时
MOV R1,#30H ;显示数据首地址
MOV R2,#0AH ;显示数据长度
NDATA:
MOV A,@R1 ;将显示数据转化为液晶的显示字符码
MOV R0,A
CLR C
SUBB A,#0AH
JC KK
MOV A,R0
ADD A,#37H
AJMP TT
KK:
MOV A,R0
ADD A,#30H
TT:
MOV P7,A ;送显示数据
MOV P6,#0cH
MOV P6,#0dH
INC R1
LCALL Delay
DJNZ R2,NDATA ;数据是否送完
ORL TMR3CN,#04H ;使能定时器3
SJMP LOOP
RET
;初始化液晶模块
LCD_Init:
MOV P6,#09H
LCALL Delay
MOV P7,#38H ;两行显示
MOV P6,#08H
MOV P6,#09H
LCALL Delay
MOV P7,#0eH ;开显示,开光标,字符不闪烁
MOV P6,#08H
MOV P6,#09H
LCALL Delay
MOV P7,#06H ;AC自动增1,整体显示不移动
MOV P6,#08H
MOV P6,#09H
LCALL Delay
MOV P7,#01H ;清除DDRAM,置AC=0
MOV P6,#08H
MOV P6,#09H
LCALL Delay
RET
;初始化I/O口
PORT_Init:
MOV XBR2,#40H ;使能交叉开关
ORL P74OUT,#0ffH ;推挽输出
RET
;初始化定时器3
Timer3_Init:
MOV TMR3CN,#00H
MOV TMR3RLH, #HIGH(-TC_5ms) ;初始化重载值
MOV TMR3RLL, #LOW(-TC_5ms)
MOV TMR3H, #0ffh ;设置自动重载值
MOV TMR3L, #0ffh
ORL TMR3CN,#04H
RET
;初始化A/D
ADC_Init:
ORL ADC0CN,#84H ;ADC0使能,定时器3溢出使能模/数转换
ORL REF0CN,#03H ;内部电压基准提供从VREF脚输出,ADC0电压基准取自VREF0
ORL ADC0CF,#50H ;转换周期和增益为1
ORL AMX0CF,#00H ;单端输入
ORL EIE2,#02H ;ADC0转换结束中断
RET
;A/D中断服务程序
ADC_ISR:
CLR AD0INT ;清A/D中断标志
SETB LCDBit ;置LCD显示位
RETI
END
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -