本文参考博主@启航hokit的微机原理-TPC-ZK板-交通灯模拟系统超详细(含硬件连线)这篇文章,代码几乎没有修改。
以下是完整的代码:
DATAS SEGMENT
MESS DB 'TPCA INTERRUPT3!',0DH,0AH,'$'
WARN DB 'WARNING!',0DH,0AH,'$'
tip DB '---Traffic light simulation system---',0DH,0AH,'$'
TIPS DB '************************************* ',0DH,0AH,
'* 1-night:[n] * ',0DH,0AH,
'* * ',0DH,0AH,
'* 2-change light:[c] *',0DH,0AH,
'* * ',0DH,0AH,
'* 3-emergency red light[e] *',0DH,0AH,
'************************************* ',0DH,0AH,'$'
D8255A EQU 288H ;常量
D8255B EQU 289H
D8255C EQU 28AH
D8255S EQU 28BH
LIGHT DB 34H ; 0011 0100
DB 54h ; 0101 0100
DB 91H ;1001 0001
DB 92H ; 1001 0010
DB 0FFH
NUM DB 6FH,7FH,07H,7DH,6DH,66H,4FH,5BH,06H,3FH ;9,8,7,6,5,4,3,2,1,0
TENS DB 5BH,06H,3FH ;2,1,0
YELLOWNUM DB 5BH,06H,3FH ;2,1,0 倒计时三秒
DATAS ENDS
STACKS SEGMENT
X DB 100 DUP(?)
STACKS ENDS
CODES SEGMENT
ASSUME CS:CODES,DS:DATAS,SS:STACKS
START:
MOV AX,DATAS
MOV DS,AX ;载入
MOV DX,OFFSET tip
MOV AH,09H
INT 21H
MOV DX,OFFSET TIPS
MOV AH,09H
INT 21H
;设置8254
mov dx,283h
mov al,36h ;00110110 方式三,方波
out dx,al
mov ax,1000
mov dx,280h
out dx,al
mov al,ah
out dx,al
mov dx,283h
mov al,76h ;01110010 方式三,方波,
out dx,al
mov dx,281h
mov ax,1000
out dx,al
mov al,ah
out dx,al
;写入方式控制字到控制端口
MOV DX,D8255S
MOV AL,80H ;方式0
OUT DX,AL
MAINLP:
CALL MAIN