一、设计目的:
- 了解可编程并行接口 8255 的内部结构
- 掌握工作方式、初始化编程及应用
二、设计内容:
- 交通灯实验:利用 8255 的 A 口模拟交通信号灯,
- 在完成①基础上,增加通过读取开关控制交通红绿灯的亮灭时间
设计思路:
需要一个计时器,可以使用CPU内部的计时器或者外部的硬件计时器。计时器需要能够启动、停止、清零,并且能够设置倒计时时间。可以使用中断来检测计时器是否到达设定时间。接下来需要控制红、黄、绿灯的亮灭,可以使用IO口输出高低电平来控制。为了实现绿灯变为红灯的3s内,绿灯灭而黄灯亮的效果,可以使用状态机来实现灯的控制逻辑。状态机需要根据当前时钟周期、计时器状态和自身状态进行转移。最后需要将倒计时数值显示在2位七段数码管上。可以使用IO口输出数字对应的LED段选信号和共阳/共阴信号,使得对应的数字在数码管上亮起来。
三、设计任务和要求:
在十字路口的东西、南北方向各装有红、黄、绿指示灯,设计一个交通灯实时控制系统。要求:
- 东西向和南北向通行时间分别为15s和30s
- 由绿灯变为红灯的3s内,绿灯灭而黄灯亮
- 时间由2位七段数码管做倒计时显示
四、可选器材:
QTHPCI 软件,8255 可编程并行接口电路
五、参考资料:
《微机组成原理与接口技术》
六、汇编程序及电路图
ORG 100H ; 程序起始地址为100H
INIT:
MOV AL, 80H ; 初始化端口地址,将8255控制字写入控制寄存器
OUT 0A8H, AL ; 控制字为80H,即使能8255芯片
CALL DISP ; 显示初始值
MOV CX, 15 ; 初始计时器值为15秒
CALL DELAY ; 延迟1秒
CALL DELAY ; 延迟1秒
MOV CX, 30 ; 初始计时器值为30秒
TRAFFIC_LIGHT:
MOV AL, 01H ; 设置Port B的输出值为00000001B,表示东西方向绿灯亮,其他灯灭
OUT 0AAH, AL ; 将输出值写入Port B
CALL DISP ; 显示计时器值
CALL DELAY ; 延迟1秒
CALL DELAY ; 延迟1秒
CALL DELAY ; 延迟1秒
MOV AL, 02H ; 设置Port B的输出值为00000010B,表示东西方向黄灯亮,其他灯灭
OUT 0AAH, AL ; 将输出值写入Port B
CALL DISP ; 显示计时器值
CALL DELAY ; 延迟1秒
CALL DELAY ; 延迟1秒
CALL DELAY ; 延迟1秒
MOV AL, 04H ; 设置Port B的输出值为00000100B,表示南北方向绿灯亮,其他灯灭
OUT 0AAH, AL ; 将输出值写入Port B
CALL DISP ; 显示计时器值
CALL DELAY ; 延迟1秒
CALL DELAY ; 延迟1秒
CALL DELAY ; 延迟1秒
MOV AL, 08H ; 设置Port B的输出值为00001000B,表示南北方向黄灯亮,其他灯灭
OUT 0AAH, AL ; 将输出值写入Port B
CALL DISP ; 显示计时器值
CALL DELAY ; 延迟1秒
CALL DELAY ; 延迟1秒
CALL DELAY ; 延迟1秒
DEC CX ; 计时器减1
JNZ TRAFFIC_LIGHT ; 如果计时器不为0,则继续执行TRAFFIC_LIGHT
MOV CX, 3 ; 设置计时器值为3秒
MOV AL, 02H ; 设置Port B的输出值为00000010B,表示东西方向黄灯亮,其他灯灭
OUT 0AAH, AL ; 将输出值写入Port B
CALL DISP ; 显示计时器值
CALL DELAY ; 延迟1秒
CALL DELAY ; 延迟1秒
MOV AL, 04H ; 设置Port B的输出值为00000100B,表示南北方向绿灯亮,其他灯灭
OUT 0AAH, AL ; 将输出值写入Port B
CALL DISP ; 显示计时器值
CALL DELAY ; 延迟1秒
CALL DELAY ; 延迟1秒
JMP INIT ; 跳转到INIT,重新开始执行交通灯控制程序
DISP