交通灯控制——汇编小设计

设计任务:
设计一套十字路口的交通灯管理系统。按照顺序时间控制原则,利用中断控制器和定时器。采用定时中断方式设计实现。东西向和南北向均有红黄绿灯。具备倒计时功能。
南北向通行时间20秒,准备时间5秒。在准备时间里黄灯闪烁3次,闪烁频率为1
秒,周而复始。东西向通行时间40秒,准备时间5秒。在准备时间里黄灯闪烁3次,
闪烁频率为1秒,周而复始。东西向参照下边的时序控制图。

在这里插入图片描述
设计要求如下:

  1. 硬件测试通过。8259能够实现中断。8254能够实现呼吸灯。8255能够控制L8—L15的亮与灭。

  2. 交通灯控制程序。
    3.LED数码管动态显示程序。

  3. 二进制到十进制的代码转换程序。

  4. 十进制到显示代码的查表转换程序。

  5. 倒计时程序。

  6. START和STOP代码。

  7. 白天/黑夜功能。(附加功能)

  8. 完善程序。
    三、设计方案
    1、设计思路。
    东西南北各三盏灯,每三盏分别为红、黄、绿三种颜色,总共十二盏灯,而实际情况下,东西方向灯亮灭一致,南北方向灯亮灭一致,故只需要按东西为一组,南北为一组,两组交错亮灭来设计控制系统,即可达到交通灯系统的控制目的。根据以上分析那么只需要控制东南或者西北六盏灯亮灭规律就能实现控制,另外两组对应一致就行了。
    在这里插入图片描述
    2、使用的I/O设备
    KK1+键、8个LED小灯泡、共阴极8段显示数码管。
    3、使用的芯片
    8259A中断控制器、8255并行输入输出接口芯片、8254定时/计数器芯片
    4、芯片的作用
    8259A用于控制中断申请以及发生中断时执行对应的子程序,8255并行接口芯片用于向I/O设备输出控制灯泡或数码管点亮的数据代码,8254定时器利用频率脉冲来实现定时申请中断和动态显示8段数码管。
    四、硬件线路设计
    1、硬件接线图
    在这里插入图片描述
    2、端口地址说明
    在这里插入图片描述
    在这里插入图片描述
    五、软件设计
    1、程序流程图
    在这里插入图片描述
    2、R变量和M变量说明
    P8255A、P8255B、P8255C、P8255M 为8255并行输入输出接口芯片的四个端口地址。
    TIMER0、TIMER1、TIMER2、TIMERM 为8254计时器的四个端口地址。
    DISCODE 为共阴极8段数码显示管,从0-F的显示代码。
    COUNT 为计数变量,用于记录时间。
    CTDOWN0 为倒计时时间变量。
    POINT 为用于表示红绿灯4种状态的标志变量。
    STA 为用于数码管动态显示的标志变量。

    3、程序说明
    此程序利用5ms的中断实现数码管的动态显示;1s的中断实现每秒使变量COUNT加一,来记录当前时刻的秒数;KK1+ 按键用于申请MIR7中断,来实现交通灯开启功能。

六、源程序
1、参考程序

P8255A 		EQU   	0600H 
P8255B 		EQU   	0602H 
P8255C 		EQU   	0604H 
P8255M	 	EQU   	0606H
TIMER0    	EQU  	06C0H	
TIMER1    	EQU  	06C2H
TIMER2	   	EQU  	06C4H
TIMERM 	EQU  	06C6H
DATA 		SEGMENT 
DISCODE	DB		3FH,06H,5BH,4FH,66H,6DH,7DH,07H	;0--7的显示代码
				DB		7FH,6FH,77H,7CH,39H,5EH,79H,71H		;8--F的显示代码
INDEX		DB		00H,00H,00H,00H,00H,00H,0CCH,0CCH
DYNBUFF	DB      00H,00H,00H,00H,00H,00H,00H,00H 	;动态显示缓冲
LOCATN		DB      00H,00H,00H,00H,00H,00H,00H,00H 	;动态显示位置控制
COUNT0		DB		100
CTDOWN0	DB		100
CTDOWN1	DB		100
CTDOWN2	DB		100
CTDOWN3	DB		100
DATA 		ENDS
SSTACK		SEGMENT	PARA  STACK  'STACK'
				DW		32	DUP(?)
