PIC單片機(jī)捕捉模塊的程序設(shè)計(jì)
當(dāng)按下S9鍵時(shí),寄存器COUNTER可以從1連續(xù)或點(diǎn)動(dòng)步進(jìn)地加到4;同理按下S11鍵時(shí),COUNTER從4減到1,并且把COUNTER值顯示在LED上,不同的COUNTER值對(duì)應(yīng)不同的測(cè)試參數(shù)。
程序根據(jù)不同的COUNTER值把相應(yīng)的參數(shù)(已轉(zhuǎn)換成BCD碼)送到顯示緩沖區(qū),此時(shí)按下確定鍵,則LED上顯示出該COUNTER值對(duì)應(yīng)的測(cè)試參數(shù)。
按下功能鍵時(shí),LED上示出當(dāng)前的COUNTER值,又可以對(duì)其講行加減操作。從而選擇顯示不同的參數(shù),COUNTER值與其對(duì)應(yīng)的測(cè)試參數(shù)關(guān)系如下。
· COUNTER=1,對(duì)應(yīng)測(cè)試參數(shù)為頻率。
· COUNTER=2,對(duì)應(yīng)測(cè)試參數(shù)為周期。
· COUNTER=3,對(duì)應(yīng)測(cè)試參數(shù)為占空比。
· COUNTER=4,對(duì)應(yīng)測(cè)試參數(shù)為脈寬。
程序中有5個(gè)不同的顯示任務(wù)(顯示COUNTER、頻率、周期、占空比、脈寬),如果編寫5個(gè)不同的顯示子程序,會(huì)使程序復(fù)雜化。
本例引入一個(gè)顯示緩沖區(qū),如果沒有按下確定鍵,則把COUNTER的值送到顯示緩沖區(qū);如果按下確定鍵,則根據(jù)COUNTER的實(shí)際值把相應(yīng)的測(cè)試參數(shù)的結(jié)果送到顯示緩沖區(qū)。
利用此方法,可以編制一個(gè)顯示程序,該程序只執(zhí)行從顯示緩沖區(qū)取數(shù)顯示的任務(wù)。是COUNTER,還是參數(shù)測(cè)試結(jié)果,只需將顯示緩沖區(qū)的內(nèi)容顯示出來即可。
中斷服務(wù)程序中“把CCP1模塊變成捕捉相反的脈沖邊沿”的含義為:若在本次中斷以前,CCP1捕捉脈沖的上升沿,則把它改成捕捉脈沖下降沿;若在本次中斷以前,CCP1捕捉脈沖的下降沿,則把它改成捕捉脈沖的上升沿。
實(shí)際編寫程序時(shí),為了充分提高CPU的工作效率,可以利用等待CCP1中斷的時(shí)問進(jìn)行鍵盤的消抖動(dòng)延時(shí),程序設(shè)計(jì)流程如圖1和圖2所示。
圖1 主程序流程及中斷服務(wù)程序流程
圖2 鍵盤服務(wù)子程序流程
?。?)首先包含必要的頭文件,定義程序用到的全局變量及宏。
?。?)SPI顯示初始化子程序,首先初始化SPI模塊,設(shè)置在時(shí)鐘下降沿發(fā)送數(shù)據(jù)。設(shè)置RA5引腳為輸出端口,用以輸出顯示鎖存信號(hào)。
?。?)對(duì)CCP模塊進(jìn)行初始化,使其工作在捕捉方式,打開CCP1中斷,設(shè)置RC2端口為輸入口。
?。?)對(duì)系統(tǒng)其他部分進(jìn)行初始化,包括COUNT及與鍵盤有關(guān)的寄存器的初始化,建立鍵盤掃描的初始條件。
評(píng)論