外部中断实现的双向移动识别软件框架见图8-9。物体移动的方向判断是利用两个外部中断触发的先后关系,并设置相应的标志位作为计数的依据。以位地址30H(即26.0H)和31H(即26.1H)作为和的触发标志。物体进入时,首先触发,在其中断服务程序中把标志置为1之后中断返回;随后物体触发,在其中断服务程序中若查到的标志为1,就可以确认物体是从“进入方向”进入,单片机中把计数缓冲区的数值增加1,清除的标志之后中断返回。可见计数缓冲区数值增加1的操作应在的中断服务程序中完成。与之对应,物体离开时,首先触发INT1,在其中断服务程序中把标志置为1之后中断返回;随后物体触发.在其中断服务程序中若查到的标志为1,就可以确认物体是从“出来方向”离开,单片机中把计数缓冲区的数值减少1,清除INT1的标志之后中断返回。可见缓冲器数值减少1的操作应在的中断服务程序中完成。主程序的主要工作是对计数缓冲区的结果进行判断并作出相应的控制操作。在实验装置的操作过程中,即便计数缓冲区数值已经为0,还需考虑有可能发生物体从“出来方向”上离开的情况(尽管这种情况在实际的应用中是不应该出现的,如器件受到干扰或有人以非正常途径从窗户进入却从大门离开等)。为了避免出错,当计数缓冲区已经为0时,若检测到有物体从“出来方向”离开,程序不作“减1”处理而应继续保持计数缓冲区为0。
图8-9 外部中断实现的双向移动识别软件框架
2.程序流程
外部中断实现的双向移动识别主程序流程图见图8-10。初始化时设定外部中断的两个标志,并把计数缓冲区清零,进入程序段的主要任务是循环判断计数缓冲区的数值。若数值大于0则通过P3.4和P3.5口分别驱动VL和执行机构,使VL和HL灯点亮;若数值等于0则使VL和HL灯熄灭。
图8-10 外部中断实现的双向移动识别主程序流程图
双向移动识别的INT0中断服务程序流程见图8-11。其中,判断之一是:如果INT0自身被触发,则的标志未被置位,可以把的标志位30H置为1,表示物体从“进入方向”进入,然后中断返回。判断之二是:如果发现的标志已置位,则表明INT0是随后被触发的,可以确认物体从“出来方向”离开,此时需把计数缓冲区“个位”单元减1(最高为“千位”),不够减则向高一位单元借位,且把当前被减单元变为09H;如果“千位”单元25H为0,则把所有单元清0,再把INT1的标志位31H置为0,为下次判断作准备,然后中断返回。
图8-11 双向移动识别的INT0中断服务程序流程图
(www.xing528.com)
图8-12 双向移动识别的INT1中断服务程序流程图
双向移动识别的INT1中断服务程序流程图见图8-12。工作过程与上述ITA的类似。如果是自身被触发,则的标志未被置位,可以把的标志位31H置为1,表示物体从“出来方向”离开,然后中断返回。如果发现INT0的标志已置位,则表明INT1是随后被触发的,可以确认物体从“进入方向”进入,此时需把计数缓冲区“个位”单元增1,若满10则向高一位单元进位;如果“千位”单元25H计满10,则到达设计上限而溢出,此时需把所有单元清0,并对“千位”单元25H写入1,以维持执行机构当前的状态,再把的标志位30H置为0,为下次判断作准备,然后中断返回。
4.C语言源程序
免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。