SSTACK		ENDS
CODE 		SEGMENT 
			ASSUME 	CS:CODE, DS:DATA,SS: SSTACK			
   START:	MOV		AX,DATA	
			MOV		DS,AX	
;--------------------------------------------------------------- 8255初始化
INITA:	NOP
;--------------------------------------------------------------- 中断芯片
INITB:	PUSH		DS
MOV		AX,0000H	
			MOV		DS,AX		
			MOV		AX,OFFSET	 MIR7
			MOV		SI,003CH
			MOV		[SI],AX
			MOV		AX,CS
			MOV		SI,003EH
			MOV		[SI],AX
			MOV		AX,OFFSET	 MIR6
			MOV		SI,0038H
			MOV		[SI],AX
			MOV		AX,CS
			MOV		SI,003AH
			MOV		[SI],AX
	MOV 		AX, OFFSET	 SIR1 
MOV 		SI, 00C4H 
MOV 		[SI], AX 
MOV		AX, CS 
MOV 		SI, 00C6H 
MOV	 	[SI], AX 
			CLI	
			POP			DS		
;--------------------------------------------------------------- 主
			MOV		AL,11H
			OUT		20H,AL			;ICW1
			MOV		AL,08H
			OUT		21H,AL			;ICW2
			MOV		AL,04H
			OUT		21H,AL			;ICW3
MOV		AL,01H
			OUT		21H,AL			;ICW4
;-------------------------------------------------------------初始化从片8259 
MOV 		AL, 11H 
OUT 		0A0H, AL 		;ICW1 
MOV 		AL, 30H 
OUT	 	0A1H, AL 		;ICW2 
MOV 		AL, 02H 
OUT 		0A1H, AL		 ;ICW3 
MOV 		AL, 01H 
OUT 		0A1H, AL 		;ICW4
 ;--------------------------------------------------------------- 
			MOV		AL,2BH			;OCW1 = 00101011B
	OUT		21H,AL	
	MOV	 	AL, 0FDH 		;OCW1 = 1111 1101B
	OUT 		0A1H,AL 		
			
			STI
	AA1:	NOP
			JMP			AA1
;--------------------------------------------------------------- 定时器芯片
INITC:	MOV		DX, TIMERM
			MOV		AL,36H
			OUT		DX,AL
			MOV		DX, TIMER0			;计数器0
			MOV		AL,0E8H
			OUT		DX,AL
			MOV		AL,03H
			OUT		DX,AL
			MOV		DX, TIMERM
			MOV		AL,76H
			OUT		DX,AL
			MOV		DX, TIMER1			;计数器1
			MOV		AL,0E8H
			OUT		DX,AL
			MOV		AL,03H
			OUT		DX,AL
;--------------------------------------------------------------- 
	BEGIN:	NOP
	AA2:	JMP			AA2
;--------------------------------------------------------------- 
	MIR7	PROC		NEAR
			PUSH		AX
			PUSH		DX
			MOV		AX,0137H
			INT			10H
			MOV		AX,0120H
			INT			10H

			MOV		AL,20H
			OUT		20H,AL
			POP			DX
			POP			AX			
			IRET
	MIR7	ENDP
;--------------------------------------------------------------- 
MIR6	PROC		NEAR
			PUSH		AX
			PUSH		DX

			MOV		AL,20H
			OUT		20H,AL
			POP			DX
			POP			AX			
			IRET
	MIR6	ENDP	
SIR1	PROC		NEAR
			PUSH		AX
			PUSH		DX

			MOV 		AL, 20H 
			OUT 		0A0H, AL 
			OUT 		20H, AL
			POP			DX
			POP			AX			
			IRET
	SIR1	ENDP	
	CODE	ENDS
			END	START		
	2、最终程序清单
   ATIMER0      EQU     0600H       ;IOY0 
