微机原理课程设计报告简易电压表副本Word格式文档下载.docx
《微机原理课程设计报告简易电压表副本Word格式文档下载.docx》由会员分享,可在线阅读,更多相关《微机原理课程设计报告简易电压表副本Word格式文档下载.docx(18页珍藏版)》请在冰豆网上搜索。
利用STARES598PCI实验仪的硬件资源8259中断控制器、8255可编程并行接口芯片和数码管、电位器和ADC0809设计一个简易电压表,编写响应的程序,使电压表能够正常运行,3位数码管显示电位器的电压,精确度要求小数点两位。
基本任务:
软件查询的方式获取AD转换结束信息
附加任务:
中断方式获取AD转换结束信息
3.设计原理
1、主体思想
ADC0809是逐次逼近型A/D转换器,具有较好的精度和速度,其采集结果
为8位二进制数,每采集一次一般需要100μs。
设计程序时可采用中断方式读取A/D转换结果数据。
在中断方式下,A/D转换结束后会自动产生EOC信号,将其与8259的中断输入端相接即可。
电压模拟量可由实验箱上的电位器提供,电压范围0~5V,其经ADC0809转换得到的数字量范围为0~255,再将转换的结果通过软件编码得到相应的原始电压值并在LED数码管上显示。
2、实验主要器材
实验器材
数量
备注
PC机
1
装有实验所需软件
ES598PCI实验仪
8255A芯片
8259A芯片
ADC0809芯片
数码管
事先检验完好可用
3、设计流程图
4、相关电子元器件及其功能介绍
(1)8255A芯片
a.概述:
Intel8086/8088系列的可编程外设接口电路(ProgrammablePeripheralInterface)简称PPI,型号为8255(改进型为8255A及8255A-5),具有24条输入/输出引脚、可编程的通用并行输入/输出接口电路。
它是一片使用单一+5V电源的40脚双列直插式大规模集成电路。
8255A的通用性强,使用灵活,通过它CPU可直接与外设相连接。
b.8255A工作方式:
●方式0:
基本输入输出方式
适用于无条件传送和查询方式的接口电路
●方式1:
选通输入输出方式
适用于查询和中断方式的接口电路
●方式2:
双向选通传送方式
适用于与双向传送数据的外设
c.8255A控制字格式:
(a)工作方式控制字(b)c口按位置位/复位控制字
(2)8259A芯片
8259A是专门为了对8085A和8086/8088进行中断控制而设计的芯片,它是可以用程序控制的中断控制器。
单个的8259A能管理8级向量优先级中断。
在不增加其他电路的情况下,最多可以级联成64级的向量优先级中断系统。
8259A有多种工作方式,能用于各种系统。
各种工作方式的设定是在初始化时通过软件进行的。
在总线控制器的控制下,8259A芯片可以处于编程状态和操作状态.编程状态是CPU使用IN或OUT指令对8259A芯片进行初始化编程的状态
b.初始化命令字:
1)ICW1写入双数地址。
2)ICW2写入单数地址。
3)ICW3写入单数地址。
4)ICW4写入单数地址
5)初始化命令字的设置过程
c.操作命令字:
1)OCW1写入单数地址。
2)OCW2写入双数地址。
3)OCW3写入双数地址。
(五)
d.主要功能:
在有多个中断源的系统中,接受外部的中断请求,并进行判断,选中当前优先级最高的中断请求,再将此请求送到cpu的INTR端;
当cpu响应中断并进入中断子程序的处理过程后,中断控制器仍负责对外部中断请求的管理。
(3)ADC0809芯片
ADC0809是采样分辨率为8位的、以逐次逼近原理进行模—数转换的器件。
其内部有一个8通道多路开关,它可以根据地址码锁存译码后的信号,只选通8路模拟输入信号中的一个进行A/D转换。
b.主要特性:
1)8路输入通道,8位A/D转换器,即分辨率为8位。
2)具有转换起停控制端。
3)转换时间为100μs
4)单个+5V电源供电
5)模拟输入电压范围0~+5V,不需零点和满刻度校准。
6)工作温度范围为-40~+85摄氏度
7)低功耗,约15mW。
c.引脚功能:
ADC0809芯片有28条引脚,采用双列直插式封装。
引脚图见右图1-1
IN0~IN7:
8路模拟量输入端。
2-1~2-8:
8位数字量输出端。
ADDA、ADDB、ADDC:
3位地址输入线,用于选通8路模拟输入中的一路
ALE:
地址锁存允许信号,输入,高电平有效。
START:
A/D转换启动脉冲输入端,输入一个正脉冲(至少100ns宽)使其启动(脉冲上升沿使0809复位,下降沿启动A/D转换)。
图1-1
EOC:
A/D转换结束信号,输出,当A/D转换结束时,此端输出一个高电平(转换期间一直为低电平)。
OE:
数据输出允许信号,输入,高电平有效。
当A/D转换结束时,此端输入一个高电平,才能打开输出三态门,输出数字量。
CLK:
时钟脉冲输入端。
要求时钟频率不高于640KHZ。
REF(+)、REF(-):
基准电压。
Vcc:
电源,单一+5V。
GND:
地。
d.工作过程:
图1-2
首先输入3位地址,并使ALE=1,将地址存入地址锁存器中。
此地址经译码选通8路模拟输入之一到比较器。
START上升沿将逐次逼近寄存器复位。
下降沿启动A/D转换,之后EOC输出信号变低,指示转换正在进行。
直到A/D转换完成,EOC变为高电平,指示A/D转换结束,结果数据已存入锁存器,这个信号可用作中断申请。
当OE输入高电平时,输出三态门打开,转换结果的数字量输出到数据总线上。
(4)数码管
七段式LED显示部件
(a)典型的七段式LED器件(b)共阳极LED(c)共阴极LED
数码管按段数分为七段数码管和八段数码管,八段数码管比七段数码管多一个发光二极管单元(多一个小数点显示);
按能显示多少个“8”可分为1位、2位、4位等等数码管;
按发光二极管单元连接方式分为共阳极数码管和共阴极数码管。
共阳数码管是指将所有发光二极管的阳极接到一起形成公共阳极(COM)的数码管。
共阳数码管在应用时应将公共极COM接到+5V,当某一字段发光二极管的阴极为低电平时,相应字段就点亮。
当某一字段的阴极为高电平时,相应字段就不亮。
共阴数码管是指将所有发光二极管的阴极接到一起形成公共阴极(COM)的数码管。
共阴数码管在应用时应将公共极COM接到地线GND上,当某一字段发光二极管的阳极为高电平时,相应字段就点亮。
当某一字段的阳极为低电平时,相应字段就不亮。
4.实验原理图与硬件电路图
实验原理图:
硬件电路图:
5.测试结果及问题分析
1、测试结果
当调节电位器左端旋转至右端时,数码管显示电压0.00~4.99,可通过改变电
阻来改变电压值,再通过A/D转换为数字量通过数码管发出二极管显示数字。
2、问题分析
(1)按照实验电路图连接完实物图后,发现数码管显示不了,后来发现,由于B4区的PA和PC插口与G5区的B、C口连接错了,与程序编写不相符,这才导致了数码管显示不了电压值。
(2)刚开始编写程序时没有意识到最终显示的要为原始电压值,而是单纯的将八位二进制数转换为十进制数显示,没有考虑到输入电压与转换后数字的关系,所以并没有达到设计要求。
(3)重新编写LED段程序后发现数码管发光不稳定,闪烁比较严重,通过更改延时主程序参数问题得到解决。
6.心得体会
短短一周的微机原理与接口技术的课程设计就结束了,但是我在这段时间
学习到了很多。
它让我体会到了平时在课堂上所不能体验的感受,那种面对硬件实物的激动的心情,已经在自己付出努力后却迟迟得不到想要结果时的焦急。
但我深深地明白,这才是课程设计的魅力所在,正是因为有这样或者那样的困难,才让这次的课程设计充满乐趣。
设计之初,我仔细阅读了有关ADC0809、8259A和8255A方面的知识,了解了它们的芯片功能、工作原理及初始化等等。
以前我们只在课堂上做过一些关于软件设计方面的题目,这次与硬件相结合不仅难度上有所提升,并且对自身能力的要求又提高了不少,不但需要较高的理论水平,而其还要求有实际的动手能力。
这次的课程设计目的是提高实践能力,还包括汇编语言的编程能力以及对接口等硬件的分析和设计接口电路的能力,从而学以致用。
总而言之,通过这次的课程设计,我不仅仅巩固了课堂上学习到的微机原理与接口技术方面的知识,也大大地补充了我对相关硬件功能的全面认识和理解,并且能够基本掌握它们的使用方法和操作环境。
只有通过实际编程和微机及接口的硬件实践,才能真正掌握软硬件设计的方法,从中得到收益和提高。
同时,在同学和老师的帮助下,自己独立完成这项课程设计,在这个过程中,不仅仅让我尝到了成功的喜悦以及付出的辛苦,更让我认识到了学习的正确方法,我们绝不能孤立自己,往往在困难肚子解决不了的时候,可以向周围的人寻求帮助,这样可以事半功倍,更加能及时发现自己的设计不足和错误之处。
7.程序代码
MODEEQU082H;
10000010H,方式0,A和C输出
PORTAEQU09000H;
A口地址
PORTBEQU09001H;
B口地址
PORTCEQU09002H;
C口地址
CONTROLEQU09003H;
命令口地址
CS0809EQU08000H;
0809地址
ICW1EQU00010011B;
上升沿触发,单片8259A,需要ICW4
ICW2EQU08H;
中断类型号为40H
ICW4EQU00001001B;
正常全嵌套,非自动EOI,工作在8086/8088方式
OCW1EQU11111110B;
IR1-IR7上的中断请求被屏蔽,只响应INT0中断
CS8259AEQU0A000H
CS8259BEQU0A001H
DATASEGMENT
NUMDB3DUP(?
);
开辟三个空间的缓存
LEDMAP:
DB3FH,06H,5BH,4FH,66H,6DH,7DH,07H;
数码管显示0到9的字型代码
DB7FH,6FH
LEDDMAP:
DB0BFH,86H,0DBH,0CFH,0E6H,0EDH,0FDH,87H
DB0FFH,0EFH;
包括小数点的显示
DATAENDS
CODESEGMENT
ASSUMECS:
CODE,DS:
DATA
DELAYPROCNEAR;
延时子程序
PUSHBX
PUSHCX
MOVBX,0
MOVCX,100
A1:
INCBX
LOOPA1
POPCX
POPBX
RET
DELAYENDP
IENTERPROCNEAR;
中断服务程序
PUSHAX
PUSHDX
MOVDX,CS0809;
0809端口地址
INAL,DX;
读入结果
LED:
;
转换为原始电压值显示程序
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中为小数点后第二位
MOVAL,[SI]
MOVDI,OFFSETLEDDMAP;
段码地址,查表,显示第一位包括小数点
MOVAH,0
ADDDI,AX
MOVAL,[DI]
MOVDX,PORTA
OUTDX,AL
MOVDX,PORTC
MOVAL,11111011B
OUTDX,AL;
选通第一位数码管,整数位
CALLDELAY
MOVAL,[SI+1]
MOVDI,OFFSETLEDMAP
MOVAH,0
MOVAL,11111101B
选通第二位数码管,小数点后第二位
MOVAL,[SI+2]
MOVAL,11111110B
选通第三位数码管,小数点后第二位
MOVDX,CS0809
MOVAL,0
MOVDX,CS8259A
XORAX,AX;
AX置零
MOVAL,20H;
中断服务程序结束指令
OUTDX,AL
POPDX
POPAX
IRET
IENTERENDP
IINITPROCNEAR;
初始化8259A
MOVDX,CS8259A;
偶地址
MOVAL,ICW1;
00010011B,上升沿触发,单片8259A,需要ICW4
写ICW1用偶地址
MOVDX,CS8259B;
奇地址
MOVAL,ICW2;
中断源IR0-IR7,中断类型号为40H-47H
写ICW2用奇地址
MOVAL,ICW4;
写ICW4用奇地址
MOVAL,OCW1;
11111110B,IR1-IR7上的中断请求被屏蔽,只响应INT0中断
写OCW1用奇地址
RET
IINITENDP
STARTPROCNEAR
MOVAX,DATA
MOVDS,AX
MOVSI,OFFSETNUM
MOVDX,CONTROL;
8255A控制端命令口
MOVAL,MODE
输出8255控制字到命令口
CLI;
屏蔽外部中断
CALLIINIT;
调用初始化8259A
MOVAX,0;
初始化中断向量表
MOVES,AX
MOVDI,4*ICW2;
中断号
LEAAX,IENTER;
设置中断入口地址(灯的显示)
STOSW
MOV[BX],AX
MOVAX,SEGIENTER
代码段地址为0
MOVAL,0;
初始值为0
启动模/数转换芯片
STI;
将处理器标志寄存器中断标志置1,允许中断
LP:
NOP;
短暂延时程序,等待中断
JMPLP
CODEENDS
ENDSTART