2.实际电路图
3.实验代码
I定义CPU输出地址
CODE SEGMENT
START:
MOV AL, 00100101B ;设置8253用计数器0,只读高字节,方式2(自动重复),10进制
MOV AL, 10H ;给计数器0置数1000(0001 0000 0000 0000)
MOV AL, 10010000B ;初始化8255,1--控制字,A口方式0输入,C口输出,B口输出
INOUT:
MOV AL, 00100100B ;南北路口绿灯亮,东西路口红灯亮
MOV DX, IOPORT+28AH ;C口0方式输出,所以可以直接控制PC0~PC7的输出电平
MOV AL, 01100001B ;设置8253通道1,只读高字节,方式0(不自动重复),10进制
MOV AL, 50H ;置数5000,与计数器0串联即:延时5秒
LOP1:
MOV DX, IOPORT+288H ;A口查询,判断延时是否结束
JE LOP1 ;延时结束,顺序执行,否则继续查询
MOV AL, 01000100B ;南北路口黄灯亮,东西路口红灯亮
MOV DX, IOPORT+28AH ;C口0方式输出,所以可以直接控制PC0~PC7的输出电平
MOV AL, 01100001B ;设置8253通道
MOV AL, 30H ;延时3秒(1000*3000),原理与延时5秒一致
LOP2:
MOV DX, IOPORT+288H ;A口查询,判断延时是否结束
JE LOP2 ;延时结束,顺序执行,否则继续查询
MOV AL, 10000001B ;南北路口红灯亮,东西路口绿灯亮
MOV DX, IOPORT+28AH ;C口0方式输出,所以可以直接控制PC0~PC7的输出电平
MOV AL, 01100001B ;设置8253通道1
MOV AL, 50H ;延时5秒
LOP3:
MOV AL, 10000010B ;南北路口红灯亮,东西路口黄灯亮
MOV AL, 01100001B ;设置8253通道1
MOV AL, 30H ;延时3秒
LOP4:
MOV AH, 0BH ;检查键盘状态(不等待),AL=FFH 表示有键入,AL=00H 表示无键入
CMP AL,0FFH ;有键入,程序退出