TIMER1      EQU     0602H 
TIMER2      EQU     0604H 
TIMERM      EQU     0606H
P8255A      EQU     0640H       ;IOY1
P8255B      EQU     0642H
P8255C      EQU     0644H 
P8255M      EQU     0646H
;---------------------------------------------------------------
DATA        SEGMENT 
DISCODE     DB      3FH,06H,5BH,4FH,66H,6DH,7DH,07H     ;0--7的显示代码
            DB      7FH,6FH,77H,7CH,39H,5EH,79H,71H     ;8--F的显示代码
DECIMAL     DB      00H,00H,00H,00H,00H,00H,0CCH,0CCH	;十进制数,即查表用下标
VRAM	    DB      00H,00H,00H,00H,00H,00H,00H,00H     ;动态显示代码缓冲
LOCATN      DB      00H,00H,00H,00H,00H,00H,00H,00H     ;动态显示位置控制
HOUR        DB      12          ;小时
MINUTE      DB      34          ;分钟
SECOND      DB      50          ;秒
			
COUNT       DB      100

STA         DB      01H
TIM			DB		23;TIME
;HH			DW		21;
STB1		DB		3FH
STB2		DB		3FH

CLKSTA      DB      10000000B	;步进电机节拍状态
DATA        ENDS
SSTACK      SEGMENT PARA    STACK   'STACK'	;? by 徐春秋,常玻
            DW      32  DUP(?)
SSTACK      ENDS
CODE        SEGMENT 
            ASSUME  CS:CODE, DS:DATA,SS: SSTACK			
START:      MOV     AX,DATA	
            MOV     DS,AX
;--------------------------------------------------------------- 8255初始化
INITA:      MOV     DX, P8255M 
            MOV     AL, 80H		;注意,控制字根据各自的题目需求确定
            OUT     DX, AL 
            MOV     DX, P8255B 
            MOV     AL, 0FFH 
            OUT     DX, AL
 
AA1:       	;INC		TIM

			CALL 	CONVERT
		
			
            JMP     AA1
;------------------------------
SWITCH      PROC    NEAR				; 
            PUSH    AX
            PUSH    DX
K0:         NOP 
K1:         NOP
K2:         NOP
K3:         NOP
K4:         NOP
K5:         NOP				
            POP     DX
            POP     AX
            RET
SWITCH      ENDP
LEDLAMP     PROC    NEAR				; 
            PUSH    AX
            PUSH    DX


            
            POP     DX
            POP     AX
            RET
LEDLAMP     ENDP
;---------------------------------------------------------------
;电子时钟或交通灯题目:用于动态显示。
;---------------------------------------------------------------
DISPLY      PROC    NEAR				; 
            PUSH    AX
            PUSH    DX
            MOV     DX,P8255C
            MOV     AL,01111111B
            OUT     DX,AL
            MOV     DX,P8255B
            MOV     AL,06H
            OUT     DX,AL
            POP     DX
            POP     AX
            RET
DISPLY      ENDP 
;---------------------------------------------------------------
DISPLY1      PROC    NEAR				; 
            PUSH    AX
            PUSH    DX
            MOV     DX,P8255C
            MOV     AL,10111111B
            OUT     DX,AL
            MOV     DX,P8255B
            MOV     AL,5BH
            OUT     DX,AL
            POP     DX
            POP     AX
            RET
DISPLY1     ENDP 


;---------------------------------------------------------------
;抢答器题目:用于START和RESET子程序合二为一。 
;交通灯题目:用于动态显示。
;---------------------------------------------------------------
ALTER       PROC    NEAR
            PUSH    AX
            MOV     AL,STA
            TEST    AL,01H
            JZ      EVEN1
ODD1:       MOV     STA,0
            CALL    DISPLY
            JMP     DONE2
EVEN1:      MOV     STA,01H
            CALL    DISPLY1
DONE2:      POP     AX
            RET
ALTER       ENDP
SUBR1       PROC    NEAR				; 
            PUSH    AX
            PUSH    DX
            NOP
            POP     DX
            POP     AX
            RET
