基于8086的数字电压表设计.docx
《基于8086的数字电压表设计.docx》由会员分享,可在线阅读,更多相关《基于8086的数字电压表设计.docx(22页珍藏版)》请在冰点文库上搜索。
![基于8086的数字电压表设计.docx](https://file1.bingdoc.com/fileroot1/2023-5/23/3d8bc8c2-d20d-479f-bb35-2ec31805fa1e/3d8bc8c2-d20d-479f-bb35-2ec31805fa1e1.gif)
基于8086的数字电压表设计
《微机原理与接口技术》
课程设计
姓名:
叶阳
学号:
0945531210
班级:
09电信2班
专业:
电子信息工程
学院:
电气与信息工程学院
江苏科技大学张家港校区
2012年6月
基于8086的数字电压表设计
摘要:
数字电压表利用模-数转换原理测量电压值,并以数字形式显示测量结果的仪表。
本课题基于8086系统设计软件程序,采用A/D模数转换芯片0809将采集的模拟量转换为数字量,通过并行接口芯片8255A在数码管上实时显示,并且采用8254和8259A芯片设置采样时间以及产生中断。
关键字:
数字电压表,0809,8255,8259,数码管
1.理论部分
1.1课题要求与内容
课题:
设计数字电压表
课题内容及要求:
1)使用0809芯片,获取电压数据;
2)通过8255A芯片,使数据在数码管上实时显示;
3)使用8254芯片,通过按键设置采样时间,比如60s采集一次;
4)使用8259A芯片,采样时间结束后产生中断,采集电压数据;
附加要求:
使用8251芯片,通过串口在PC机上的串口调试助手显示实时电压信号。
1.2系统方案设计
1.2.1实验器材
表1实验器件
实验器材
名称
数量
备注
PC机
一台
唐都实验箱
一台
使用的芯片
0809
一片
8255
一片
8254
一片
8259
一片
1.2.2实验总体框图:
图1方案设计框图
1.3系统硬件设计
1.3.1所用芯片及原理简介:
1)A/D转换器0809
ADC0809的引脚图如下图所示:
图20809引脚图
ADC0809是双列直插式8位A/D转换芯片,具有8路模拟量输入线,可在程序控制下对任意一路进行A/D转换,得到8位二进制数字量。
ADC0809包括一个8位的逐次逼近型的ADC部分,并提供一个8通道的模拟多路开关和联合寻址逻辑。
用它可以直接输入8个单端的模拟信号,分时进行A/D转换,在多点巡回检测、过程控制等应用领域中使用非常广泛。
ADC0809的主要技术指标为:
分辨率:
8位;单电源:
+5V;
总的不可调误差:
±1LSB;转换时间:
取决于时钟频率
模拟输入范围:
单极性0~5V时钟频率范围:
10KHz~1280KHz
A/D转换方法:
IN0单极性输入电压与转换后数字的关系为:
N=Ui/(Uref/256)
其中Ui为输入电压,Uref为参考电压(+5V)
本设计中电压模拟量从ADC0809的IN0端输入。
2)并行接口芯片8255
8255A的引脚图如下图所示:
图38255A引脚图
8255A是一个40引脚的双列直插式并行接口芯片。
8255芯片内部有3个8位的输入输出端口,即A口,B口和C口。
从内部控制角度来讲,可分为两组:
A组和B组;A组控制模块管理A口和C口的高四位,B组控制模块管理B口和C口的第四位。
8255的三种工作方式:
方式0:
基本输入输出方式;
方式1:
选通型输入输出方式;
方式2:
双向数据传送方式。
本设计中使用8255端口A输出LED数码管的位选信号和端口B输出段码信号
用于控制数码管对电压值的显示。
3)定时计数芯片8254:
8254芯片的引脚图如下图所示:
图48254引脚图
8254芯片是一款使用十分广泛的可编程定时,计数芯片,其主要功能是定时和计数的功能。
8254芯片主要由四部分组成:
1.数据总线缓冲器;2.读写逻辑;3.控制字寄存器;4.计数器;
8254的工作方式:
方式0:
计数到0结束输出正跃变信号方式;
方式1:
硬件可重触发单稳方式;
方式2:
频率发生器方式;
方式3:
方波发生器;
方式4:
软件触发选通方式;
方式5:
硬件触发选通方式。
4)中断控制芯片8259A:
8259A的引脚图如下图所示:
图58259A引脚图
8259A是为了进行中断控制而设计的芯片,它是可以用程序控制的中断控制器。
单个的8259A能管理8级向量优先级中断。
在不增加其他电路的情况下,最多可以级联成64级的向量优级中断系统。
8259A有多种工作方式,能用于各种系统。
各种工作方式的设定是在初始化时通过软件进行的。
在总线控制器的控制下,8259A芯片可以处于编程状态和操作状态,编程状态是CPU使用IN或OUT指令对8259A芯片进行初始化编程的状态。
5)8段LED数码管:
表2:
共阴极数码管字形代码
显示字形
g
f
e
d
c
b
a
段码
0
0
1
1
1
1
1
1
3fh
1
0
0
0
0
1
1
0
06h
2
1
0
1
1
0
1
1
5bh
3
1
0
0
1
1
1
1
4fh
4
1
1
0
0
1
1
0
66h
5
1
1
0
1
1
0
1
6dh
6
1
1
1
1
1
0
1
7dh
7
0
0
0
0
1
1
1
07h
8
1
1
1
1
1
1
1
7fh
9
1
1
0
1
1
1
1
6fh
本设计用2位8段LED数码管分别显示电压值(电位器模拟电压)的十位和个位部分。
1.3.2分部原理图片:
A/D转换模块0809:
图6A/D转换模块
并行接口模块8255:
图7并行接口8255模块
设置采样时间模块8253:
图8采样时间模块8253
设置中断模块8259:
图9设置中断模块8259
1.4系统软件设计
1.4.1A/D转换部分
图10A/D模数转换部分
1.4.28254和8259模块
图118254和8259部分
1.4.3中断程序
图12中断部分
2.实践部分
2.1系统硬件原理简介
硬件设计总图如下图:
图13硬件原理总图
2.2系统硬件调试中出现的问题及解决措施
2.2.18254计数器模块
在调试中把计数器1输出连接至LED灯(检验能否进入中断程序)时,灯并未出现闪烁而是持续低电平,检查程序发现,端口存储器未改动。
修改后又持续高电平,还是未见闪烁,经过田老师检查发现电路接线错误,后改正能使灯闪即可以进入中断。
2.2.20809AD转换及8255显示模块
在调试过程中将电位器的ADJ端接到0809的IN0口作为模拟信号输入,但是调节旋钮发现产生的数字信号没有任何变化,然后我们尝试用以前微机接口实验的程序控制0809还是没有任何变化,初步认为是电位器损坏无法使用,换过数次试验台后能显示00——FF的电压变化。
2.3系统软件
2.3.1软件设计
程序如下:
IOY0EQU3000H;片选IOY0对应的端口始地址
IOY1EQU3040H;片选IOY0对应的端口始地址
AD0809EQUIOY1;AD0809的端口地址
MY8255_AEQUIOY0+00H*4;8255的A口地址
MY8255_BEQUIOY0+01H*4;8255的B口地址
MY8255_CEQUIOY0+02H*4;8255的C口地址
MY8255_MODEEQUIOY0+03H*4;8255的控制寄存器地址
IOY2EQU3080H;片选IOY0对应的端口始地址
MY8254_COUNT0EQUIOY2+00H*4;8254计数器0端口地址
MY8254_COUNT1EQUIOY2+01H*4;8254计数器1端口地址
MY8254_COUNT2EQUIOY2+02H*4;8254计数器2端口地址
MY8254_MODEEQUIOY2+03H*4;8254控制寄存器端口地址
IOY3EQU30C0H;片选IOY0对应的端口始地址
MY8259_ICW1EQUIOY3+00H;实验系统中8259的ICW1端口地址
MY8259_ICW2EQUIOY3+04H;实验系统中8259的ICW2端口地址
MY8259_ICW3EQUIOY3+04H;实验系统中8259的ICW3端口地址
MY8259_ICW4EQUIOY3+04H;实验系统中8259的ICW4端口地址
MY8259_OCW1EQUIOY3+04H;实验系统中8259的OCW1端口地址
MY8259_OCW2EQUIOY3+00H;实验系统中8259的OCW2端口地址
MY8259_OCW3EQUIOY3+00H;实验系统中8259的OCW3端口地址
INTR_IVADDEQU01C8H;INTR对应的中断矢量地址
INTR_OCW1EQU0A1H;INTR对应PC机内部8259的OCW1地址
INTR_OCW2EQU0A0H;INTR对应PC机内部8259的OCW2地址
INTR_IMEQU0FBH;INTR对应的中断屏蔽字
STACK1SEGMENTSTACK
DB256DUP(?
)
STACK1ENDS
DATASEGMENT
DB3FH,06H,5BH,4FH,66H,6DH,7DH,07H,7FH,6FH,77H,7CH,39H,5EH,79H,71H
CUNDB256DUP(?
)
MESDB'Pressnumbertosetinterrupttime!
',0AH,0DH,0AH,0DH,'$'
STR1DB'AD0809:
IN0$';定义显示的字符串
BUFFEDB2DUP(?
)
CS_BAKDW?
;保存INTR原中断处理程序入口段地址的变量
IP_BAKDW?
;保存INTR原中断处理程序入口偏移地址的变量
IM_BAKDB?
;保存INTR原中断屏蔽字的变量
DATAENDS
CODESEGMENT
ASSUMECS:
CODE,DS:
DATA
START:
MOVAX,DATA
MOVDS,AX
MOVSI,OFFSETCUN
CALLMY_8259
CALLMY_8254
CALLMY_0809
QUERY:
CALLDISPLAY1
MOVAH,1;判断是否有按键按下
INT16H
JNZQUIT;有按键则退出
MOVDX,MY8259_OCW3;向8259的OCW3发送查询命令
MOVAL,0CH
OUTDX,AL
INAL,DX;读出查询字
TESTAL,80H;判断中断是否已响应
JZQUERY;没有响应则继续查询
CALLMY_8254
CALLMY_0809
CALLDISPLAY1
CALLMY_8259
JMPQUERY
QUIT:
MOVAX,4C00H;结束程序退出
INT21H
;***********************************8254*******************************
;*********************************************************************
MY_8254PROCNEAR
MOVDX,MY8254_MODE;初始化8254工作方式
MOVAL,0B6H;计数器2,方式3
OUTDX,AL
MOVDX,MY8254_COUNT2;装入计数初值
MOVAL,64H;100分频
OUTDX,AL
MOVAL,00H
OUTDX,AL
MOVDX,MY8254_MODE;初始化8254工作方式
MOVAL,36H;计数器0,方式3
OUTDX,AL
MOVDX,MY8254_COUNT0;装入计数初值
MOVAL,00H;18432分频
OUTDX,AL
MOVAL,48H
OUTDX,AL
MOVDX,MY8254_MODE;初始化8254工作方式
MOVAL,74H;计数器1,方式0
OUTDX,AL
MOVAH,09H
MOVDX,OFFSETMES
INT21H
MOVAH,01H
INT21H
SUBAL,30H
MOVBL,0AH
MULBL
MOV[SI],AL
MOVAH,01H
INT21H
SUBAL,30H
MOVBL,[SI]
ADDAL,BL
MOVDX,MY8254_COUNT1;装入计数初值
;MOVAL,02H;计数2秒
OUTDX,AL
MOVAL,00H
OUTDX,AL
RET
MY_8254ENDP
;**************************8259********************************
;**************************************************************
MY_8259PROCNEAR
MOVDX,MY8259_ICW1;初始化实验系统中8259的ICW1
MOVAL,13H;边沿触发、单片8259、需要ICW4
OUTDX,AL
MOVDX,MY8259_ICW2;初始化实验系统中8259的ICW2
MOVAL,08H
OUTDX,AL
MOVDX,MY8259_ICW4;初始化实验系统中8259的ICW4
MOVAL,01H;非自动结束EOI
OUTDX,AL
MOVDX,MY8259_OCW1;初始化实验系统中8259的OCW1
MOVAL,0FCH;打开IR0和IR1的屏蔽位
OUTDX,AL
RET
MY_8259ENDP
;*************************0809**************************
;FUNCTION:
;NAME:
;*******************************************************
MY_0809PROCNEAR;采样
PUSHDX
PUSHCX
PUSHAX
MOVDX,AD0809;启动A/D转换
OUTDX,AL
CALLDALLY
MOVDX,OFFSETSTR1;显示字符串AD0809:
IN0
MOVAH,9
INT21H
MOVDX,AD0809;读A/D转换结果
INAL,DX
MOVCH,AL;分析结果进行显示
ANDAL,0F0H
MOVCL,04H
SHRAL,CL;取出数据的十位
MOVBUFFE,AL
CMPAL,09H
JGA1
ADDAL,30H
JMPA2
A1:
ADDAL,37H;对A~F的处理
A2:
MOVDL,AL;对0~9的处理
MOVAH,02H
INT21H
MOVAL,BUFFE
MOVBX,OFFSETDATA
XLAT
MOV[SI],AL
MOVAL,CH
ANDAL,0FH;取出数据的各位
MOVBUFFE,AL
CMPAL,09H
JGA3
ADDAL,30H
JMPA4
A3:
ADDAL,37H;对A~F的处理
A4:
MOVDL,AL;对0~9的处理
MOVAH,02H
INT21H
MOVAL,BUFFE
MOVBX,OFFSETDATA
XLAT
INCSI
MOV[SI],AL
POPAX
POPCX
POPDX
RET
MY_0809ENDP
;**************************DISPLAY1**********************
;*********************************************************
DISPLAY1PROCNEAR
PUSHAX
PUSHDX
MOVDX,MY8255_MODE;初始化8255工作方式
MOVAL,81H;方式0,A口、B口输出,C口低4位输入
OUTDX,AL
MOVAL,[SI]
MOVDX,MY8255_B
OUTDX,AL
MOVAL,01H
MOVDX,MY8255_A
OUTDX,AL
CALLDALLY
DECSI
MOVAL,[SI]
MOVDX,MY8255_B
OUTDX,AL
MOVAL,02H
MOVDX,MY8255_A
OUTDX,AL
CALLDALLY
INCSI
POPDX
POPAX
DISPLAY1ENDP
;**********************DELLY**************************
;FUNCTION:
;NAME:
;*****************************************************
DALLYPROCNEAR;软件延时子程序
PUSHCX
PUSHAX
MOVCX,4000H
D1:
MOVAX,0300H
D2:
DECAX
JNZD2
LOOPD1
POPAX
POPCX
RET
DALLYENDP
CODEENDS
ENDSTART
3.课程设计心得
本次设计基本完成了课题要求,但仍具有一些不足之处。
首先未将电位器值转换为电压值显示,即将两位的电阻值转换成为三位的电压值(一位整数部分,两位小数部分)。
其次,考虑到数码管和矩阵按键已经复用,并未使用试验箱上的矩阵按键,而改用的DOS系统功能调用,采用电脑键盘输入。
最后,对课题的附加部分因为专业知识不足也未能很好完成,而是采用在电脑CMD窗口中跟踪显示实时电压值。
通过本次课程设计,我获益良多,对微机接口这门课程和8086系统有了更深入的了解,掌握了如何使用汇编语言编写程序实现软硬件的结合,达到课题要求。
4.附录
附录1:
参考文献:
【1】陈红卫主编.2009.微型计算机基本原理与接口技术(第二版)[M].北京:
科学出版社
【2】西安唐都科教仪器公司编著32位微机原理与接口技术实验教程
【3】樊昌信,曹丽娜编著.2010.通信原理(第六版)[M].北京:
国防工业出版社