查看: 3446|回复: 4

[提问] 关于c51语言扫描信号的探讨!!!

[复制链接]
发表于 2011-5-21 23:20:02 | 显示全部楼层 |阅读模式
本人前段时间为公司开发了一台简单型的自动化机械,是采用51单片机控制的。程序是用汇编语言写的,目前运行都十分正常。这段时间学了一下c51语言,今天尝试用c51语言来写此机械的控制程序。发觉用c51语言写扫描信号代码十分的麻烦,尝试了几种方法都觉得写起来吃力。最后试了下使用goto调转指令来写感觉还算满意。但是如果采用goto调转指令来写,好像又回到汇编语言的感觉,完全失去了c51语言的特性。因本机械在运行中有多个信号需要在不同的地方扫描。为了增强程序在运行中的稳定性都采用每个信号扫描两次(即扫描第一次后延迟10ms再扫描第二次)比较结果后执行相应代码。比如说要扫描缺料信号扫描两次后将会有0  0;1  1;0  1;和1  0这四状态。假设0  0状态为有料,程序将继续执行。如果是1  1状态那就是缺料程序将调转到停机代码那里执行停机控制。如果是0  1或1  0那就是信号有误需重新扫描直至正确为止。也就是说两次扫描的信号相同才执行相应代码,如不同重新扫描直至正确为止。本人除了使用goto调转指令来写比较简单外,切实想不出有更加简单的方法来写。可本人又不想过多的采用goto调转指令来写(有关教材说c51语言多不采用goto调转指令),请各位高手指教下应该用c51语言怎么来写才更加简单方便!!!在此表示十分的感谢各位!!!!
下面是我采用goto调转指令来写的代码:
          sbit  P1_0=P1^0;
          if(P1_0==1) goto ypx;   //p1.0等于1转到ypx处
          if(P1_0==0) goto ypx1;  //p1.0等于0转到ypx1处
     ypx:
           yanshi(10);        //延迟10ms
           if(P1_0==0) goto ypx1;//如果第二次扫描等于0,表示信号有误,调转到ypx1再次扫描
          goto baohu;           //如果两次扫描结果都等于1,表示缺料程序调转到停机代码处执行停机
  
    ypx1:
            yanshi(10);      //延迟10ms
            if(P1_0==1) goto ypx; //如果第二次扫描等于1,表示信号有误,调转到ypx再次扫描
           语句1      // 如果两次扫描结果都等于0,表示有料程序继续往下执行
           语句2
           语句N
发表于 2011-5-24 08:36:18 | 显示全部楼层
bu
发表于 2011-5-24 14:15:55 | 显示全部楼层
为什么不用中断扫描?10ms中断一次,扫一次状态
 楼主| 发表于 2011-5-24 21:55:14 | 显示全部楼层
为什么不用中断扫描?10ms中断一次,扫一次状态
lcj333 发表于 2011-5-24 14:15

请指教!!怎么写代码最简单和方便!!!此机器在运行中有多个信号需扫描,但不是同一时候。每运动一个动作都是根据扫出的结果而执行相应的代码!!!
发表于 2011-6-10 16:41:54 | 显示全部楼层
有时间看
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

关于我们  -  服务条款  -  使用指南  -  站点地图  -  友情链接  -  联系我们
电子工程网 © 版权所有   京ICP备16069177号 | 京公网安备11010502021702
快速回复 返回顶部 返回列表