|
本人前段时间为公司开发了一台简单型的自动化机械,是采用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 |
|