交通灯控制系统的设计2011
1、 交通灯控制系统的设计 参考要求:
利用8253定时,8259中断及8255输出实现十字路口交通灯模拟控制;实现利用LED 数码管显示倒计时时间;设计电路并在实验箱上连接线路同时编程实现其功能。
2.21 8259的工作原理:
一、数据总线缓冲器:8259A与系统数据总线的接口,是8位双向三态缓冲器。CPU 与8259A 之间的控制命令信息、状态信息以及中断类型信息,都是通过缓冲器传送的。
二、读/写控制逻辑:CPU通过它实现对8259A 的读/写操作。
三、级连缓冲器:用以实现8259A 芯片之间的级连,使得中断源可以由8级扩展至64级。 四、控制逻辑电路:对整个芯片内部各部件的工作进行协调和控制。
五、中断请求寄存器IRR:8位,用以分别保存8个中断请求信号,当响应的中断请求输入引脚有中断请求时,该寄存器的相应位置1。
六、中断屏蔽寄存器IMR:8位,相应位用以对8个中断源的中断请求信号进行屏蔽控制。当其中某位置“0“时,则相应的中断请求可以向CPU 提出;否则,相应的中断请求被屏蔽,即不允许向CPU 提出中断请求。该寄存器的内容为8259A 的操作命令字OCW1,可以由程序设置或改变。
七、中断服务寄存器ISR:8位,当CPU 正在处理某个中断源的中断请求时,ISR 寄存器中的相应位置1。
八、用以比较正在处理的中断和刚刚进入的中断请求之间的优先级别,以决定是否产生多重中断或中断嵌套。 2.22 8255A 的工作原理: 一、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 。
二、8255A 的 工作方式:
方式0---基本输入输出方式;方式1---选通输入输出方式; 方式2---双向选通输入输出方式。 2.23 8253的工作原理:
8253是可编程的计数器/定时器, 其内部有三个独立的16位计数器/定时器通道, 每个计数器通道均可按6种不同的方式工作, 并且都可以按二进制或十进制计数。其CLK0~CLK2是计数器0~2的时钟脉冲输入端, GATE0~GATE2是门控脉冲输入端, OUT0~OUT2是输出端。 3、 总体设计和方案论证:
3.1交通信号灯实时控制和管理的总体设计 芯片选择及端口选择
1.用实验系统8255A 实现对信号灯的控制(所用端口自定);2位数码显示用8255A 实现控制。
2. 用实验系统8235的计数器0定时向实验系统主片8259A 的IRQ7请求中断,以实现要求的20秒、5秒钟的定时。 实验系统8253的计数器0的CLK2接OPCLK ,频率为1.19318MHZ ;GATE0已接 +5V; 定时采用软硬件相结合的方式实现。
⒊ 用实验系统的发光二极管模拟红绿灯。 注:8259A 的端口地址为:218H 、219H
8255A 的端口地址为:端口A-200H 、端口B-201H 、端口C-202H 、控制端口-203H
8253的端口地址为:计数器0-208H 、计数器1-209H 、计数器0-20AH 、控制寄存器0-20BH 。
本设计硬件由定时模块、发光二极管模块、数码管显示模块和紧急中断模块组成。定时模块采用硬件定时和软件定时相结合的方法,用8253定时/计数器定时1s ,再用软件计时实现所需的定时。发光二极管模块由8255控制发光二极管来实现。数码管显示模块由实验平台上的LED 显示模块实现。紧急中断模块是由单脉冲发生单元和8259中断控制器组成。 程序主要是由定时子程序、发光二极管显示子程序、数码管显示子程序和中断服务程序组成。包括对8253、8255以及8259等可编程器件的编程。 3.2 方案论证:
软件延时,设计简单,使用方便,本次设计采用了,定时器0进行计时,每1s 产生一次中断,可以准确的计时并方便8段数码管进行显示。
在本设计中程序每1秒请求一次中断,实现精确定时与数码管显示刷新。 4、硬件设计:
本课题的设计可通过实验平台上的一些功能模块电路组成,由于各模块电路内部已经连接,用户在使用时只要设计模块间电路的连接,因此,硬件电路的设计及实现相对简单。完整系统的硬件连接如图所示。硬件电路由定时模块、发光二极管模块、数码管显示模块和紧急中断模块组成。
图1 图2
时模块是由8253的计数器0来实现定时1s 。由8255输出来控制计数器的起停。OUT0接8259的IRQ7,定时完成申请中断,进入中断服务程序。 发光二极管显示模块由8255输出来控制发光二极管的亮灭。8255输出为低电平时,对应的发光二极管就点亮,否
实验平台上提供一组六个LED 数码管。本设计用2个数码管来倒计时。
中断模块是由单脉冲发生单元和8259中断控制器,单脉冲发生单元主要用来请求中断,然后做出情况处理。
5、软件设计思路:
设计数器0的计数初值为3000,由于CLK0接脉冲信号,频率为1.288MHZ ,所以每1s 中断一次。利用TIME 对不同的状态时间计数,用来实现计数器0对20秒钟,5秒钟的定时。中断子程序分为数码显示刷新部分和红绿黄灯各种状态切换部分。每进入中断即刷新LED 显示。
交通灯按正常状态切换工作,8253开始计数后每1s 发出一个中断申请信号,在中断子程序中先刷新数码管,然后判断当前状态,进入相应的处理程序进行处理。主程序的流程图如图所示。
3 主程序流程图
图4、定时中断服务子程序
定时中断子程序是本设计的重点,负责完成数码管输出数据刷新和各个状态的处理切换。中断子程序包括数码管输出数据刷新程序和各状态处理程序。数码管输出数据刷新子程序是实现倒计时20s ,用LED OUT表示输出的数据,TIME 用来软件计时1s ,就是计数10个100ms 。LED 输出是要将输出的数据转化为段选码。根据当前的状态跳转到相应的处理程序,在处理程序中完成定时和状态的切换。状态0、1、2、3、4、5的流程是一样的,先点亮对应的交通灯,再判断定时到了就可以切换了。状态0用于实现东西红、南北绿;状态1用来实现东西黄、南北绿;状态2用于实现东西绿、南北黄;状态3用于实现东西绿、南北红;状态4用于实现东西黄、南北红;状态5用于实现东西红、南北黄,间隔点亮和熄灭就可以了。状态0处理程序的流程图如图所示。
图5 状态0处理程序 6、源程序清单:
⒈本次设计中,选用8235的计数器0定时向实验系统主片8259A 的IRQ7请求中断。设置8253的计数器0每1s 请求一次中断,工作于模式3;8255的A 端口控制交通灯;数码管驱动程序采用指导老师提供的程序。
CODE SEGMENT 初始化程序:
DA TA SEGMENT ASSUME CS:CODE
START: LED DB 3FH,06H,5BH,4FH,66H,6DH,7DH,07H ;存
MOV AX,0 放七段代码表
DB 7FH,6FH MOV DS,AX TIME DB 19 MOV AX,OFFSET IRQ7 ;填中断矢量表
ADD AX,2000H D2 EQU 200H ;8255A 端口A
MOV SI,0FH*4 EA EQU 200H ;8255端口地址
EE EQU 203H MOV [SI],AX
MOV AX,0 CONTROL EQU 20BH ;8253端口地址
COUNT0 EQU 208H MOV [SI+2],AX COUNT1 EQU 209H CLI COUNT2 EQU 20AH MOV BX,0109H ;BH 表示要显示数的十位,BL DA TA ENDS 表示要显示数的个位 CODE SEGMENT MOV CX,0 ASSUME CS:CODE,DS:DATA MOV DX,0000H
MOV AL,80H ; 初始化8255 OUT EE,AL
MOV AL,00 ;对PC0口置0 OUT EE,AL
MOV AL,02 ;对PC1口置0 OUT EE,AL
MOV DX,218H ;8259初始化 MOV AL,00010010b OUT DX,AL MOV AL,0FH MOV DX,219H OUT DX,AL
MOV AL,03H ;选通用来显示个位的数码显示管 OUT EE,AL
MOV AL,[BX+SI] ;把十进制数所表示的个位数转换成对应的段码 OUT 201H,AL MOV AL,DH MOV SI,AX
MOV AL,01H ;选通用来显示十位的数码显示管 OUT EE,AL
MOV AL,02H OUT EE,AL
MOV AH,[BX+SI] ;把十进制数所表示的十位数转换MOV DX,200H ;交通灯初始状态为全黄 MOV AL,0BBH OUT DX,AL
MOV AL,00110110b ;初始化 8253 OUT CONTROL,AL NEXT:
MOV AX,3000 ; 定时1秒 MOV DX,COUNT0 OUT DX,AL MOV AL,AH
OUT COUNT0 ,AL JMP NEXT
MOV AX,DATA ;置DS 用数据段首址 MOV DS,AX
中断服务程序: A1: STI HLT JMP A1 IRQ7:
数码管显示程序 CMP CX,99 JZ DISP INC CX IRET DISP:
MOV CX,0 PUSH AX PUSH BX PUSH SI MOV DX,BX
MOV BX OFFSET LED ADD BX,2000H MOV AH,00 MOV AL,DL MOV SI,AX
MOV AL,00H OUT EE,AL 成对应的段码 OUT 201H,AH POP SI POP BX POP AX
CMP BL,00H JNZ L1
CMP BH,00H JZ COMPARE
MOV BX,0009H JMP COMPARE L1:DEC BX COMPARE: CMP DL,0 JZ STATE0 CMP DL 1 JZ STATE1 CMP DL,2 JZ STATE2 CMP DL,3 JZ STATE3 CMP DL,4 JZ STATE4 CMP DL 5 JZ STATE5 STA TE0:
MOV AL,7DH OUT D2,AL JMP CHANG1 STA TE1:
MOV AL,BDH OUT D2,AL JMP CHANGE1 STA TE2:
MOV AL,DBH OUT D2,AL JMP CHANGE1 STA TE3:
;比较个位数是否为0 ;比较十位数是否为0 :十位为0,各为变为9 ; 东西红,南北绿 ; 东西黄,南北绿 ;东西绿,南北黄
JZ M0 MOV AL,D7H ;东西绿,南北红
OUT D2 ,AL M0: JMP CHANGE1 MOV BX,O109H STA TE4: MOV TIME,19
JMP EXIT MOV AL,B7H ; 东西黄,南北红
OUT D2,AL M1: JMP CHANGE1 MOV BX,0004H STA TE5: MOV TIME,4
JMP EXIT MOV AL,7BH ; 东西红,南北黄
OUT D2,AL M2: CHANGE1: MOV BX,0004H CMP TIME,0 MOV TIME,4 JZ A2 JMP EXIT DEC TIME M3: JMP EXIT MOV BX,O109H A2: MOV TIME,19 INC DX JMP EXIT CMP DL,6 M4: JNZ A3 MOV BX,0004H MOV DL,0 MOV TIME,4 A3: JMP EXIT CMP DL,5 M5: JZ M5 MOV BX,0004H CMP DL,4 MOV TIME,4 JZ M4 JMP EXIT CMP DL,3 EXIT: JZ M3 MOV AL,20H CMP DL,2 OUT 218H,AL JZ M2 IRET CMP DL,1 CODE ENDS JZ M1 END START CMP DL,0
7、程序运行结果:
1.东西方向的红灯和南北方向的绿灯同时点亮20秒钟;
2.20秒钟后,东西方向的黄灯闪烁5秒钟。此时南北方向持续绿灯。
3.东西方向的黄灯闪烁5秒钟后,转为东西方向的绿灯和南北方向的黄灯点亮5秒钟; 4. 5秒钟后,转为南北方向的红灯闪烁20秒钟,此时东西方向仍维持绿灯。 5.东西方向的黄灯,南北方向红灯闪烁5秒钟。 6. 东西方向为红灯,南北方向为黄灯闪烁5秒钟。 7.5秒钟以后又转为1,重复执行
1、模拟交通灯系统设计 设计要求:
8253定时1秒向8259A 请求中断,在中断处理程序中:(1)对中断处理程序中用到的寄存器要压栈,并且要在中断返回前出栈;(2)时间缓冲区中的值减1秒;(3)时间缓冲区中的值减为0后,使红绿灯切换。 设计所需芯片:
(1)中断控制芯片(8259);(2)并行接口芯片(8255);(3)计数控制芯片(8253);(4)2位、4位、6位、8位信号线;(5)数码管;(6)16位CPU (8086/8088)。 ⒈ 了解交通灯管理的基本工作原理
⒉ 熟悉8259A 中断控制器的工作原理和应用编程
⒊ 熟悉8255A 并行接口的各种工作方式和应用
⒋ 熟悉8253计数器/定时器的工作方式及应用编程,掌握利用软硬件相结合定时的方法 ⒌ 掌握多位LED 显示问题的解决