SUBR1       ENDP
SUBR2       PROC    NEAR				; 
            PUSH    AX
            PUSH    DX
            NOP
            POP     DX
            POP     AX
            RET
SUBR2       ENDP  
JUDGE		PROC	NEAR
			PUSH			DX
			PUSH			AX
			MOV			DX,P8255A
			CMP			TIM,0	
			JE   		P0
			CMP			TIM,20	
			JE   		P20
			CMP			TIM,21	
			JE 	P21
			CMP 		TIM,22	
			JE 	P22
			CMP 		TIM,23	
			JE 	P23	
			CMP 		TIM,24	
			JE 	P24
			CMP 		TIM,25	
			JE 	P25
			CMP 		TIM,65	
			JE 	P65	
			CMP 		TIM,66
			JE 	P66
			CMP 		TIM,67
			JE 	P67
			CMP 		TIM,68
			JE 	P68
			CMP 		TIM,69
			JE 	P69	
			CMP 		TIM,70
			JE 	P70	
			JMP			AAA1		
BACK:		NOP
AAA1:		POP		DX	
			POP		AX
			RET
JUDGE		ENDP		
;\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\[

	
P0:	
	MOV			AL,83H
	OUT			DX,AL
	JMP			P13
P20:	
	MOV			AL,84H
	OUT			DX,AL
	JMP			P13
P21:	MOV			AL,80H
	OUT			DX,AL
	JMP			P13	
P22:	MOV			AL,84H
	OUT			DX,AL
	JMP			P13			
P23:	MOV			AL,80H
	OUT			DX,AL
	JMP			P13	
P24:	MOV			AL,84H
	OUT			DX,AL	
	JMP			P13	
P25:	MOV			AL,38H
	OUT			DX,AL
	JMP			P13	
P65:	MOV			AL,48H
	OUT			DX,AL
	JMP			P13	
P66:	MOV			AL,08H
	OUT			DX,AL
	JMP			P13
P67:	MOV			AL,48H	
	OUT			DX,AL
	JMP			P13	
P68:MOV			AL,08H
	OUT			DX,AL
	JMP			P13	
P69:MOV			AL,48H
	OUT			DX,AL
	JMP			P13		
P70:MOV			AL,83H
	OUT			DX,AL
	MOV			TIM,0
P13:JMP			BACK

;-------------------------------------------------------------
CONVERT		PROC
			PUSH	AX
			PUSH	DX
			MOV		AL,TIM
			CBW
			MOV		CL,10
			DIV		CL
			LEA		BX,DISCODE
			XLAT
			MOV		STB1,AL
			MOV		AL,AH
			XLAT
			MOV		STB2,AL
			POP		DX
			POP		AX
			RET
CONVERT		ENDP
CODE        ENDS
            END     START

七、调试过程
实验连线:
参照8254定时/计数器应用实验,来设计8254与系统的连线。
参照8259中断控制实验,来设计8259的连线。
参照8255并行接口实验,来设计8255与系统的连线。
8254的其他连线,参照相关实验。
数码管与矩阵键盘的接线,参考相关实验。
PC口控制交通灯。用两芯线,分别连接PC7PC6----L15L14,PC5PC4----L11L10。 模拟南北向。用四芯线连接PC3PC2PC1PC0----L5L4L3L2,模拟东西向。
硬件测试:
1、数码管静态显示程序:DISPLY1、DISPLY2。ALTER。
2、数码管动态显示程序ALTER。(在MIR7中CALL ALTER)
3、静态交通灯程序LIGHT。
4、定时中断方式秒信号和动态交通灯程序LIGHT。(在MIR6中CALL LIGHT)
5、二进制到十进制的代码转换程序CONVERT1。
6、十进制到显示代码的代码转换程序CONVERT2。
7、倒计时功能。
8、启动程序STAT(即MIR7)
9、停止程序STOP(即SIR1)
10.启停合一程序(即SIR1,奇数次按动为STAT,偶数次按动为STOP)。

倒计时显示:
东西向通行:
在这里插入图片描述
南北向通行:在这里插入图片描述

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值