昆明理工大学信息工程与自动化学院学生实验报告(2012 —2013 学年第 2 学期)课程名称:可编程逻辑器件设计开课实验室:信自楼 2013 年4月 11日一、引言汽车计价器是乘客与司机双方的交易准则,它是出租车行业发展的重要标志,是出租车中最重要的工具。
它关系着交易双方的利益。
具有良好性能的计价器无论是对广大出租车司机朋友还是乘客来说都是很必要的。
因此,汽车计价器的研究也是十分有一个应用价值的。
我国在70年代开始出现出租车,但那时的计费系统大都是国外进口不但不够准确,价格还十分昂贵。
随着改革开放日益深入,出租车行业的发展势头已十分突出,国内各机械厂家纷纷推出国产计价器。
出租车计价器的功能从刚开始的只显示路程(需要司机自己定价,计算后四舍五入),到能够自主计费,以及现在的能够打一发票和语音提示、按时间自主变动单价等功能。
随着城市旅游业的发展,出租车行业已成为城市的窗口,象征着一个城市的文明程度。
随着出租车行业的发展,出租车已经是城市交通的重要组成部分,从加强行业管理以及减少司机与乘客的纠纷出发,具有良好性能的计价器对出租车司机和乘客来说都是很必要的。
我们设计采用8086为主控器,以A44E霍尔传感器测距,实现对出租车的多功能的计价设计,输出采用8段数码显示管。
二、总体设计方案利用8253作为定时/计数器,控制电机转速并测量电机的转数;8255作为输入输出接口,控制数码管显示启动后经过的里程数(小数点后取2位有效值)。
硬件连接说明:直流电机控制器的基础上,增加了一个电机测速电路构成。
8255的B口作为数码管的笔划码驱动;C口的低4位作为段码控制,显示实际里程,同时,也用于输出键盘的列扫描码;PC6、PC7输入行扫描码,用于识别按键,程序中仅使用了PC6行上的四个按键,其定义如下:X1:启动/停止键;X2:加速键,与X3、X4键组合使用;X3:“+”键;X4:“-”键。
A口仅使用了PA0,输出PWM脉冲信号,通过驱动芯片驱动电机,其输出电压的高低与PWM脉冲的占空比成正比。
电机的转数,通过霍尔元件变换为脉冲个数,送入8253的通道2,计数后,将转数转换为里程数,最小单位为0.01公里,送CPU记录,结果由数码管显示出来。
(一)、软硬件流程图IRO 中断处理流程图 IR7中断处理程序流程图(二)、源程序设计与硬件介绍中断程序里程计数中断程序每当霍尔传感器输出一个低电平信号就使中断一次,当里程计数器对里程脉冲计满1000次时,进入里程计数中断服务程序中,里程变量加一。
主函数中总金额也相应地变化。
中途等待中断程序在中途等待中断程序中,每1ms产生一次中断,将当前里程值送入某个缓存变量,每5分钟将缓存变量中的值和当前里程值比较,当汽车停止,霍尔传感器5分钟没有输出信号,当前里程值和缓存变量内的值相同,则进入等待计时,每5分钟记一次价格。
显示程序显示程序利用定时器每1ms产生一次中断,相应变量置位,点亮一个数码管,显示一位数据,利用主函数内的循环,实现动态扫描显示,同时根据数码管余辉和人眼暂留现象,即可实现显示。
键盘程序键盘采用查询的方式,放在主程序中,当没有按键按下的时候,循环主程序,一旦右按键按下,便转向相应的子程序处理,处理结束再返回。
2.1 8086最小系统模块1、8086CPU构成的系统框图如图:2.2 芯片8255A1、8255A的作用本实验利用8255A将模拟量转换后的数字量传送到CPU。
此外,8255采用查询工作方式控制ADC0809工作。
8086通过8255向七段LED显示器发送控制信号。
2、8255A的功能分析8255A是可编程并行接口,可以根据外界条件(I/O设备需要的信号线和它能提供的状态线)来使其构成多种接口电路。
8255A内部有3个数据端口,即A 口、B口、C口。
A口有三种工作方式:即方式0、方式1和方式2,而B口只能工作在方式0或方式1下,而C口通常作为联络信号使用。
本实验将控制字设为80H,初始化8255,使得B口、C口为输出。
在三种工作方式中,本设计只使用了方式0,即方式0是基本的输入/输出方式,在这种方式下,三个端口都可以由程序规定为输入/出方式,但是不能既作为输入又作为输出,也没有提供固定的联络信号。
C口分为两个4位---高4位和低4位,可以分别设置为输入或输出方式。
3、8255A的技术参数8255A的引脚信号CS:片选信号,低电平有效;A0、A1:地址信号。
JP52: PC口;JP53: PB口;JP56: PA口。
1)与外设相连的PA7~PA0:A口数据信号线;PB7~PB0:B口数据信号线;PC7~PC0:C口数据信号线;2)与CPU相连的RESET:复位信号。
当此信号来时,所有寄存器都被清除。
同时三个数据端口被自动置为输入端口。
D7~D0:它们是8255A的数据线和系统总线相连。
CS:片选信号。
在系统中,一般根据全部接口芯片来分配若于低位地址(比如A5、A4、A3)组成各种芯片选择码,当这几位地址组成某一个低电平,于8255A 被选中。
只有当有效时,读信号写才对8255进行读写。
RD:读信号。
当此信号有效时,CPU可从8255A中读取数据。
WR:写信号。
当此信号有效时,CPU可向8255A中写入数据。
A1、A0:端口选择信号。
8255A内部有3个数据端口和1个控制端口,共4个端口。
规定:A1、A0为00时,选中A端口;A1、A0为01时,选中B端口;A1、A0为10时,选中C端口;A1、A0为11时,选中控制口。
4、8255A的方式控制字8255A的控制字有两种:一种是方式选择控制字,另一种是C口按位置位/复位控制字①方式选择控制字图1 8255A的方式控制字表②C口按位置位/复位控制字图2 8255A的置位/控制字表2.3 芯片82531、8253的功能分析Intel8253是NMOS工艺制成的可编程计数器/定时器,有几种芯片型号,外形引脚及功能都是兼容的,只是工作的最高计数速率有所差异,例如8253(2.6MHz),8253-5(5MHz)8253内部有三个计数器,分别成为计数器0、计数器1和计数器2,他们的机构完全相同。
每个计数器的输入和输出都决定于设置在控制寄存器中的控制字,互相之间工作完全独立。
每个计数器通过三个引脚和外部联系,一个为时钟输入端CLK,一个为门控信号输入端GATE,另一个为输出端OUT。
每个计数器内部有一个8位的控制寄存器,还有一个16位的计数初值寄存器CR、一个计数执行部件CE和一个输出锁存器OL。
执行部件实际上是一个16位的减法计数器,它的起始值就是初值寄存器的值,而初始值寄存器的值是通过程序设置的。
输出锁存器的值是通过程序设置的。
输出锁存器OL用来锁存计数执行部件CE的内容,从而使CPU可以对此进行读操作。
顺便提一下,CR、CE和OL都是16位寄存器,但是也可以作8位寄存器来用1、8253的作用2、8253的引脚信号CS:片选信号,低电平有效;A0、A1:地址信号;2.4可编程控制芯片8259A8259A的原理一片8959A有8条中断请求线IR0~IR7,8259A被操作系统初始化后,就可以接收中断信号了。
8259A从IR请求线上接受中断信号,每个请求线有一个触发器来保存请求信号,从而形成中断请求寄存器(IRR)。
同时如果中断请求信号线上不是被屏蔽的,8259A向CPU发出INT信号,请求中断。
这时如果CPU 是处于允许中断状况,CPU就会发送INTA信号给8259A进入中断响应周期。
如果有多个请求信号同时到达,8259A的优先权电路会对各个请求进行优先权选择,将最高先权的请求在中断响应周期送到中断服务寄存器(ISR)中将它置位,同时复位IRR中的相应位。
接着CPU再次发送一个INTA脉冲给8259A,启动另外一个中断相应周期。
8259A在这个相应周期向数据总线的D0-D7上输入一个中断向量。
CPU根据该向量的值*4后就可以从中断入口地址表(IDT )中取出中断服务程序的入口地址而转入中断服务程序。
而8259A如果工作在自动结束中断(AEOI)模式时会自动使其ISR中的相应位复位,否则需要发出EOI命令使ISR复位。
在老式的PC-XT/AT中,一般使用一片8259A进行中断信号请求。
在现代的多数PC中,一般都会采用两片8259A作为级连。
其中一片是Master一片是Slave,由于Master上的一个中断请求线需要连接到Slave的INT脚,所以实际可以使用的外部中断个数是15(8*2 – 1)个。
8259A结构1、数据总线缓冲器--D7~D0数据总线缓冲器为三态、双向、8位寄存器,数据线D7~D0与CPU系统总线连接,构成CPU与8259A之间信息传送的通道。
2、读/写控制逻辑--WR/WD读/写控制逻辑用来接收CPU系统总线的读/写控制信号和端口地址选择信号,用于控制8259A内部寄存器的读/写操作。
3、级联缓冲/比较器8259A既可以工作于单片方式,也可以工作于多片级联方式,级联方式硬件连接如图6.10所示。
级联缓冲/比较器提供多片8259A的管理和选择功能,其中一片为主片,其余为从片。
4、中断控制逻辑中断控制逻辑按照编程设定的工作方式管理中断,负责向片内各部件发送控制信号,向CPU发送中断请求信号INT和接收CPU回送的中断响应信号INTA,控制8259A进入中断管理状态。
5、中断请求寄存器(interrupt request register,IRR)IRR是一个8位寄存器,用于记录外部中断请求。
其中D7~D0分别与外部中断请求信号IR7~IR0相对应,当IRi(i=0~7)有请求(电平或边沿触发)时,IRR中的相应位Di置1,在中断响应信号INTA有效时,DI被清除。
6、中断服务寄存器(interrupt service register,ISR)ISR是一个8位寄存器,用于记录CPU当前正在服务的中断标志。
当外部中断IRi(i=0~7)的请求得到CPU响应进入服务时,由CPU发来的第一个中断响应脉冲INTA将ISR中的相应位Di(i=0~7)置1,而ISR的复位则由8259A 中断结束方式决定。
若定义为自动结束方式,则由CPU发来的第二个中断响应脉冲INTA的后沿将Di复位为0;若定义为非自动结束方式,则由CPU发送来的中断结束命令将其复位。
7、中断屏蔽寄存器(interrupt mask register,IMR)IMR是一个8位寄存器,用来存放IR7~IR0的中断屏蔽标志。
它的8个屏蔽位D7~D0与外部中断请求IR7~IR0相对应,用于控制IRi的请求是否允许进入。
当IMR中的Di位为1时,对应的IRi请求被禁止;当IMR中的Di位为0时,则允许对应的中断请求进入。