硬件课程设计实验报告模拟交通灯.docx
《硬件课程设计实验报告模拟交通灯.docx》由会员分享,可在线阅读,更多相关《硬件课程设计实验报告模拟交通灯.docx(12页珍藏版)》请在冰豆网上搜索。
硬件课程设计实验报告模拟交通灯
硬件部件设计与调试
实验题目:
模拟交通灯
实验目的与要求:
⒈ 了解交通灯管理的基本工作原理
⒉ 熟悉8259A中断控制器的工作原理和应用编程
⒊ 熟悉8255A并行接口的各种工作方式和应用
⒋ 熟悉8253计数器/定时器的工作方式及应用编程,掌握利用软硬件相结合定时的方法
⒌ 掌握多位LED显示问题的解决
实验原理与方法:
●8259、8255A和8253的工作原理:
一、8259的工作原理:
1、数据总线缓冲器:
8259A与系统数据总线的接口,是8位双向三态缓冲器。
CPU与8259A之间的控制命令信息、状态信息以及中断类型信息,都是通过缓冲器传送的。
2、读/写控制逻辑:
CPU通过它实现对8259A的读/写操作。
3、级连缓冲器:
用以实现8259A芯片之间的级连,使得中断源可以由8级扩展至64级。
4、控制逻辑电路:
对整个芯片内部各部件的工作进行协调和控制。
5、中断请求寄存器IRR:
8位,用以分别保存8个中断请求信号,当响应的中断请求输入脚有中断请求时,该寄存器的相应位置1。
6、中断屏蔽寄存器IMR:
8位,相应位用以对8个中断源的中断请求信号进行屏蔽控制。
当其中某位置“0“时,则相应的中断请求可以向CPU提出;否则,相应的中断请求被屏蔽,即不允许向CPU提出中断请求。
该寄存器的内容为8259A的操作命令字OCW1,可以由程序设置或改变。
7、中断服务寄存器ISR:
8位,当CPU正在处理某个中断源的中断请求时,ISR寄存器中的相应位置1。
8、用以比较正在处理的中断和刚刚进入的中断请求之间的优先级别,以决定是否产生多重中断或中断嵌套。
二、8255A的工作原理:
1、8255A的内部结构:
1)数据总线缓冲器:
这是一个双向三态的8位数据缓冲器,它是8255A与微机系统数据总线的接口。
输入输出的数据、CPU输出的控制字以及CPU输入的状态信息都是通过这个缓冲器传送的。
2)三个端口A,B和C:
A端口包含一个8位数据输出锁存器和缓冲器,一个8位数据输入锁存器。
B端口包含一个8位数据输入/输出锁存器和缓冲器,一个8位数据输入缓冲器。
C端口包含一个8位数据输出锁存器和缓冲器,一个8位数据输入缓冲器(输入没有锁存器)。
3)A组和B组控制电路:
这是两组根据CPU输出的控制字控制8255工作方式的电路,它们对于CPU而言,共用一个端口地址相同的控制字寄存器,接收CPU输出的一字节方式控制字或对C口按位复位字命令。
方式控制字的高5位决定A组的工作方式,低3位决定B组的工作方式。
对C口按位复位命令字可对C口的每一位实现置位或复位。
A组控制电路控制A口和C口上半部,B组控制电路控制B口和C口下半部。
4)读写控制逻辑:
用来控制把CPU输出的控制字或数据送至相应端口,也由它来控制把状态信息或输入数据通过相应的端口送到CPU。
2、8255A的工作方式:
方式0---基本输入输出方式;方式1---选通输入输出方式;
方式2---双向选通输入输出方式。
三、8253的工作原理:
8253是可编程的计数器/定时器,其内部有三个独立的16位计数器/定时器通道,每个计数器通道均可按6种不同的方式工作,并且都可以按二进制或十进制计数。
其CLK0~CLK2是计数器0~2的时钟脉冲输入端,GATE0~GATE2是门控脉冲输入端,OUT0~OUT2是输出端。
●交通信号灯实时控制和管理的总体设计
芯片选择及端口选择
1.用实验系统8255A实现对信号灯的控制(所用端口自定);2位数码显示用8255A实现控制。
2.用实验系统8235的计数器2定时向实验系统主片8259A的IRQ7请求中断,以实现要求的1分钟、5秒钟和20秒的定时。
实验系统8235的计数器2的CLK2接OPCLK,频率为1.19318MHZ;GATE2已接 +5V;定时采用软硬件相结合的方式实现。
3、用实验系统的发光二极管模拟红绿灯。
注:
8259A的端口地址为:
218H、219H
8255A的端口地址为:
端口A-200H、端口B-201H、端口C-202H、控制端口-203H
8253的端口地址为:
计数器0-208H、计数器1-209H、计数器2-20aH、控制寄存器0-20bH。
本设计硬件由定时模块、发光二极管模块、数码管显示模块和紧急中断模块组成。
定时模块采用硬件定时和软件定时相结合的方法,用8253定时/计数器定时100ms,再用软件计时实现所需的定时。
发光二极管模块由8255控制发光二极管来实现。
数码管显示模块由实验平台上的LED显示模块实现。
紧急中断模块是由单脉冲发生单元和8259中断控制器组成。
程序主要是由定时子程序、发光二极管显示子程序、数码管显示子程序和中断服务程序组成。
包括对8253、8255以及8259等可编程器件的编程。
●方案论证:
软件延时,设计简单,使用方便,但是无法进行精确计时,无法在实际应用中进行使用,本次设计采用了,定时器0进行计时,每10ms产生一个脉冲信号,可以准确的计时并方便8段数码管进行显示。
使用中断比较麻烦,在试验中需要两次加载初始化程序和中断服务程序,并且需要手工指定中断服务地址和中断向量号;但是使用中断可以进行多样化设计,强化程序功能与执行效率。
在本设计中程序每10MS请求一次中断,实现精确定时与数码管显示刷新。
实验设计思路与实现:
●硬件设计:
本课题的设计可通过实验平台上的一些功能模块电路组成,由于各模块电路内部已经连接,用户在使用时只要设计模块间电路的连接,因此,硬件电路的设计及实现相对简单。
完整系统的硬件连接如图1所示。
硬件电路由定时模块、发光二极管模块、数码管显示模块和紧急中断模块组成。
定时模块是由8253的计数器0来实现定时100ms。
Clk0接实验平台分频电路输出Q6,f=46875hz。
GATE0接8255的PA0,由8255输出来控制计数器的起停。
OUT0接8259的IRQ2,定时完成申请中断,进入中断服务程序。
发光二极管显示模块由8255输出来控制发光二极管的亮灭。
8255输出为低电平时,对应的发光二极管就点亮,否则就熄灭。
8255的接口电路如图2所示。
交通灯的对应关系如下:
L7
L6
L5
L2
L1
L0
PC7
PC6
PC5
PC2
PC1
PC0
13红灯
13黄灯
13绿灯
24红灯
24黄灯
24绿灯
实验平台上提供一组六个LED数码管。
插孔CS1用于数码管段选的输出选通,插孔CS2用于数码管位选信号的输出选通。
本设计用4个数码管来倒计时。
紧急中断模块是由单脉冲发生单元和8259中断控制器,单脉冲发生单元主要用来请求中断,然后做出紧急情况处理。
图28255接口电路
●软件设计思路:
设计数器0的计数初值为25000,由于CLK0接脉冲信号,频率为2.5MHZ,所以每10ms中断一次。
利用CX对不同的状态时间计数,用来实现计数器0对1分钟,20秒钟,5秒钟的定时。
中断子程序分为数码显示刷新部分和红绿黄灯各种状态切换部分。
每进入中断即刷新LED显示。
用对于东西车道和南北车道黄灯闪烁利用标志位判断实现,满足比较条件就暗,不满足条件就亮。
8253计数的起停由8255的PA0控制,8255的PA0输出1时,8253开始计数,交通灯按正常状态切换工作,PA0输出0时,计数器停止工作,交通灯不再按正常状态切换。
8253开始计数后每100ms发出一个中断申请信号,在中断子程序中先刷新数码管,然后判断当前状态,进入相应的处理程序进行处理。
主程序负责系统的初始化,然后数码管数据输出显示,同时检测PC键盘按键,有按键就退出程序。
主程序的流程图如图3所示。
图3主程序的流程图
定时中断子程序是本设计的重点,负责完成数码管输出数据刷新和各个状态的处理切换。
中断子程序包括数码管输出数据刷新程序和各状态处理程序。
数码管输出数据刷新子程序是实现倒计时25s,用LEDOUT表示输出的数据,cnt用来软件计时1s,就是计数10个100ms。
LED输出是要将输出的数据转化为段选码。
根据当前的状态跳转到相应的处理程序,在处理程序中完成定时和状态的切换。
状态1和3的流程是一样的,先点亮对应的交通灯,再判断定时到了就可以切换了。
状态2和4要实现黄灯的闪烁,间隔点亮和熄灭就可以了。
状态1和3处理程序的流程图(以状态1为例)如图6所示,其中NUM是状态1对应的PC口输出。
外部中断服务子程序主要用来处理紧急情况,将2个方向的车都停止运行,点亮所有红灯。
下次中断来时恢复以前的状态。
用一个标志位FLAG判断是第一次进入还是恢复状态。
●源程序清单:
本次设计中,选用8235的计数器0定时向实验系统主片8259A的IRQ0请求中断。
设置8253的计数器0每10ms请求一次中断,工作于模式3;8255的A端口控制交通灯。
初始化程序:
DATA SEGMENT
LED DB 3FH,06H,5BH,4FH,66H,6DH,7DH,07H ;存放七段代码表
DB 7FH,6FH,77H,7CH,39H,5EH,79H,71H
D1 EQU 10H
D2 EQU 200H ;8255A端口A
EA EQU 200H ;8259端口地址
EE EQU 203H
CONTROL EQU 20bH ;8253端口地址
COUNT0 EQU 208H
COUNT1 EQU 209H
COUNT2 EQU 20aH
Z8279 EQU 222H
D8279 EQU 220H
LEDMOD EQU 00 ;左边输入,八位显示外部译码八位显示
LEDFEQ EQU 38H ;扫描频率
DATA ENDS
CODE SEGMENT
ASSUME CS:
CODE,DS:
DATA
CODE SEGMENT
ASSUME CS:
CODE
CONT DB 0
CONT1 DB 0
CONT2 DB 0
BKSD DB 0
BKAD DB 0
BKDA DB 0
TEMP DB 0
;*******************************************
START:
MOV AX,0
MOV DS,AX
MOV AX,OFFSET IRQ0
ADD AX,2000H
MOV SI,0FH*4
MOV [SI],AX
MOV AX,0
MOV [SI+2],AX
IN AL,218H
AND AL,7FH
OUT 219H,AL
CLI
MOV AL,80H ;初始化8255
OUT EE,AL
MOV AL,00
OUT EA,AL
MOV AL,0f0H
OUT EA,AL
MOV DX,218H ;8259初始化
MOV AL,00010010b
OUT DX,AL
MOV AL,08H
MOV DX,219H
OUT DX,AL
MOV DX,203H ;设置为全输出
MOV AL,80H
OUT DX,AL
MOV DX,200H
MOV AL,0ffh
OUT DX,AL ;清LED
MOV DX,200H ;全红