基于8086的汽车信号灯控制系统

yuanliangxiao123 2016-05-20 04:32:10
运行图如下:

代码如下:
DATA SEGMENT
IO8255A EQU 0F0H ;8255的A口地址
IO8255B EQU 0F2H ;8255的B口地址
IO8255C EQU 0F4H ;8255的B口地址
IO8255CON EQU 0F6H ;8255的控制寄存器地址

IO8253_0 EQU 0E8H ;8253的0通道
IO8253_1 EQU 0EAH ;8253的0通道
IO8253_2 EQU 0ECH ;8253的0通道
IO8253CON EQU 0EEH ;8253的控制寄存器
DATA ENDS
STACK1 SEGMENT
STA DW 50 DUP(?)
STACK1 ENDS
CODE SEGMENT
ASSUME CS:CODE,DS:DATA,ES:DATA,SS:STACK1
MAIN PROC FAR
START: PUSH DS
SUB AX,AX
PUSH AX
MOV AX,DATA
MOV DS,AX
MOV ES,AX
MOV DX,IO8253CON
MOV AL,00110111B ;8253,通道0初始化, 16位读写,方式三,BCD计数
OUT DX,AL

MOV DX,IO8253_0
MOV AL,00H
OUT DX,AL
MOV AL,50H
OUT DX,AL
MOV DX,IO8253CON
MOV AL,01110111B ;8253,通道1初始化
OUT DX,AL
MOV DX,IO8253_1
MOV AL,13H
OUT DX,AL
MOV AL,00H
OUT DX,AL
MOV DX,IO8255CON
MOV AL,8BH ;8255控制字,8255初始化,A口输出,B口输入,C低输入 ,方式0
OUT DX,AL
S: MOV DX,IO8255B ;读B口开关状态
IN AL,DX
MOV CX,0020H
S0: CMP AL,0
JNZ S1
MOV DX,IO8255A
MOV AL,11000000B
OUT DX,AL
S1: CMP AL,01H
JNZ S2

MOV DX,IO8255C
IN AL,DX
TEST AL,01H ;检测c口状态
MOV DX,IO8255A
JNZ LEFT

MOV AL,11000000B
OUT DX,AL
JMP S
LEFT: MOV AL,11010101B ;B输出六盏灯状态:闪,灭,闪,灭,闪,灭
OUT DX,AL
JMP S

S2: CMP AL,02H
JNZ S3

MOV DX,IO8255C
IN AL,DX
TEST AL,01H ;检测c口状态
MOV DX,IO8255A
JNZ RIGHT
MOV AL,11000000B
OUT DX,AL
JMP S
RIGHT: MOV AL,11101010B ;六盏灯状态:灭,闪,灭,闪,灭,闪
OUT DX,AL
JMP S
S3: CMP AL, 04H
JNZ S4

MOV DX,IO8255C
IN AL,DX
TEST AL,02H ;检测c口状态
MOV DX,IO8255A
JNZ HURRY
MOV AL,11111111B
OUT DX,AL
JMP S
HURRY: MOV AL,11000000B ;六盏灯状态:闪,闪,闪,闪,闪,闪
OUT DX,AL
JMP S
S4: CMP AL,08H
JNZ S5
MOV DX,IO8255A
BREAK: MOV AL,11110000B ;六盏灯状态:灭,灭,灭,灭,亮,亮
OUT DX,AL
CALL DELAY0
JMP S
S5: CMP AL,09H
JNZ S6

MOV DX,IO8255C
IN AL,DX
TEST AL,01H ;检测c口状态
MOV DX,IO8255A
JNZ LEFTBREAK
MOV AL,11100000B
OUT DX,AL
JMP S
LEFTBREAK: MOV AL,11110101B ;六盏灯状态:闪,灭,闪,灭,闪,亮
OUT DX,AL
JMP S
S6: CMP AL,0AH
JNZ S7

MOV DX,IO8255C
IN AL,DX
TEST AL,01H ;检测c口状态
MOV DX,IO8255A
MOV AL,11010000B
OUT DX,AL
JMP S
RIGHTBREAK: MOV AL,11111010B ;六盏灯状态:灭,闪,灭,闪,亮,闪
OUT DX,AL
JMP S
S7: CMP AL,0CH
JNZ S8

MOV DX,IO8255C
IN AL,DX
TEST AL,02H ;检测c口状态
MOV DX,IO8255A
JNZ HURRYBREAK
MOV AL,11110000B
OUT DX,AL
JMP S
HURRYBREAK: MOV AL,11111111B ;六盏灯状态:闪,闪,闪,闪,亮,亮
OUT DX,AL
JMP S
S8: CMP AL,0DH
JNZ S9

MOV DX,IO8255C
IN AL,DX
TEST AL,02H ;检测c口状态
MOV DX,IO8255A
JNZ HURRYLEFTBREAK
MOV AL,11100000B
OUT DX,AL
JMP S
HURRYLEFTBREAK: MOV AL,11111111B ;六盏灯状态:闪,闪,闪,闪,闪,亮
OUT DX,AL
JMP S
S9: CMP AL,0EH
JNZ S10

MOV DX,IO8255C
IN AL,DX
TEST AL,02H ;检测c口状态
MOV DX,IO8255A
JNZ HURRYRIGHTBREAK
MOV AL,11010000B
OUT DX,AL
JMP S
HURRYRIGHTBREAK: MOV AL,11111111B ;六盏灯状态:闪,闪,闪,闪,亮,闪
OUT DX,AL
JMP S
S10: CMP AL,10H
JNZ S11
STOP: MOV DX,IO8255C
IN AL,DX
TEST AL,02H ;检测c口状态

JNZ QQ
MOV DX,IO8255A
MOV AL,11111111B ;六盏灯状态:灭,灭,闪,闪,闪,闪,,以30HZ频率闪烁
OUT DX,AL
JMP S
QQ: MOV DX,IO8255A
MOV AL,11000000B
OUT DX,AL
JMP S
S11: JMP S
RET
MAIN ENDP
DELAY PROC NEAR ;延时程序
PUSH CX
MOV CX,000FH
S12: LOOP S12
POP CX
RET
DELAY ENDP
DELAY0 PROC NEAR
PUSH CX
PUSH AX
MOV CX,0400H
S13: CALL DELAY
LOOP S13
POP AX
POP CX
RET
DELAY0 ENDP
CODE ENDS
END
不知道哪错了,开关没有用
...全文
462 回复 打赏 收藏 转发到动态 举报
写回复
用AI写文章
回复
切换为时间正序
请发表友善的回复…
发表回复

1,068

社区成员

发帖
与我相关
我的任务
社区描述
硬件/嵌入开发 非技术区
社区管理员
  • 非技术区社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