多功能数字电压电流表的设计
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
一. 摘要
本次课程设计利用实验箱设计一个可测量多路电压的多功能数字电压电流表,按键控制分时显示测量值。
设计时用查询方式、采用A/D转换器ADC0809采集3路被测的电压信号,并利用按键来控制各路的通断与工作与否。
实验中用八段数码管显示测量数值,测量数值精确到小数点后两位。
二. 关键词
ADC0809 电压表8255 8253 按键8段数码管
正文
三.元件功能及原理介绍
3.1 8253的功能和使用
1.8253是一种可编程的定时器或计数器。
本次设计中利用8253的定时作用,用于产生一个稳定的脉冲。
该脉冲用于提供ADC0809的触发脉冲。
本设计中使用一片8253芯片,其线路如图3.1所示。
端口地址如表3.1所示。
系统中,8253在通道0下工作于方式2。
8253 通道入口接1MHz的信号源,输出接ADC0809的时钟端,数模转化用,这里的0计数器仅当作一个时Array钟脉冲用。
2.《8253引脚图》当A1A0分别为00 01 10 11
时分别选中三个通道和控制字寄存器在8088
系统中,8088的A1A0分别与8253的A1A0
相连在8086系统中,通常将8253的8位数
据线与8086的低8位相连,即使用偶地址,所以8086的A2A1分别与8253的A1A0相连Intel 8253是一片具有三个独立的16位计数器通道的可编程定时器/计数器芯片。
每个通道都可以编程设定6种工作方式之一种;由于8253的读/写操作对系统时钟没有特殊的要求,因此它几乎可以应用与由任何一种微处理器组成的系统中,可作为可编程的方波频率发生器、分频器、实时时钟、事件计数器和单脉冲发生器等。
表8-4 控制功能表CS RD WRA1A0功能0100 0写计数器00100 1写计数器10101 0写计数器20101 1写控制字寄存器0010 0读计数器00010 1读计数器10011 0读计数器20011 1无操作1XXX X禁止使用011X X无操作计数器(0 ~ 2)即三个计数器/定时器通道。
每个通道包括:8位控制字寄存器、16位计数初值寄存器、减一计数器和输出锁存器。
作定时器用:其CLK端上的输入脉冲应是标准的、精确的;作计数器用:对其CLK端上的脉冲计数,脉冲宽度可以不等。
采用减一计数器,为0时,从OUT端上输出一个脉冲定时时间= 时钟脉冲周期X预置的计数初值每个通道:CLK计数脉冲或标准脉冲输入端OUT 计数值为0时输出一个脉冲GATE允许端,当GATE=1时允许计数
3.读/写控制逻辑;
CS:片选信号,低电平有效;
RD:读信号,低电平有效;
WR:写信号,低电平有效
A1A0:端口选择信号
4.三个通道( 0 ~ 2);
每个计数通道内含1个16位的初值寄存器、减1计数器和1个16位的(输出)锁存器。
8253内部包含3个功能完全相同的通道,每个通道内部设有一个16位计数器,可进行二进制或十进制(BCD 码)计数。
采用二进制计数时, 最大计数值是FFFFH , 采用BCD 码计数时。
最大计数值是9999。
与此计数器相对应, 每个通道内设有一个16位计数值锁存器。
必要时可用来锁存计数值。
当某通道用作计数器时,应将要求计数的次数预置到该通道的计数器中、被计数的事件应以脉冲方式从CLK 端输入, 每输入一个计数脉冲,计数器内容减“1”,待计数值计到“0”。
OUT 端将有输出。
表示计数次数到。
当某个通道用作定时器时。
由CLK 输入一定频率的时钟脉冲。
根据要求定时的时间长短确定所需的计数值。
并预置到计数器中,每输入一个时钟脉冲,计数器内容减“1”, 待计数值计到“0”。
OUT 将有输出,表示定时时间到。
允许从CLK 输入的时钟频在1~2MHz 范围内。
因此,任一通道作计数器用或作定时器用,其内部操作完全相同,区别仅在于前者是由计数脉冲进行减“1”计数。
而后者是内时钟脉冲进行减“1”计数。
作计数器时, 要求计数的次数可直接作为计数器的初值预置到减“1”计数器中。
作定时器时, 计数器的初值即定时系数应根据要求定时的时间进行如下运算才能得到: 定时系数=需要定时的时间/时钟脉冲周期
①设置通道:向方式控制字寄存器端口写入方式选择控制字,用于确定要设置的通道及工作方式;
②计数/定时:向通道写入计数值,启动计数操作;
③读取当前的计数值:向指定通道读取当前计数器值时,8253将计数器值存入锁存器,从锁存器向外提供当前的计数器值,计数器则继续作计数操作。
④计数到:当计数器减1为0时,通过引脚OUTi 向外输出“到”的脉冲信号。
计数初值输入存放在初值寄存器中,计数开始或重装入时被复制到计数器中。
锁存器在非锁存状态,其值随计数器的变化而变化;一旦锁存了计数器的当前值,直到锁存器值被读取后才能解除锁存状态。
3.2 8255的功能与使用
8255是一种可编程的外围接口芯片,本设计中用3个8255分别进行键盘状态的输入和显示数据的输出。
8255的数据线、片选信号线、地址线、读写控制线等分别与系统总线相连,其A、B、C三个端口以排针形式引出,供8255实验使用。
8255A在使用前要写入一个方式控制字,选择A、B、C三个端口各自的工作方式,共有三种;
方式0 :基本的输入输出方式,即无须联络就可以直接进行的I/O方式。
其中A、B、C口的高四位或低四位可分别设置成输入或输出。
方式1 :选通I/O,此时接口和外围设备需联络信号进行协调,只有A口和B口可以工作在方式1,此时C口的某些线被规定为A口或B口与外围设备的联络信号,余下的线只有基本的I/O功能,即只工作在方式0.
方式2:双向I/O方式,只有A口可以工作在这种方式,该I/O线即可输入又可输出,此时C口有5条线被规定为A口和外围设备的双向联络线,C口剩下的三条线可作为B口方式1的联络线,也可以和B口一起方式0的I/O线。
(1)8255的初始化
上表为选择控制字的格式。
其中D7是标志位,本次设计中D7恒为1.D6,D5为A口的方式选择位。
D4为A口的输入输出选择位。
D3为C口的方式选择位。
D0为C口的输入输出选择字。
而D2为B口的方式选择位,D1为B口的输入输出选择位。
(2)设计中8255的使用
本设计中用三个8255,第一个用来采集按键的状态,第二个,第三个分别驱动两个八段的数码管。
下表为各个8255的端口分配。
(3)8255的接线图
设计中第一个8255用于按键的采集,只用其中的A 口,工作于输入状态。
第二个和第三个分别使用两个口A 和B 。
连接线路时,三个8255的D7—D0分别与8086的D7—D0相连。
地址总线的连接按照端口地址来依次连接。
3.3ADC0809的功能和使用
图4.1 系统中的8255A 芯片
(1)ADC0809的结构
图中可选通8个模拟通道,允许8路模拟量分时输入,共用一个A/D转换器进行转换,这是一种经济的多路数据采集方法。
地址锁存与译码电路完成对A、B、C 3个地址位进行锁存和译码,其译码输出用于通道选择,其转换结果通过三态输出锁存器存放、输出,因此可以直接与系统数据总线相连,表9-1为通道选择表。
ADC0809芯片为28引脚为双列直插式封装,其引脚排列见图9.8。
对ADC0809主要信号引脚的功能说明如下:
IN7~IN0——模拟量输入通道
ALE——地址锁存允许信号。
对应ALE上跳沿,A、B、C地址状态送入地址锁存器中。
START——转换启动信号。
START上升沿时,复位ADC0809;START下降沿时启动芯片,开始进行A/D转换;在A/D转换期间,START应保持低电平。
本信号有时简写为ST.
A、B、C——地址线。
通道端口选择线,A为低地址,C为高地址,引脚图中为ADDA,ADDB和ADDC。
其地址状态与通道对应关系见表9-1。
CLK——时钟信号。
ADC0809的内部没有时钟电路,所需时钟信号由外界提供,因此有时钟信号引脚。
通常使用频率为500KHz的时钟信号
EOC——转换结束信号。
EOC=0,正在进行转换;EOC=1,转换结束。
使用中该状态信号即可作为查询的状态标志,又可作为中断请求信号使用。
D7~D0——数据输出线。
为三态缓冲输出形式,可以和单片机的数据线直接相连。
D0为最低位,D7为最高
OE——输出允许信号。
用于控制三态输出锁存器向单片机输出转换得到的数据。
OE=0,输出数据线呈高阻;OE=1,输出转换得到的数据。
Vcc—— +5V电源。
Vref——参考电源参考电压用来与输入的模拟信号进行比较,作为逐次逼近的基准。
其典型值为+5V(Vref(+)=+5V, Vref(-)=-5V).
图9.8 《ADC0809引脚图》
表9-1 通道选择表
(2) ADC0809与8086的连接
用Y9—Y3做片选信号,A0---A3与0809上的ABC相连接。
D7—D0与8086的D0----D7相连接。
连接后端口分配。
3.4数码管的显示使用
(1)数码管的结构
如上图所示,本次设计中用共阳极数码管,数码管电压为+5v。
7段LED数码管,则在一定形状的绝缘材料上,利用单只LED组合排列成“8”字型的数码管,分别引出它们的电极,点亮相应的点划来显示出0-9的数字。
LED数码管根据LED的接法不同分为共阴和共阳两类,了解LED的这些特性,对编程是很重要的,因为不同类型的数码管,除了它们的硬件电路有差异外,编程方法也是不同的。
右图是共阴和共阳极数码管的内部电路,它们的发光原理是一样的,只是它们的电源极性不同而已。
将多只LED的阴极连在一起即为共阴式,而将多只LED的阳极连在一起即为共阳式。
以共阴式为例,如把阴极接地,在相应段的阳极接上正电源,该段即会发光。
当然,LED 的电流通常较小,一般均需在回路中接上限流电阻。
假如我们将"b"和"c"段接上正电源,其它端接地或悬空,那么"b"和"c"段发光,此时,数码管显示将显示数字“1”。
而将"a"、"b"、"d"、"e"和"g"段都接上正电源,其它引脚悬空,此时数码管将显示“2”。
其它字符的显示原理类同。
四程序介绍4.1程序流程图
4.2 程序模块介绍
4.21 模数转化模块
采用ADC0809将模拟电压信号转化为数字信号,本设计中使用ADC0809中的三路转化通道,即1,2,3通道。
4.22 数字处理模块
将采集的数字信号化为相应的模拟信号形式输出显示出来。
具体地说,就是先将数字量与52比较,若大于52则用公式:A *52/256的商作为输出对应模拟量的第一位,即整数位。
若无则整数位置零。
而第二位,则取上式的余数作为数字量,再用公式求出商和余数,把商作为第二位数字输出,余数为第三位数字准备。
一次原理,可依次求出多位的精确数,本设计中,只取小数点后两位。
4.23 数字输出模块
选用八段数码管,设计中选用的是共阳极的,采用查表法依次查表输出到显示管。
五课程设计心得体会
本次设计中,我深深的感觉到了‘精诚团结’重要性。
这次设计中,我们小组共有四个人,正是我们四个人的紧密合作,我们才能成功的完成这个设计。
有句话说得好:书中自有黄金屋,通过这次设计,我认识了知识的重要性,更加深了自己对知识的理解,对实践的认识。
实践教会了我们学习。
通过在这次设计,我理解了实践的重要性。
通过自己的动手,我学到很多在课堂上没有学到的东西,更加深了自己对课本知识的理解。
比如说8086的各引脚功能,8253的实践应用等。
在设计过程中,我们通过查找资料,分享资料,学习资料,感受到了学习的快乐,学习的无止境性。
附录
附录程序代码
DATAS SEGMENT
DATE DB 0C0H,0F9H,0B4H,0B0H,99H,92H,82H,0F8H,80H,90H,7FH ;共阳DBUF DB 1200 DUP(?) ;此处输入数据段代码
DATAS ENDS
STACKS SEGMENT ;此处输入堆栈段代码
STACKS ENDS
CODES SEGMENT
ASSUME CS:CODES,DS:DATAS,SS:STACKS
MAIN PROC FAR
START:
MOV AX,DATAS
MOV DS,AX ;此处输入代码段代码
LEA SI,DBUF
;8253的初始化
MOV DX,31BH ;DX指向控制字端口
MOV AL,00110101B ;通道0先读低字节,后高字节,方式2,BCD计数OUT DX,AL ;送控制字
MOV DX,318H ;指向通道0端口
MOV AX,5000H ;送计数值
OUT DX,AL
MOV AL,AH
;8255的初始
LLLp:mov dx,0f6h ;指向8255控制字寄存器
mov al,10010000b ;送控制字,A口方式0,输入
out dx,al
mov dx,0f0h ;指向A口
in al,dx ;从A口读入状态
cmp al,7 ;采集输入信号
jz cai1 ;并判断通道
cmp al,6
jz cai2
cmp al,5
jz C5
CMP AL,4
JZ C4
CMP AL,3
JZ C3
CMP AL,2
JZ C2
CMP AL,1
JZ C1
jmp LLLP ;循环,无口工作时
cai1:mov dx,300h ;DX指向ADC通道0,三个口一起工作call CAIJI
CALL XIANSHI
cai2:MOV DX,301H ;DX指向ADC通道1,
CALL CAIJI
CALL XIANSHI
CALL DELLY
MOV DX,302H
CALL CAIJI
CALL XIANSHI
CALL DELLY
JMP LLLP
C5:MOV DX,302H ;DX指向ADC通道2,2,3口一起工作CALL CAIJI
CALL XIANSHI
CALL DELLY
MOV DX,300H
CALL CAIJI
CALL XIANSHI
CALL DELLY
JMP LLLP
C4:MOV DX,302H ;1,3口一起工作
CALL CAIJI
CALL XIANSHI
CALL DELLY
JMP LLLP
C3:mov dx,300h ;3口工作
call CAIJI
CALL XIANSHI
CALL DELLY
MOV DX,301H
CALL CAIJI
CALL XIANSHI
CALL DELLY
JMP LLLP
C2:MOV DX,301H ;2,1口一起工作
CALL CAIJI
CALL XIANSHI
CALL DELLY
JMP LLLP
C1:mov dx,300h ;1口工作
call CAIJI
CALL XIANSHI
CALL DELLY
JMP LLLP
RET
MAIN ENDP
CAIJI PROC NEAR ;模数转换程序,即将模拟量转化为数字量存入计算机中OUT DX,AL ;启动一次转换
PUSH DX
MOV DX,308H ;DX指向状态口
POLL:IN AL,DX ;读入EOC状态
TEST AL,80H
JNZ POLL
NOEND:IN AL,DX
TEST AL,80H
JZ NOEND
POP DX
IN AL,DX
MOV [SI],AL
RET
CAIJI ENDP
XIANSHI PROC NEAR ;显示子程序
MOV AL,[SI] ;传递数模转化的数字
MOV AH,0 ;以下为数模转化的算法
CMP AL,52 ;先判断整数位的有无,有显示,无置零
JB ZERO1
MOV BL,5
MUL BL
MOV BX,256
MOV DX,0
DIV BX
MOV BX,AX
MOV AX,DX
JMP X1
ZERO1:MOV BX,0
X1: ADD DI,BX
MOV BX,AX
MOV AL,[DI]
MOV DX,66H
MOV AL,10000000B
OUT DX,AL
MOV DX,60H
OUT DX,AL
MOV AL,[DI+10] ;第二位恒输入显示小数点
MOV DX,66H
MOV AL,10000000B
OUT DX,AL
MOV DX,62H
OUT DX,AL
MOV AX,BX ;输出小数点后第一位数
CMP AL,52
JB ZERO2
MOV BL,5
MUL BL
MOV BX,256
MOV DX,0
DIV BX
MOV BX,AX
MOV AX,DX
JMP X2
ZERO2:MOV BX,0
X2:ADD DI,BX
MOV BX,AX
MOV AL,[DI]
MOV DX,76H
MOV AL,10000000B
OUT DX,AL
MOV DX,70H
OUT DX,AL
MOV AX,BX
CMP AL,52
JB ZERO3
MOV BL,5
MUL BL
MOV BX,256
MOV DX,0
DIV BX
MOV BX,AX
MOV AX,DX
JMP X3
ZERO3:MOV BX,0 ;输出小数点后第二位数字X3:ADD DI,BX
MOV BX,AX
MOV AL,[DI]
MOV DX,76H
MOV AL,10000000B
OUT DX,AL
MOV DX,72H
OUT DX,AL
RET
XIANSHI ENDP
DELLY PROC NEAR ;延时子程序MOV CX, 0010H
T1:MOV AX, 0010H
T2:DEC AX
JNZ T2
LOOP T1
RET
DELLY ENDP
MOV AH,4CH
INT 21H
CODES ENDS
END START
参考文献
[1] 周荷琴,吴秀清"微型计算机原理与接口技术"中国科学技术大学出版社,2009年6月
[2] 唐瑞庭"微型原理.汇编语言与接口技术"中国水利水电出版社,2006年5月
[3] 李捍东"微机原理与接口技术"重庆大学出版社,2004年10月
[4] 宁飞,王维华,孔宇"微型计算机原理与接口实践"清华大学出版社,2006年12月
[5] 彭虎,周佩玲,傅忠谦"微型计算机原理与接口技术学习指导"电子工业出版社,2008年4月。