82558253交通灯模拟实验报告文档格式.docx
- 文档编号:5816341
- 上传时间:2023-05-05
- 格式:DOCX
- 页数:19
- 大小:24.62KB
82558253交通灯模拟实验报告文档格式.docx
《82558253交通灯模拟实验报告文档格式.docx》由会员分享,可在线阅读,更多相关《82558253交通灯模拟实验报告文档格式.docx(19页珍藏版)》请在冰点文库上搜索。
如此循环重复。
基于以上设计,在表1中给出了交通灯控制器的4种状态,对应的状态迁移过程见表
(1)和图
(1)。
东西走向
南北走向
状态0
红、黄、绿 001
红、黄、绿 100
状态1
红、黄、绿 011
状态2
状态3
表
(1)交通灯控制器的4种状态
状态2
图
(1)
(三)具体设计
1.电路原理
本课题的设计可通过实验平台上的一些功能模块电路组成,由于各模块电路内部已经连接,用户在使用时只要设计模块间电路的连接,因此,硬件电路的设计及实现相对简单。
完整系统的硬件连接如图1所示。
硬件电路由定时模块、发光二极管模块、数码管显示模块和紧急中断模块组成。
定时模块是由8254的计数器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显示。
用对于东西车道和南北车道黄灯闪烁利用标志位判断实现,满足比较条件就暗,不满足条件就亮。
8254计数的起停由8255的PA0控制,8255的PA0输出1时,8254开始计数,交通灯按正常状态切换工作,PA0输出0时,计数器停止工作,交通灯不再按正常状态切换。
8254开始计数后每100ms发出一个中断申请信号,在中断子程序中先刷新数码管,然后判断当前状态,进入相应的处理程序进行处理。
主程序负责系统的初始化,然后数码管数据输出显示,同时检测PC键盘按键,有按键就退出程序。
主程序的流程图如图3所示。
定时中断子程序是本设计的重点,负责完成数码管输出数据刷新和各个状态的处理切换。
中断子程序包括数码管输出数据刷新程序和各状态处理程序。
数码管输出数据刷新子程序是实现倒计时25s,用LEDOUT表示输出的数据,cnt用来软件计时1s,就是计数10个100ms。
LED输出是要将输出的数据转化为段选码。
根据当前的状态跳转到相应的处理程序,在处理程序中完成定时和状态的切换。
状态1和3的流程是一样的,先点亮对应的交通灯,再判断定时到了就可以切换了。
状态2和4要实现黄灯的闪烁,间隔点亮和熄灭就可以了。
状态1和3处理程序的流程图(以状态1为例)如图6所示,其中NUM是状态1对应的PC口输出。
外部中断服务子程序主要用来处理紧急情况,将2个方向的车都停止运行,点亮所有红灯。
下次中断来时恢复以前的状态。
用一个标志位FLAG判断是第一次进入还是恢复状态。
3.系统原理
I.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、用以比较正在处理的中断和刚刚进入的中断请求之间的优先级别,以决定是否产生多重中断或中断嵌套。
II.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---双向选通输入输出方式。
3、引脚信号
8255A的引脚如图7.5所示,分为数据线、地址线、读/写控制线、输入/输出端口线和电源线。
D7~D0(databus):
三态、双向数据线,与CPU数据总线连接,用来传送数据。
(chipselect):
片选信号线,低电平有效时,芯片被选中。
A1,A0(portaddress):
地址线,用来选择内部端口。
(read):
读出信号线,低电平有效时,允许数据读出。
(write):
写入信号线,低电平有效时,允许数据写入。
RESET(reset):
复位信号线,高电平有效时,将所有内部寄存器(包括控制寄存器)清0。
PA7~PA0(portA):
A口输入/输出信号线。
PB7~PB0(portB):
B口输入/输出信号线。
PC7~PC0(portC):
C口输入/输出信号线。
VCC:
+5V电源。
GND:
电源地线。
III.8254的工作原理:
8254是可编程的计数器/定时器,其内部有三个独立的16位计数器/定时器通道,每个计数器通道均可按6种不同的方式工作,并且都可以按二进制或十进制计数。
其CLK0~CLK2是计数器0~2的时钟脉冲输入端,GATE0~GATE2是门控脉冲输入端,OUT0~OUT2是输出端。
4.关键技术分析
1)实时控制和管理设计
a)芯片选择及端口选择
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
8254的端口地址为:
计数器0-208H、计数器1-209H、计数器2-20aH、控制寄存器0-20bH。
本设计硬件由定时模块、发光二极管模块、数码管显示模块和紧急中断模块组成。
定时模块采用硬件定时和软件定时相结合的方法,用8254定时/计数器定时100ms,再用软件计时实现所需的定时。
发光二极管模块由8255控制发光二极管来实现。
数码管显示模块由实验平台上的LED显示模块实现。
紧急中断模块是由单脉冲发生单元和8259中断控制器组成。
程序主要是由定时子程序、发光二极管显示子程序、数码管显示子程序和中断服务程序组成。
包括对8254、8255以及8259等可编程器件的编程。
2)发光二极管闪烁程序
1:
在单片机系统的P1.0口接上一个发光二极管,实现此灯的闪烁功能。
LEDEQUP1.0;
P1.0引脚上接上一个发光二极管
ORG0;
程序从0地址开始
START:
CLRLED;
点亮发光二极管
LCALLDELAY;
调用延时子程序(亮1秒钟)
SETBLED;
关掉发光二极管
调用延时子程序(关1秒钟)
LJMPSTART;
跳到START标号处执行
DELAY:
;
1秒延时子程序(12MHz晶振)
MOVR5,#8;
R5寄存器加载8次
D0:
MOVR7,#250;
R7寄存器加载250次数
D1:
MOVR6,#250;
R6寄存器加载250次数
D2:
DJNZR6,D2;
D2循环执行R6次
DJNZR7,D1;
D1循环执行R7次
DJNZR5,D0;
D0循环执行R5次
RET;
返回主程序
END;
主程序结束
2:
在单片机系统的P1口接上8个发光二极管,实现低位4个和高位4个的交替闪烁。
MOVA,#0FH;
让ACC的内容为00001111
LOOP:
MOVP1,A;
从P1输出ACC的内容
CPLA;
对ACC的内容取反码(即反相)
CALLDELAY;
调用延时子程序
LJMPLOOP;
跳到LOOP处执行
0.1秒延时子程序(12MHz晶振)
MOVR7,#200;
R7寄存器加载200次数
DJNZR6,$;
本行执行R6次
DJNZR7,D0;
主程序结束
3)源程序
初始化程序:
DATASEGMENT
LEDDB3FH,06H,5BH,4FH,66H,6DH,7DH,07H;
存放七段代码表
DB7FH,6FH,77H,7CH,39H,5EH,79H,71H
D1EQU10H
D2EQU200H;
8255A端口A
EAEQU200H;
8259端口地址
EEEQU203H
CONTROLEQU20bH;
8254端口地址
COUNT0EQU208H
COUNT1EQU209H
COUNT2EQU20aH
Z8279EQU222H
D8279EQU220H
LEDMODEQU00;
左边输入,八位显示外部译码八位显示
LEDFEQEQU38H;
扫描频率
DATAENDS
CODESEGMENT
ASSUMECS:
CODE,DS:
DATA
CODE
CONTDB0
CONT1DB0
CONT2DB0
BKSDDB0
BKADDB0
BKDADB0
TEMPDB0
;
*******************************************
MOVAX,0
MOVDS,AX
MOVAX,OFFSETIRQ0
ADDAX,2000H
MOVSI,0FH*4
MOV[SI],AX
MOV[SI+2],AX
INAL,218H
ANDAL,7FH
OUT219H,AL
CLI
MOVAL,80H;
初始化8255
OUTEE,AL
MOVAL,00
OUTEA,AL
MOVAL,0f0H
MOVDX,218H;
8259初始化
MOVAL,00010010b
OUTDX,AL
MOVAL,08H
MOVDX,219H
MOVDX,203H;
设置为全输出
MOVAL,80H
MOVDX,200H
MOVAL,0ffh
OUTDX,AL;
清LED
MOVDX,200H;
全红
MOVAL,0F0H
MOVAL,00110110b;
初始化8254
OUTCONTROL,AL
MOVAX,2500
MOVDX,COUNT0
MOVAL,AH
OUTCOUNT0,AL
MOVAX,DATA
中断服务程序:
A1:
STI
HLT
JMPA1
IRQ0:
JMPCOMPARE
COMPARE:
CMPDL,0
JZSTATE0
CMPDL,1
JZSTATE1
CMPDL,2
JZSTATE2
CMPDL,3
JZSTATE3
STATE0:
;
状态0:
东西红南北绿
moval,01011010b
outD2,al
DECSI
JNZCHANGE1
DECDH
MOVSI,100
CHANGE1:
DECCX
CMPCX,0
JNZM0
MOVCX,500
STATE1:
DECDI;
状态1:
东西方向黄灯闪烁,南北绿灯
CMPDI,0
JNZSHINE1
MOVAL,00001010b;
东西灭,南北绿
OUTD2,AL
MOVDI,50
JMPCHANGE
SHINE1:
MOVAL,11111010B;
东西黄,南北绿
CHANGE:
JNZCHANGE2
DECDI
CHANGE2:
JNZM1
MOVCX,2000
MOVDH,25
STATE2:
MOVAL,10100101b;
状态2:
东西绿灯,南北红灯
JNZCHANGE3
CHANGE3:
JNZM2
STATE3:
状态3:
东西绿灯,南北黄灯闪烁
JNZSHINE2
MOVAL,10100000B;
东西绿灯,南北灭
JMPSOURCE
SHINE2:
MOVAL,10101111B;
东西绿,南北黄
SOURCE:
JNZCHANGE4
CHANGE4:
JNZM3
MOVCX,6000
MOVDH,65
M0:
MOVDL,0;
下次进入状态0
JMPEXIT
M1:
MOVDL,1;
下次进入状态1
M2:
MOVDL,2;
下次进入状态2
M3:
MOVDL,3;
下次进入状态3
EXIT:
MOVAL,20H
OUT218H,AL
IRET
CODEENDS
ENDSTART
(四)测试
1.在测试中遇到的问题记录
a)软件延时与定时器计时
软件延时,设计简单,使用方便,但是无法进行精确计时,无法在实际应用中进行使用,本次设计采用了,定时器0进行计时,每10ms产生一个脉冲信号,可以准确的计时并方便8段数码管进行显示
b)使用中断
使用中断比较麻烦,在试验中需要两次加载初始化程序和中断服务程序,并且需要手工指定中断服务地址和中断向量号;
但是使用中断可以进行多样化设计,强化程序功能与执行效率。
2.测试结果
1.即东西方向的绿灯和南北方向的红灯同时点亮1分钟;
(五)总结
在本次设计中,使用了8259A中断控制器、8254计数器、8255可编程并行接口实现了,对南北、东西方向交通的分别计时、分别控制,但是程序没有实现对双向交通的数码显示,数码显示模块空缺,会尽快将程序补全,使其具有完整的交通灯功与其他设计相比。
本次课程设计采用定时加中断控制的方式进行,
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 82558253 交通灯 模拟 实验 报告