《微机原理与接口技术》
课程设计
姓名: 黄涛
学号: 0945531222
班级: 09电信2班
专业: 电子信息工程
学院: 电气与信息工程学院
江苏科技大学张家港校区
20##年6月
目 录
一理论部分. 2
1课题要求与内容. 2
2 系统方案设计. 2
3 系统硬件的设计. 3
二实践部分. 4
1 系统硬件原理简介. 4
2 系统硬件调试中出现的问题及解决措施. 8
3 系统软件. 8
3.1 软件设计. 8
3.2软件调试中出现的问题及解决措施. 10
三附录. 11
数字电压表的设计
一 理论部分
1 课题要求与内容
基本要求:
(1) 使用AD0809获取电压数据。
(2) 数据在数码管上面实时显示。
(3) 通过按键设置采样时间,比如60秒采集一次。
(4) 采样时间计时结束后产生中断,采集电压数据。
附加要求:
(1) 通过串口在PC上的串口调试助手显示实时电压信号。
2 系统方案设计
本电路采用模块化设计,主要由A/D转换模块、控制模块和LED显示模块组成.
图 1 数字电压表原理框图
框图功能说明
基准电源:提供A/D转换参考电压,基准电压的精度和稳定性是影响转换精度的主要因素。
A/D电路:A/D转换器是数字电压表的核心部件,由它完成模拟量转换为数字量的任务。
译码驱动电路:将二--十进制(BCD)码转换成七段供LED发光显示信号。
显示电路:将译码器输出的七段信号进行数字显示,即A/D转换结果。
积分RC元件:通过对RC元件的选取,控制测量量程。
字位驱动电路:根据A/D器上DS4~DS1端的位选信号,控制显示部分个、十、百、千位哪一位上进行显示。
3 系统硬件设计
本电路采用模块化设计,主要由A/D转换模块、控制模块和LED显示模块组成(如图1.0)。
图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。
图3 ADC0809引脚图
2 可编程中断控制器8259A
2.1 概述
8259A是专门为了对8085A和8086/8088进行中断控制而设计的芯片,它是可以用程序控制的中断控制器。单个的8259A能管理8级向量优先级中断。在不增加其他电路的情况下,最多可以级联成64级的向量优先级中断系统。8259A有多种工作方式,能用于各种系统。各种工作方式的设定是在初始化时通过软件进行的。 在总线控制器的控制下,8259A芯片可以处于编程状态和操作状态.编程状态是CPU使用IN或OUT指令对8259A芯片进行初始化编程的状态
2.2 8259A引脚图
图4 8259A引脚图
2.3 主要功能
在有多个中断源的系统中,接受外部的中断请求,并进行判断,选中当前优先级最高的中断请求,再将此请求送到CPU的INTR端;当CPU响应中断并进入中断子程序的处理过程后,中断控制器仍负责对外部中断请求的管理。
3 并行接口8255A
3.1 概述
Intel 8086/8088 系列的可编程外设接口电路(Programmable Peripheral Interface)简称 PPI,型号为8255(改进型为8255A及8255A-5),具有24条输入/输出引脚、可编程的通用并行输入/输出接口电路。它是一片使用单一+5V电源的40脚双列直插式大规模集成电路。8255A的通用性强,使用灵活,通过它CPU可直接与外设相连接。
3.2 8255A工作方式
l 方式0:基本输入输出方式
适用于无条件传送和查询方式的接口电路
l 方式1:选通输入输出方式
适用于查询和中断方式的接口电路
l 方式2:双向选通传送方式
适用于与双向传送数据的外设
适用于查询和中断方式的接口电路
3.3 8255A引脚图
图5 8255A引脚图
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.2 Intel8254的引脚图与逻辑引脚图
图7 8254的引脚图
对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转换后的数字量是八位二进制数,通过以下程序转换为原始电压值
MOV BL,0C4H ;乘以5/256*10000=196
MUL BL ;AX=AL*BL,得16位结果
PUSH AX ;压栈,存入结果
MOV BX,0001H
POP AX
MUL BX ;将AX扩展为32位,结果在DX:AX中
MOV BX,64H ;100
DIV BX ;DX:AX/BX,得32位,商在AX中,余数在DX中
DIV BL ;AX/BL,得16位,商在AL中,余数在AH中
MOV [SI],AL ;整数部分,结果放进NUM
MOV SI,OFFSET NUM ;段码地址,指向七段码表
MOV AL,AH
MOV AH,00H
MOV BL,0AH
DIV BL;再除10
MOV [SI+1],AL ;AL中为小数点后第一位
MOV [SI+2],AH ;AH中为小数点后第二位
6、通过8255A输出在三位LED数码管上,程序如下:(后两位同理)
MOV AL,[SI]
MOV DI,OFFSET LEDDMAP ;段码地址,查表,显示第一位包括小数点
MOV AH,0
ADD DI,AX
MOV AL,[DI]
MOV DX,PORTA
OUT DX,AL
MOV DX,PORTC ;位选
MOV AL,00000100B
OUT DX,AL ;选通第一位数码管,整数位
CALL DELAY
总程序见附录一
3.2 软件调试中出现的问题及解决措施
(1)编写程序时候有细微语法错误,结合运行时软件纠错提示,发现并改正;
(2)部分子程序未达到设定要求,无法产生想要的结果;
整理思路,重新构思程序的设计,与他人交流,修改程序。
(3) 编写好的程序没有实现要求的全部功能,无法实现通过按键设置采样时间,只能在程序里面事先设置好采样时间,不可以用小键盘设置并显示。
最后,由于时间和精力问题,此功能未能得以实现。
总结:
通过本次课程设计,使我们加深了对微机接口技术这一门课程的理解,在思路的构思,方案的设定、动手操作方面都有较大的提升。还增强了我们的团队协作能力。还有,能够熟练的运用TD-PIT++这个软件来调试运行已编号的程序和调节实验箱。更重要的是通过这次课程设计,使我们能够熟练理解书本上所学的代码并运用到电路的设计中去。这就是理论与实践的转变。
三 附录
附录1 参考程序清单
;T0809.asm
;A/D转换实验
IOY0 EQU 3000H ;片选IOY0对应的端口始地址
IOY1 EQU 3040H ;片选IOY0对应的端口始地址
AD0809 EQU IOY1 ;AD0809的端口地址
MY8255_A EQU IOY0+00H*4 ;8255的A口地址
MY8255_B EQU IOY0+01H*4 ;8255的B口地址
MY8255_C EQU IOY0+02H*4 ;8255的C口地址
MY8255_MODE EQU IOY0+03H*4 ;8255的控制寄存器地址
IOY2 EQU 3080H ;片选IOY0对应的端口始地址
MY8254_COUNT0 EQU IOY2+00H*4 ;8254计数器0端口地址
MY8254_COUNT1 EQU IOY2+01H*4 ;8254计数器1端口地址
MY8254_COUNT2 EQU IOY2+02H*4 ;8254计数器2端口地址
MY8254_MODE EQU IOY2+03H*4 ;8254控制寄存器端口地址
IOY3 EQU 30C0H ;片选IOY0对应的端口始地址
MY8259_ICW1 EQU IOY3+00H ;实验系统中8259的ICW1端口地址
MY8259_ICW2 EQU IOY3+04H ;实验系统中8259的ICW2端口地址
MY8259_ICW3 EQU IOY3+04H ;实验系统中8259的ICW3端口地址
MY8259_ICW4 EQU IOY3+04H ;实验系统中8259的ICW4端口地址
MY8259_OCW1 EQU IOY3+04H ;实验系统中8259的OCW1端口地址
MY8259_OCW2 EQU IOY3+00H ;实验系统中8259的OCW2端口地址
MY8259_OCW3 EQU IOY3+00H ;实验系统中8259的OCW3端口地址
INTR_IVADD EQU 01C8H ;INTR对应的中断矢量地址
INTR_OCW1 EQU 0A1H ;INTR对应PC机内部8259的OCW1地址
INTR_OCW2 EQU 0A0H ;INTR对应PC机内部8259的OCW2地址
INTR_IM EQU 0FBH ;INTR对应的中断屏蔽字
STACK1 SEGMENT STACK DB 256 DUP(?)
STACK1 ENDS
DATA SEGMENT DB 3FH,06H,5BH,4FH,66H,6DH,7DH,07H,7FH,6FH,77H,
7CH,39H,5EH,79H,71H
CUN DB 256 DUP(?)
MES DB 'Press number to set interrupt time!',0AH,0DH,0AH,0DH,'$'
CS_BAK DW ? ;保存INTR原中断处理程序入口段地址的变量
IP_BAK DW ? ;保存INTR原中断处理程序入口偏移地址的变量
IM_BAK DB ? ;保存INTR原中断屏蔽字的变量
DATA ENDS
CODE SEGMENT
ASSUME CS:CODE,DS:DATA
START: MOV AX,DATA
MOV DS,AX
MOV SI,OFFSET CUN
CALL MY_8259 ;初始化8259,完成设置
CALL MY_8254
CALL MY_0809 ;第一次采集电压
QUERY: CALL DISPLAY1 ;显示电压
MOV AH,1 ;判断是否有按键按下
INT 16H
JNZ QUIT ;有按键则退出
MOV DX,MY8259_OCW3 ;向8259的OCW3发送查询命令
MOV AL,0CH
OUT DX,AL
IN AL,DX ;读出查询字
TEST AL,80H ;判断中断是否已响应
JZ QUERY ;没有响应则继续查询
CALL MY_0809
CALL DISPLAY1
CALL MY_8259
JMP QUERY
QUIT: MOV AX,4C00H ;结束程序退出
INT 21H
MY_8254 PROC NEAR
MOV DX,MY8254_MODE ;初始化8254工作方式
MOV AL,0B6H ;计数器2,方式3
OUT DX,AL
MOV DX,MY8254_COUNT2 ;装入计数初值
MOV AL,64H ;100分频
OUT DX,AL
MOV AL,00H
OUT DX,AL
MOV DX,MY8254_MODE ;初始化8254工作方式
MOV AL,36H ;计数器0,方式3
OUT DX,AL
MOV DX,MY8254_COUNT0 ;装入计数初值
MOV AL,00H ;18432分频
OUT DX,AL
MOV AL,48H
OUT DX,AL
MOV DX,MY8254_MODE ;初始化8254工作方式
MOV AL,74H ;计数器1,方式0
OUT DX,AL
MOV DX,MY8254_COUNT1 ;装入计数初值
; MOV AH,01H
;INT 21H
;SUB AL,30H
MOV AL,08H ;计数8秒
OUT DX,AL
MOV AL,00H
OUT DX,AL
RET
MY_8254 ENDP
MY_8259 PROC NEAR
MOV DX,MY8259_ICW1 ;初始化实验系统中8259的ICW1
MOV AL,13H ;边沿触发、单片8259、需要ICW4
OUT DX,AL
MOV DX,MY8259_ICW2 ;初始化实验系统中8259的ICW2
MOV AL,08H
OUT DX,AL
MOV DX,MY8259_ICW4 ;初始化实验系统中8259的ICW4
MOV AL,01H ;非自动结束EOI
OUT DX,AL
MOV DX,MY8259_OCW1 ;初始化实验系统中8259的OCW1
MOV AL,0FEH ;打开IR0屏蔽位
OUT DX,AL
RET
MY_8259 ENDP
MY_0809 PROC NEAR ;采样
PUSH DX
PUSH CX
PUSH AX
MOV DX,AD0809 ;启动A/D转换
OUT DX,AL
CALL DALLY
MOV DX,AD0809 ;读A/D转换结果
IN AL,DX
MOV CH,AL ;分析结果进行显示
AND AL,0F0H
MOV CL,04H
SHR AL,CL ;取出数据的十位
MOV BX,OFFSET DATA
XLAT
MOV [SI],AL
MOV AL,CH
AND AL,0FH ;取出数据的各位
MOV BX,OFFSET DATA
XLAT
INC SI
MOV [SI],AL
POP AX
POP CX
POP DX
RET
MY_0809 ENDP
DISPLAY1 PROC NEAR
PUSH AX
PUSH DX
MOV DX,MY8255_MODE ;初始化8255工作方式
MOV AL,81H ;方式0,A口、B口输出,C口低4位输入
OUT DX,AL
MOV AL,[SI]
MOV DX,MY8255_B
OUT DX,AL
MOV AL,02H
MOV DX,MY8255_A
OUT DX,AL
CALL DALLY
DEC SI
MOV AL,[SI]
MOV DX,MY8255_B
OUT DX,AL
MOV AL,01H
MOV DX,MY8255_A
OUT DX,AL
CALL DALLY
INC SI
POP DX
POP AX
DISPLAY1 ENDP
DALLY PROC NEAR ;软件延时子程序
PUSH CX
PUSH AX
MOV CX,4000H
D1: MOV AX,0300H
D2: DEC AX
JNZ D2
LOOP D1
POP AX
POP CX
RET
DALLY ENDP
CODE ENDS
END START
附录2:电路连接实物图
图8 电路接线实物图
图9 电路接线实物图
附录3:仿真电路图
图10 软件仿真图