A/D 转换
硬件设计:8 路输入模拟信号数值显示电路由 A/D 转换.数据处理及显示控制等组成.A/D 转
换由集成电路 0809 完成.0809 具有 8 路模拟输入端口,地址线(23--25 脚)可决定对那一路模
拟输入做 A/D 转换.第 22 脚为地址锁存控制,当输入为高电平时,对地址信号进行锁存,6 脚
为测试控制,当输入一个 2US 宽的高电平时,就可是 A/D 转换,7 脚为 A/D 转换结束标志,当 A/D
转换结束时,7 脚输出高电平,9 脚为 A/D 转换数据输出允许控制,当 OE 脚为高电平时,A/D 转
换数据从端口输出;10 脚为 0809 的时钟输入端,利用单片机 30 脚的六分频晶振信号在通过
14024 二分频得到.单片机的 P1,P3 端口做四位 LED 数码管显示控制,P0 端口做 A/D 转换数据
读入用,P2 口用做 0809 的 A/D 转换控制.
系统主要程序设计
初始化程序
系统上电时,将 70H--77H 内存单元清零,P2 口置 0.
主程序
在刚上电时,因 70H--77H 内存单元的数据位 0,则每一通道的数码管显示值都为 000.当进行
一次测量后,将显示出每一通道的 A/D 转换值,每个通道的数据显示时间在 1S 左右.主程序在
调用显示程序和测试程之间的循环,起流程图为
开始
初始化
调用子程序
调用 A/D 转换子程序
显示子程序
采用动态扫描实现四位数码管的数值显示,测量所用的 A/D 转换数据放在 70H--77H 内存单元
中,测量数据在显示时需进过转换成为十进制 BCD 码放在 78H--7BH 中,其中 7BH 存放通道标
准数,寄存器 R3 用来做 8 路循环控制,R0 用做显示数据地址指针
模数转换测量子程序
模数转换测量子程序是用来控制对 0809 8 路模拟输入电压的 A/D 转换,并将对应的数值移入
70H--77H 内存单元,
程序清单
ORG 0000H
LJMP START
ORG 0003H
RETI
ORG 000BH
RETI
ORG 0013H
RETI
ORG 001BH
RETI
ORG 0023H
RETI
ORG 002BH
RETI
CLEARMEMIO:CLR A
MOV P2,A
MOV R0,#70H
MOV R2,#0CH
LOOPMEM:MOV @R0,A
INC R0
DJNZ R2,LOOPMEM
MOV A,#0FFH
MOV P0,A
MOV P1,A
MOV P3,A
RET
START: LCALL CLEARMEMIO
MAIN: LCALL DISPLAY
LCALL TEST
AJMP MAIN
NOP
NOP
NOP
LJMP START
DISPLAY:MOV R3,#08H
MOV R0,#70H
MOV 7BH,#00H
DISLOOP1:MOV A,@R0
MOV B,#100
DIV AB
MOV 7AH,A
MOV A,#10H
XCH A,B
DIV AB
MOV 79H,A
MOV 78H,B
MOV R2,#0FFH
DISLOOP2:LCALL DISP
DJNZ R2,DISLOOP2
INC R0
INC 7BH
DJNZ R3,DISLOOP1
RET
DISP: MOV R1,#78H
MOV R5,#0FEH
PLAY: MOV P1,#0FFH
MOV A,R5
ANL P3,A
MOV A,@R1
MOV DPTR,#TAB
MOVC A,@A+DPTR
MOV P1,A
LCALL DL1MS
INC R1
MOV A,P3
JNB ACC.3,ENDOUT
RL A
MOV R5,A
MOV P3,#0FFH
AJMP PLAY
ENDOUT: MOV P3,#0FFH
MOV P1,#0FFH
RET
TAB:
DB 0C0H,0F9H,0A4H,0B0H,99H,92H,82H,0F8H,80H,90H,0FFH
DL1MS: MOV R6,#14H
DL1: MOV R7,#19H
DL2: DJNZ R7,DL2
DJNZ R6,DL1
RET
TEST: CLR A
MOV P2,A
MOV R0,#70H
MOV R7,#08H
LCALL TESTART
WAIT: JB P3.7,MOVD
AJMP WAIT
TESTART:SETB P2.3
NOP
NOP
CLR P2.3
SETB P2.4
NOP
NOP
CLR P2.4
NOP
NOP
NOP
NOP
RET
MOVD: SETB P2.5
MOV A,P0
MOV @R0,A
CLR P2.5
INC R0
MOV A,P2
INC A
MOV P2,A
CLR C
CJNE A,#08H,TESTCON
JC TESTCON
CLR A
MOV P2,A
MOV A,#0FFH
MOV P0,A
MOV P1,A
MOV P3,A
RET
TESTCON:LCALL TESTART
LJMP WAIT
END