例1 从8255B口输入8位数据,然后从8255A口输出。
解:设置8255A口为基本I/O输出方式,8255B口为基本I/O输入方式。先从8255B口输入8位数据到累加器A,然后将累加器中的8位数据输出到8255A口,重复上述过程。
例2 编写交通灯控制程序。用8255A口的PA7、PA6、PA5控制南北方向的红、黄、绿灯,用8255A口的PA0、PA1、PA2控制东西方向的红、黄、绿灯,如图8-11所示。控制方式为:东西方向通行30秒后,黄灯亮1秒,再南北方向通行30秒后,黄灯亮1秒,按上述方式不断循环。
<?XML:NAMESPACE PREFIX = O />
解:(1)分析:
开始时,假设东西方向先通行,即东西方向为绿灯(PA2=1),南北方向为红灯(PA7=1)。显然,送入8255A口的控制码为10000100=84H。30秒延时后黄灯亮,黄灯亮的控制码为42H。延时1秒后,南北方向通行,南北方向通行的控制码为21H。然后延时30秒依次循环。具体工作过程如下:
由上述分析可知,只要将8255A口设置成基本I/O输出方式,然后将交通灯的控制码依次输出到A口,并作30秒或1秒的延时,则可编写出如下的交通灯控制程序。
(2)流程图如图8-19所示
(3)源程序
延时1秒与30秒子程序由读者自行编写。
思考题:
在上题的基础上,如何编写在八段显示管DG1DG0上,能显示30秒倒计时的交通灯程序。
提示:将延时程序,改为调用倒计时显示子程序,该子程序的流程图如图8-12所示。在图中用41H单元作为倒计数单元,延时秒数(30秒或1秒)输入41H单元中。图8-13为定时器T0延时20ms中断处理程序,流程图中内容由读者自已理解,程序也由读者自己编写。
编程时请注意,图8-20(2)中:(41H)←(41H)-1要用十进制减法运算。