淺談PIC單片機(jī)軟件開(kāi)發(fā)技巧
actionstopflag表示動(dòng)作標(biāo)志位參數(shù),給動(dòng)作標(biāo)志位賦值,動(dòng)作停止函數(shù)中將清零標(biāo)志位的值。上述程序和前面所述程序的功能一樣,實(shí)現(xiàn)兩支手臂的動(dòng)作。上面程序描寫(xiě)左手是否到達(dá)故障位,到達(dá)停止,右手是否到達(dá)舉手位,到達(dá)停止。看動(dòng)作標(biāo)志位是否為零,不是,不斷地循環(huán)檢測(cè);是,執(zhí)行下面的程序。
2 GOTO,cALL指令的不同使用
PIC最大的特點(diǎn)是不搞單純的功能堆積,而是從實(shí)際出發(fā),重視產(chǎn)品的性能與價(jià)格比,靠發(fā)展多種型號(hào)來(lái)滿足不同層次的應(yīng)用要求。就實(shí)際而言,不同的應(yīng)用對(duì)單片機(jī)功能和資源的需求也是不同的。比如,一個(gè)摩托車(chē)的點(diǎn)火器需要一個(gè)I/O較少、RAM及程序存儲(chǔ)空間不大、可靠性較高的小型單片機(jī),若采用40腳且功能強(qiáng)大的單片機(jī),投資大不說(shuō),使用起來(lái)也不方便。PIC系列從低到高有幾十個(gè)型號(hào),可以滿足各種需要。其中,PIC12C508單片機(jī)僅有8個(gè)引腳,是世界上最小的單片機(jī)。
在PIC的匯編程序中,CALL與GOT0指冷使用的場(chǎng)合不同。一般情況下,在于程序與主程序之間大多用CALL指令;而狀態(tài)轉(zhuǎn)換模塊之間大多用GOTO指令,即由此狀態(tài)進(jìn)入另一種狀態(tài)不需返回。由于PIC單片機(jī)的堆棧有限,在程序中,不能無(wú)止境地使用GOTO語(yǔ)句,這樣會(huì)使堆棧溢出,程序無(wú)法正常運(yùn)行。各個(gè)小程序內(nèi)部循環(huán)占用堆棧的級(jí)數(shù)不多,使用GOTO指令是可行的,但在大的程序中用GOTO則無(wú)法返回到調(diào)用前程序的下一條指令。CALL指令完成調(diào)用完子程序后返回到調(diào)用前的程序。程序如下:
list D=16c76
start:ca11 setCPU
call automatlsn、statel
L3 call readinsignal
btfsc cs2_v,ultrasonicdetectl
goto L3
goto autonatlsmstate2
?。?P> automatlsmstate2:
return
auatomatismstatel、automatismstate2表示兩種狀態(tài),uhrasonicdetectl表示一個(gè)輸入超聲檢測(cè)信號(hào)。上面程序描寫(xiě)調(diào)用automatistmstate1狀態(tài),執(zhí)行完后進(jìn)行下面的檢測(cè)ultrasonicdetect],沒(méi)有觸發(fā)就一直循環(huán)檢測(cè),觸發(fā)就進(jìn)入autornatismstate2狀態(tài),執(zhí)行完也不再回到下面的程序。
PIC中檔產(chǎn)品是Microchip近年來(lái)重點(diǎn)發(fā)展的系列產(chǎn)品,品種最為豐富,其性能比低檔產(chǎn)品有所提高,增加了中斷功能,指令周期可達(dá)到200ns,帶A/D,內(nèi)部E2PROM數(shù)據(jù)存儲(chǔ)器,雙時(shí)鐘工作,比較輸出,捕捉輸入,PWM輸出,I2C和SPI接口,異步串行通訊(USART),模擬電壓比較器及LCD驅(qū)動(dòng)等等,其封裝從8腳到68腳,可用于高、中、低檔的電子產(chǎn)品設(shè)計(jì)中,價(jià)格適中,廣泛應(yīng)用在各類(lèi)電子產(chǎn)品中。
3 狀態(tài)標(biāo)志位Z、C的不同使用情況
在進(jìn)行判斷標(biāo)志位時(shí),Z(零標(biāo)志)、C(借位標(biāo)志)是不同的。Z為l時(shí),表示上面的結(jié)果為0,Z為0時(shí),則結(jié)果不為0。C為l時(shí),借位,C為0時(shí),沒(méi)有借位。在使用定時(shí)器的時(shí)候,一般使用C標(biāo)志位,這是由于當(dāng)完成某一動(dòng)作去檢查定時(shí)器時(shí),時(shí)間可能沒(méi)到,或是正好,或是已經(jīng)超過(guò)時(shí)間,只要到了或超過(guò)時(shí)間,都要按照要求關(guān)閉定時(shí)器,如下面程序所述。進(jìn)行一般的計(jì)算時(shí)大多用Z,如前面的動(dòng)作標(biāo)志位中就是如此使用的。
list D=16c76
call opentimerO
L4 movlw d’30’
subwf t0_v2,W
btfss status,c
goto L4
cau closetimer0
程序檢測(cè)時(shí)間是否到達(dá)1.5s,沒(méi)有則循環(huán)等待,到了或檢測(cè)時(shí)間過(guò)了就關(guān)閉定時(shí)器,執(zhí)行下面的程序。
總之,在PIC單片機(jī)的編程中采用合適的方法,可以使整個(gè)程序運(yùn)行穩(wěn)定,而且程序空間的使用也將有所減小,避免了調(diào)試中的Bug。這是筆者在實(shí)際中的一點(diǎn)體會(huì),還有許多不足或沒(méi)有考慮到的問(wèn)題,希望在和大家的探討中不斷學(xué)習(xí)PIC單片機(jī)的精髓。
評(píng)論