微机原理课程设计 简单数字电压表的设计Word文档格式.docx
《微机原理课程设计 简单数字电压表的设计Word文档格式.docx》由会员分享,可在线阅读,更多相关《微机原理课程设计 简单数字电压表的设计Word文档格式.docx(17页珍藏版)》请在冰豆网上搜索。
根据A/D器上DS4~DS1端的位选信号,控制显示部分个、十、百、千位哪一位上进行显示。
3系统硬件设计
本电路采用模块化设计,主要由A/D转换模块、控制模块和LED显示模块组成(如图1.0)。
控制模块
LED显示模块
A/D转换模块
图2系统总体硬件框图
设计的基本思想和顺序
利用0809采集电压数据,将模拟电压信号数字电压信号。
8255通过I/O控制两位数码管显示采集电压值。
8254设置采样频率。
8359设置中断。
基本思路:
当到定时时间时产生中断信号,进入中断采集电压数据。
采集的数据转化后保存到内存空间里,返回主程序后在数码管上显示。
二实践部分
(一)系统硬件原理简介
1模数(A/D)转换器ADC0809
1.1概述
ADC0809是采样分辨率为8位的、以逐次逼近原理进行模—数转换的器件。
其内部有一个8通道多路开关,它可以根据地址码锁存译码后的信号,只选通8路模拟输入信号中的一个进行A/D转换。
1.2主要特性
1)8路输入通道,8位A/D转换器,即分辨率为8位。
2)具有转换起停控制端。
3)转换时间为100μs
4)单个+5V电源供电
5)模拟输入电压范围0~+5V,不需零点和满刻度校准。
6)工作温度范围为-40~+85摄氏度
7)低功耗,约15mW。
图3ADC0809引脚图
2可编程中断控制器8259A
2.1概述
8259A是专门为了对8085A和8086/8088进行中断控制而设计的芯片,它是可以用程序控制的中断控制器。
单个的8259A能管理8级向量优先级中断。
在不增加其他电路的情况下,最多可以级联成64级的向量优先级中断系统。
8259A有多种工作方式,能用于各种系统。
各种工作方式的设定是在初始化时通过软件进行的。
在总线控制器的控制下,8259A芯片可以处于编程状态和操作状态.编程状态是CPU使用IN或OUT指令对8259A芯片进行初始化编程的状态
2.28259A引脚图
图48259A引脚图
2.3主要功能
在有多个中断源的系统中,接受外部的中断请求,并进行判断,选中当前优先级最高的中断请求,再将此请求送到CPU的INTR端;
当CPU响应中断并进入中断子程序的处理过程后,中断控制器仍负责对外部中断请求的管理。
3并行接口8255A
3.1概述
Intel8086/8088系列的可编程外设接口电路(ProgrammablePeripheralInterface)简称PPI,型号为8255(改进型为8255A及8255A-5),具有24条输入/输出引脚、可编程的通用并行输入/输出接口电路。
它是一片使用单一+5V电源的40脚双列直插式大规模集成电路。
8255A的通用性强,使用灵活,通过它CPU可直接与外设相连接。
3.28255A工作方式
●方式0:
基本输入输出方式
适用于无条件传送和查询方式的接口电路
●方式1:
选通输入输出方式
适用于查询和中断方式的接口电路
●方式2:
双向选通传送方式
适用于与双向传送数据的外设
3.38255A引脚图
图58255A引脚图
4数码管
4.1数码管结构图
(a)七段式LED(b)共阳极LED(c)共阴极LED
图6七段式LED显示部件
数码管按段数分为七段数码管和八段数码管,八段数码管比七段数码管多一个发光二极管单元(多一个小数点显示);
按能显示多少个“8”可分为1位、2位、4位等等数码管;
按发光二极管单元连接方式分为共阳极数码管和共阴极数码管。
共阳数码管是指将所有发光二极管的阳极接到一起形成公共阳极(COM)的数码管。
共阳数码管在应用时应将公共极COM接到+5V,当某一字段发光二极管的阴极为低电平时,相应字段就点亮。
当某一字段的阴极为高电平时,相应字段就不亮。
共阴数码管是指将所有发光二极管的阴极接到一起形成公共阴极(COM)的数码管。
共阴数码管在应用时应将公共极COM接到地线GND上,当某一字段发光二极管的阳极为高电平时,相应字段就点亮。
当某一字段的阳极为低电平时,相应字段就不亮。
5计数器Intel8254
5.1概述
8254芯片是一款使用十分广泛的可编程定时,计数芯片,其主要功能是定时和计数的功能。
是8253的改进型,比8253具有更优良的性能。
与大多数微处理器兼容;
技术频率从支流到10MHz;
有6种可编程计数器方式;
3个独立的16位计数器,二进制或十进制(BCD)计数;
任一引脚对地电压-0.5~7V.
5.2Intel8254的引脚图与逻辑引脚图
图78254的引脚图
对8254的编程通常只需注意两点:
先写控制字,再写计数初值;
计数初值必须遵循控制字中设定的格式(只有低字节或只有高字节或者先低后高,由RW1,RW0规定)。
只有当CPU向8254控制字寄存器写入控制字后,即对其初始化之后,8254才能正常地工作。
写入控制字后,所有控制逻辑电路将立即复位,输出端OUT立即进入初始状态。
接着向计数器的计数初值寄存器中写计数初值,在写入初值后,需要经过一个时钟脉冲后,计数器才开始在脉冲下降沿进行减1计数。
通常在时钟脉冲的上升沿时,门控信号GATE被采样。
当A1,A0=11时,控制字寄存器被选择,控制字寄存器中的SC1,SC0则决定着(0~2)计数器中哪个会被选中以写计数初值。
2系统硬件调试中出现的问题及解决措施
实验中,在连接总电路之前我们运用实验系统提供的实验程序将实验箱各个模块芯片检查了一遍.确定各个芯片和电位器能够正常工作之后开始连接总的电路.
(1)连接好电路图后运行程序数码管显示不太稳定.
重新检查电路,发现有些导线接触不良甚至损坏,更换损坏导线重新运行程序直至数码管显示稳定.
(2)连接好电路后发现调节电位器数码管显示不改变。
首先检查整个电路,发现电路正常;
转而检查程序是否有问题,发现有个子程序参数设置错误,设置了错误的终端屏蔽端口。
纠正之后重新连接中断部分电路之后运行程序,发现当调节电位器之后,在一个计数周期之后,数码管的显示值会变化电路正常。
3系统软件
3.1软件设计
1、整个程序源代码包括定义数据段,定义代码段、子程序及主程序内容。
子程序中包括延时子程序、中断服务子程序及8259A初始化主程序。
2、A/D转换器从启动转换到转换结束需要一定时间。
为了得到正确的转换结果,必须在转换结束之后才能去读取数字量,这就是时间配合。
常用三种方法实现时间配合,有:
延时等待法、查询法和中断法。
中断法是当ADC转换结束,用转换结束信号作为中断请求信号向CPU提出中断请求,CPU相应中断,在中断服务子程序中读取转换结果。
3、此次设计中我使用的是中断法。
将ADC0809的转换结束指示引脚EOC输出信号作为中断请求信号,送中断控制器8259A,占用一个终端类型号n,在中断服务程序里读取转换结果。
4、A/D转换中IN0单极性输入电压与转换后数字的关系为N=(输入电压/参考电压)*256
5、经过A/D转换后的数字量是八位二进制数,通过以下程序转换为原始电压值
MOVBL,0C4H;
乘以5/256*10000=196
MULBL;
AX=AL*BL,得16位结果
PUSHAX;
压栈,存入结果
MOVBX,0001H
POPAX
MULBX;
将AX扩展为32位,结果在DX:
AX中
MOVBX,64H;
100
DIVBX;
DX:
AX/BX,得32位,商在AX中,余数在DX中
DIVBL;
AX/BL,得16位,商在AL中,余数在AH中
MOV[SI],AL;
整数部分,结果放进NUM
MOVSI,OFFSETNUM;
段码地址,指向七段码表
MOVAL,AH
MOVAH,00H
MOVBL,0AH
DIVBL;
再除10
MOV[SI+1],AL;
AL中为小数点后第一位
MOV[SI+2],AH;
AH中为小数点后第二位
6、通过8255A输出在三位LED数码管上,程序如下:
(后两位同理)
MOVAL,[SI]
MOVDI,OFFSETLEDDMAP;
段码地址,查表,显示第一位包括小数点
MOVAH,0
ADDDI,AX
MOVAL,[DI]
MOVDX,PORTA
OUTDX,AL
MOVDX,PORTC;
位选
MOVAL,00000100B
OUTDX,AL;
选通第一位数码管,整数位
CALLDELAY
总程序见附录一
3.2软件调试中出现的问题及解决措施
(1)编写程序时候有细微语法错误,结合运行时软件纠错提示,发现并改正;
(2)部分子程序未达到设定要求,无法产生想要的结果;
整理思路,重新构思程序的设计,与他人交流,修改程序。
(3)编写好的程序没有实现要求的全部功能,无法实现通过按键设置采样时间,只能在程序里面事先设置好采样时间,不可以用小键盘设置并显示。
最后,由于时间和精力问题,此功能未能得以实现。
总结:
通过本次课程设计,使我们加深了对微机接口技术这一门课程的理解,在思路的构思,方案的设定、动手操作方面都有较大的提升。
还增强了我们的团队协作能力。
还有,能够熟练的运用TD-PIT++这个软件来调试运行已编号的程序和调节实验箱。
更重要的是通过这次课程设计,使我们能够熟练理解书本上所学的代码并运用到电路的设计中去。
这就是理论与实践的转变。
三附录
附录1参考程序清单
;
T0809.asm
A/D转换实验
IOY0EQU3000H;
片选IOY0对应的端口始地址
IOY1EQU3040H;
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;
MY8254_COUNT0EQUIOY2+00H*4;
8254计数器0端口地址
MY8254_COUNT1EQUIOY2+01H*4;
8254计数器1端口地址
MY8254_COUNT2EQUIOY2+02H*4;
8254计数器2端口地址
MY8254_MODEEQUIOY2+03H*4;
8254控制寄存器端口地址
IOY3EQU30C0H;
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对应的中断屏蔽字
STACK1SEGMENTSTACKDB256DUP(?
)
STACK1ENDS
DATASEGMENTDB3FH,06H,5BH,4FH,66H,6DH,7DH,07H,7FH,6FH,77H,
7CH,39H,5EH,79H,71H
CUNDB256DUP(?
MESDB'
Pressnumbertosetinterrupttime!
'
0AH,0DH,0AH,0DH,'
$'
CS_BAKDW?
;
保存INTR原中断处理程序入口段地址的变量
IP_BAKDW?
保存INTR原中断处理程序入口偏移地址的变量
IM_BAKDB?
保存INTR原中断屏蔽字的变量
DATAENDS
CODESEGMENT
ASSUMECS:
CODE,DS:
DATA
START:
MOVAX,DATA
MOVDS,AX
MOVSI,OFFSETCUN
CALLMY_8259;
初始化8259,完成设置
CALLMY_8254
CALLMY_0809;
第一次采集电压
QUERY:
CALLDISPLAY1;
显示电压
MOVAH,1;
判断是否有按键按下
INT16H
JNZQUIT;
有按键则退出
MOVDX,MY8259_OCW3;
向8259的OCW3发送查询命令
MOVAL,0CH
INAL,DX;
读出查询字
TESTAL,80H;
判断中断是否已响应
JZQUERY;
没有响应则继续查询
CALLMY_0809
CALLDISPLAY1
CALLMY_8259
JMPQUERY
QUIT:
MOVAX,4C00H;
结束程序退出
INT21H
MY_8254PROCNEAR
MOVDX,MY8254_MODE;
初始化8254工作方式
MOVAL,0B6H;
计数器2,方式3
OUTDX,AL
MOVDX,MY8254_COUNT2;
装入计数初值
MOVAL,64H;
100分频
MOVAL,00H
MOVAL,36H;
计数器0,方式3
MOVDX,MY8254_COUNT0;
MOVAL,00H;
18432分频
MOVAL,48H
MOVAL,74H;
计数器1,方式0
MOVDX,MY8254_COUNT1;
MOVAH,01H
INT21H
SUBAL,30H
MOVAL,08H;
计数8秒
RET
MY_8254ENDP
MY_8259PROCNEAR
MOVDX,MY8259_ICW1;
初始化实验系统中8259的ICW1
MOVAL,13H;
边沿触发、单片8259、需要ICW4
MOVDX,MY8259_ICW2;
初始化实验系统中8259的ICW2
MOVAL,08H
MOVDX,MY8259_ICW4;
初始化实验系统中8259的ICW4
MOVAL,01H;
非自动结束EOI
MOVDX,MY8259_OCW1;
初始化实验系统中8259的OCW1
MOVAL,0FEH;
打开IR0屏蔽位
MY_8259ENDP
MY_0809PROCNEAR;
采样
PUSHDX
PUSHCX
PUSHAX
MOVDX,AD0809;
启动A/D转换
CALLDALLY
读A/D转换结果
INAL,DX
MOVCH,AL;
分析结果进行显示
ANDAL,0F0H
MOVCL,04H
SHRAL,CL;
取出数据的十位
MOVBX,OFFSETDATA
XLAT
MOV[SI],AL
MOVAL,CH
ANDAL,0FH;
取出数据的各位
INCSI
MOV[SI],AL
POPCX
POPDX
MY_0809ENDP
DISPLAY1PROCNEAR
PUSHAX
MOVDX,MY8255_MODE;
初始化8255工作方式
MOVAL,81H;
方式0,A口、B口输出,C口低4位输入
MOVAL,[SI]
MOVDX,MY8255_B
MOVAL,02H
MOVDX,MY8255_A
DECSI
MOVAL,01H
MOVDX,MY8255_A
DISPLAY1ENDP
DALLYPROCNEAR;
软件延时子程序
MOVCX,4000H
D1:
MOVAX,0300H
D2:
DECAX
JNZD2
LOOPD1
DALLYENDP
CODEENDS
ENDSTART
附录2:
电路连接实物图
图8电路接线实物图
图9电路接线实物图
附录3:
仿真电路图
图10软件仿真图