|
本人前段時(shí)間為公司開(kāi)發(fā)了一臺(tái)簡(jiǎn)單型的自動(dòng)化機(jī)械,是采用51單片機(jī)控制的。程序是用匯編語(yǔ)言寫(xiě)的,目前運(yùn)行都十分正常。這段時(shí)間學(xué)了一下c51語(yǔ)言,今天嘗試用c51語(yǔ)言來(lái)寫(xiě)此機(jī)械的控制程序。發(fā)覺(jué)用c51語(yǔ)言寫(xiě)掃描信號(hào)代碼十分的麻煩,嘗試了幾種方法都覺(jué)得寫(xiě)起來(lái)吃力。最后試了下使用goto調(diào)轉(zhuǎn)指令來(lái)寫(xiě)感覺(jué)還算滿(mǎn)意。但是如果采用goto調(diào)轉(zhuǎn)指令來(lái)寫(xiě),好像又回到匯編語(yǔ)言的感覺(jué),完全失去了c51語(yǔ)言的特性。因本機(jī)械在運(yùn)行中有多個(gè)信號(hào)需要在不同的地方掃描。為了增強(qiáng)程序在運(yùn)行中的穩(wěn)定性都采用每個(gè)信號(hào)掃描兩次(即掃描第一次后延遲10ms再掃描第二次)比較結(jié)果后執(zhí)行相應(yīng)代碼。比如說(shuō)要掃描缺料信號(hào)掃描兩次后將會(huì)有0 0;1 1;0 1;和1 0這四狀態(tài)。假設(shè)0 0狀態(tài)為有料,程序?qū)⒗^續(xù)執(zhí)行。如果是1 1狀態(tài)那就是缺料程序?qū)⒄{(diào)轉(zhuǎn)到停機(jī)代碼那里執(zhí)行停機(jī)控制。如果是0 1或1 0那就是信號(hào)有誤需重新掃描直至正確為止。也就是說(shuō)兩次掃描的信號(hào)相同才執(zhí)行相應(yīng)代碼,如不同重新掃描直至正確為止。本人除了使用goto調(diào)轉(zhuǎn)指令來(lái)寫(xiě)比較簡(jiǎn)單外,切實(shí)想不出有更加簡(jiǎn)單的方法來(lái)寫(xiě)。可本人又不想過(guò)多的采用goto調(diào)轉(zhuǎn)指令來(lái)寫(xiě)(有關(guān)教材說(shuō)c51語(yǔ)言多不采用goto調(diào)轉(zhuǎn)指令),請(qǐng)各位高手指教下應(yīng)該用c51語(yǔ)言怎么來(lái)寫(xiě)才更加簡(jiǎn)單方便。。≡诖吮硎臼值母兄x各位。。!
下面是我采用goto調(diào)轉(zhuǎn)指令來(lái)寫(xiě)的代碼:
sbit P1_0=P1^0;
if(P1_0==1) goto ypx; //p1.0等于1轉(zhuǎn)到y(tǒng)px處
if(P1_0==0) goto ypx1; //p1.0等于0轉(zhuǎn)到y(tǒng)px1處
ypx:
yanshi(10); //延遲10ms
if(P1_0==0) goto ypx1;//如果第二次掃描等于0,表示信號(hào)有誤,調(diào)轉(zhuǎn)到y(tǒng)px1再次掃描
goto baohu; //如果兩次掃描結(jié)果都等于1,表示缺料程序調(diào)轉(zhuǎn)到停機(jī)代碼處執(zhí)行停機(jī)
ypx1:
yanshi(10); //延遲10ms
if(P1_0==1) goto ypx; //如果第二次掃描等于1,表示信號(hào)有誤,調(diào)轉(zhuǎn)到y(tǒng)px再次掃描
語(yǔ)句1 // 如果兩次掃描結(jié)果都等于0,表示有料程序繼續(xù)往下執(zhí)行
語(yǔ)句2
語(yǔ)句N(xiāo) |
|