4、软件设计
4.1程序流程图
芯片初始化 东西方向绿灯亮,南北方向红灯亮60秒 东西方向黄灯闪烁,南北方向红灯亮5秒 东西方向红灯亮,南北方向绿灯亮20秒 东西方向红灯亮,南北方向黄灯闪烁5秒 否 有键按下? 是 返回到DOS 结束 图4 程序流程图
10
4.2源程序清单和注释
IOY0 EQU 0DA00H ;片选IOY0对应的端口始地址
MY8255_A EQU IOY0+00H*4 ;8255的A口地址 MY8255_B EQU IOY0+01H*4 ;8255MY8255_C EQU IOY0+02H*4 ;8255MY8255_MODE EQU IOY0+03H*4 ;8255STACK1 SEGMENT STACK DW 256 DUP(?) STACK1 ENDS DATA SEGMENT
LA DB ? ;LB DB ? DATA ENDS CODE SEGMENT
ASSUME CS:CODE,DS:DATA START: MOV AX,DATA MOV DS,AX
MOV DX,MY8255_MODE ; MOV AL,80H ;为输出
OUT DX,AL
LOOP1: MOV DX,MY8255_A ;方向绿灯亮,南方向红灯亮
11
的B口地址 的C口地址 的控制寄存器地址 定义数据变量 定义8255工作方式 工作方式0,A口和B口写A口发出的数据,东
MOV AL,3CH OUT DX,AL
MOV DX,MY8255_B ;写B口发出的数据,西方向绿灯亮,北方向红灯亮 MOV AL,3CH OUT DX,AL CALL DALLY1
L1: MOV DX,MY8255_A ;向黄灯亮,南方向红灯亮 MOV AL,0FCH OUT DX,AL
MOV DX,MY8255_B ;向黄灯亮, 北方向红灯亮 MOV AL,0FCH OUT DX,AL CALL DALLY2
MOV DX,MY8255_A ;向黄灯灭,南北方向红灯亮 MOV AL,30H OUT DX,AL
MOV DX,MY8255_B ;向黄灯灭,南北方向红灯亮 MOV AL,30H OUT DX,AL CALL DALLY2
写A口发出的数据,东方写A口发出的数据,西方写A口发出的数据,东方写B口发出的数据,西方 12
LOOP L1
MOV DX,MY8255_A ;写A口发出的数据,东方向红灯亮,南方向绿灯亮 MOV AL,0C3H OUT DX,AL
MOV DX,MY8255_B ;向红灯亮,北方向绿灯亮 MOV AL,0C3H OUT DX,AL CALL DALLY3
L2: MOV DX,MY8255_A ;向黄灯亮,东方向红灯亮 MOV AL,0F3H OUT DX,AL
MOV DX,MY8255_B ;向黄灯亮,西方向红灯亮 MOV AL,0F3H OUT DX,AL CALL DALLY2
MOV DX,MY8255_A ;北方向黄灯灭,东方向红灯亮 MOV AL,0C0H OUT DX,AL
MOV DX,MY8255_B ;北方向黄灯灭,西方向红灯亮
写B口发出的数据,西方写A口发出的数据,南方写B口发出的数据,北方写A口发出的数据,南写B口发出的数据,南 13
MOV AL,0C0H OUT DX,AL CALL DALLY2 LOOP L2
MOV AH,1 ;判断是否有按键按下,调用功能号1
INT 16H ;ROM BIOS JZ LOOP1 ;有则退出
QUIT: MOV AX,4C00H ; INT 21H ;DOS DALLY PROC NEAR ; PUSH CX PUSH AX MOV CX,0FFFH D1: MOV AX,0FFFFH D2: DEC AX JNZ D2 LOOP D1 POP AX POP CX RET DALLY ENDP
DALLY1 PROC NEAR ;方向红灯亮,南北方向绿灯亮
14
功能调用 无按键则跳回继续循环,结束程序退出 系统功能调用 软件延时子程序 软件延时子程序,东西