交通灯——汇编课程设计

交通灯——汇编课程设计
交通灯——汇编课程设计

XI`AN TECHNOLOGICAL UNIVERSITY 课程设计报告

西安工业大学课程设计(论文)用纸

西

向 南

北 向 西安工业大学课程设计报告

一、设计目的

1. 掌握交通灯的工作原理。

2. 进一步巩固8259、8254以及8255的应用。掌握综合设计能力。

二、设计任务与要求

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

2. 设计要求

(1) 硬件测试通过。接线完成。三个芯片分别测试通过。8259能够实现中

断。8254能够实现呼吸灯。8255能够控制L8—L15的亮与灭。

(2) 1S的定时中断程序能够进入。

(3) 交通灯控制程序

(4) 按KK1按钮开始工作。按KK2按钮停止工作。

(5) 代码转换程序。

(6) LED数码管动态显示程序。

(7) 倒计时程序。

(8) 白天/黑夜功能。

(9) 完善程序。

三、设计方案

1、设计思路

东西南北各三盏灯,每三盏分别为红、黄、绿三种颜色,总共十二盏灯,而实际情况下,东西方向灯亮灭一致,南北方向灯亮灭一致,故只需要按东西为一组,南北为一组,两组交错亮灭来设计控制系统,即可达到交通灯系统的控制目的。根据以上分析那么只需要控制东南或者西北六盏灯亮灭规律就能实现控制,另外两组对应一致就行了。

2、使用的I/O设备

I/O设备使用了KK1+键、8个LED小灯泡、共阴极8段显示数码管。

3、使用的芯片

使用了8259A中断控制器、8255并行输入输出接口芯片、8254定时/计数器芯片。

4、芯片的作用

8259A用于控制中断申请以及发生中断时执行对应的子程序,8255并行接口芯片用于向I/O设备输出控制灯泡或数码管点亮的数据代码,8254定时器利用频率脉冲来实现定时申请中断和动态显示8段数码管。

四、硬件线路设计

1、硬件接线图

2、端口地址说明

表6-1 实验箱8259端口地址说明

表6-2 实验箱IO端口地址说明

五、软件设计

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

DA TA 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

DA TA ENDS

SSTACK SEGMENT PARA STACK 'STACK'

DW 32 DUP(?)

SSTACK ENDS

CODE SEGMENT

ASSUME CS:CODE, DS:DATA,SS: SSTACK

START: MOV AX,DA TA

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、最终程序清单

P8255A EQU 0640H

P8255B EQU 0642H

P8255C EQU 0644H

P8255M EQU 0646H

TIMER0 EQU 0600H

TIMER1 EQU 0602H

TIMER2 EQU 0604H

TIMERM EQU 0606H

DA TA 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 ;动态显示位置控制COUNT DB 00H

CTDOWN0 DW 20,5,25,5

POINT DB 01H

CTDOWN2 DB 100

CTDOWN3 DB 100

STA DB 01H

DA TA ENDS

SSTACK SEGMENT PARA STACK 'STACK'

DW 100 DUP(?)

SSTACK ENDS

CODE SEGMENT

ASSUME CS:CODE, DS:DATA,SS: SSTACK START: MOV AX,DA TA

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,11H

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, 11H

OUT 0A1H, AL ;ICW4

;---------------------------------------------------------------

MOV AL, 6FH ;OCW1 = 01101111B

OUT 21H, AL

MOV AL, 0FDH ;OCW1 = 1111 1101B

OUT 0A1H, AL

STI

;--------------------------------------------------------------- 定时器芯片INITC: MOV DX, TIMERM

MOV AL, 36H

OUT DX, AL

MOV DX, TIMER0 ;计数器0

MOV AX, 5000

OUT DX, AL

MOV AL, AH

OUT DX, AL

MOV DX, TIMERM

MOV AL, 76H

OUT DX, AL

MOV DX, TIMER1 ;计数器1

MOV AX, 18432

OUT DX, AL

MOV AL, AH

OUT DX, AL

;-------------------------------------------------------------

MOV DX, P8255M ;8255

MOV AL, 80H

OUT DX, AL

;----------------------------------------------------------

BEGIN: NOP

AA1: JMP AA1

;--------------------------------------------------------------- CONVERT PROC

PUSH BX

PUSH AX

MOV BX, OFFSET CTDOWN0

MOV AL, POINT

CMP AL, 01H

JZ P1

CMP AL, 02H

JZ P2

CMP AL, 03H

JZ P3

CMP AL, 04H

JZ P4

P1: MOV AX, [BX]

MOV CL, 10

DIV CL

JMP T1

P2: MOV AX, [BX+2]

MOV CL, 10

DIV CL

JMP T1

P3: MOV AX, [BX+4]

MOV CL, 10

DIV CL

JMP T1

P4: MOV AX, [BX+6]

MOV CL, 10

DIV CL

JMP T1

T1: MOV BX, OFFSET DISCODE

XLAT

MOV CH, AL ;十位

MOV AL, AH

XLAT

MOV CL, AL ;个位

POP AX

POP BX

RET

CONVERT ENDP

;----------------------------------------------------------------------

DISPL Y1 PROC NEAR ; 显示第一位PUSH AX

PUSH DX

MOV DX, P8255C

MOV AL, 11111110B ;十位

OUT DX, AL

MOV DX, P8255A

CALL CONVERT

MOV AL, CH

OUT DX, AL

POP DX

POP AX

RET

DISPL Y1 ENDP

DISPL Y2 PROC NEAR ; 显示第二位PUSH AX

PUSH DX

MOV DX, P8255C

MOV AL, 11111101B ;个位

OUT DX, AL

MOV DX, P8255A

MOV AL, CL

OUT DX, AL

POP DX

POP AX

RET

DISPL Y2 ENDP

DISPL Y PROC ;数码管动态显示代码

PUSH AX

MOV AL,STA

TEST AL,01H

JZ EVEN1

ODD: MOV STA,0

CALL DISPL Y1

JMP DONE

EVEN1: MOV STA,01H

CALL DISPL Y2

DONE: POP AX

RET

DISPL Y ENDP

;----------------------------------------------------------------------

MIR7 PROC NEAR

PUSH DX

STI

L1: MOV DX, P8255B ;南北绿,东西红

MOV AL, 38H ;0011 1000

OUT DX, AL ;Light

MOV AL, 01H ;POINT = 1

MOV POINT, AL

MOV COUNT, 0

MOV AL, 2BH ;OCW1 = 00101011B 开SIR2 5ms数码管动态显示中断OUT 21H, AL

MOV AL, 0FDH ;OCW1 = 1111 1101B 也打开MIR6

OUT 0A1H, AL

WAIT20: CMP COUNT, 20

JB WAIT20

MOV DX, P8255B;亮

MOV AL, 48H ;0100 1000

OUT DX, AL

INC POINT ; POINT = 2

MOV COUNT, 0

WAIT1: CMP COUNT, 1

JB WAIT1

MOV DX, P8255B ;灭

MOV AL, 08H

OUT DX, AL

MOV COUNT, 0

WAIT2: CMP COUNT, 1

JB WAIT2

MOV DX, P8255B ;亮

MOV AL, 48H

OUT DX, AL

MOV COUNT, 0

WAIT3: CMP COUNT, 1

JB WAIT3

MOV DX, P8255B ;灭

MOV AL, 08H

OUT DX, AL

MOV COUNT, 0

WAIT4: CMP COUNT, 1

JB WAIT4

MOV DX, P8255B;亮

MOV AL, 48H

OUT DX, AL

MOV COUNT, 0

WAIT5: CMP COUNT, 1

JB WAIT5

MOV DX, P8255B ;南北红,东西绿

MOV AL, 083H ;1000 0011

OUT DX, AL ;Light

;-------------------------------------------------------

INC POINT ;POINT = 3

MOV COUNT, 0

WAIT40: CMP COUNT, 25

JB WAIT40

INC POINT ;POINT = 4 MOV COUNT, 0

WAIT12: CMP COUNT, 1

JB WAIT12

MOV DX, P8255B ;灭

MOV AL, 80H

OUT DX, AL

MOV COUNT, 0

WAIT22: CMP COUNT, 1

JB WAIT22

MOV DX, P8255B ;亮

MOV AL, 84H

OUT DX, AL

MOV COUNT, 0

WAIT32: CMP COUNT, 1

JB WAIT32

MOV DX, P8255B ;灭

MOV AL, 80H

OUT DX, AL

MOV COUNT, 0

WAIT42: CMP COUNT, 1

JB WAIT42

MOV DX, P8255B ;亮

MOV AL, 84H

OUT DX, AL

MOV COUNT, 0

WAIT52: CMP COUNT, 1

JB WAIT52

MOV COUNT, 0

SWITCH: MOV BX, OFFSET CTDOWN0

MOV BYTE PTR[BX], 20

MOV BYTE PTR[BX+2], 5

MOV BYTE PTR[BX+4], 25

MOV BYTE PTR[BX+6], 5

JMP L1

POP DX

IRET

MIR7 ENDP

;--------------------------------------------------------------- MIR6 PROC NEAR

PUSH AX

PUSH BX

INC COUNT

MOV BX,OFFSET CTDOWN0

MOV AH,POINT

CMP AH,01H

JZ M1

CMP AH,02H

JZ M2

CMP AH,03H

JZ M3

CMP AH,04H

JZ M4

JMP QUIT6

M1: DEC BYTE PTR[BX]

JMP QUIT6

M2: DEC BYTE PTR[BX+2]

JMP QUIT6

M3: DEC BYTE PTR[BX+4]

JMP QUIT6

M4: DEC BYTE PTR[BX+6]

JMP QUIT6

QUIT6: MOV AL,20H

OUT 20H,AL

POP BX

POP AX

IRET

MIR6 ENDP

SIR1 PROC NEAR

PUSH AX

PUSH DX

STI

CALL DISPL Y

MOV AL, 20H

OUT 0A0H, AL

OUT 20H, AL

POP DX

POP AX

IRET

SIR1 ENDP

CODE ENDS

END START

七、调试过程

相关主题
相关文档
最新文档