例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秒,按上述方式不断循环。
解:(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要用十进制减法运算。