一、用軟件實(shí)現(xiàn)脈沖的鑒相、計(jì)數(shù)
光電編碼器輸出的A向脈沖接到單片機(jī)的外部中斷INT0,B向脈沖接到I/O端口P1.0。當(dāng)系統(tǒng)工作時(shí),首先要把INT0設(shè)置成下降沿觸發(fā),并開相應(yīng)中斷。當(dāng)有有效脈沖觸發(fā)中斷時(shí),進(jìn)行中斷處理程序,判別B脈沖是高電平還是低電平,若是高電平則編碼器正轉(zhuǎn),加1計(jì)數(shù);若是低電平則編碼器反轉(zhuǎn),減1計(jì)數(shù)。
二、用硬件實(shí)現(xiàn)脈沖的鑒相、計(jì)數(shù)
硬件計(jì)數(shù)在執(zhí)行速度上有軟件計(jì)數(shù)不可比擬的優(yōu)勢(shì),通常采用多個(gè)可預(yù)置4位雙時(shí)鐘加減計(jì)數(shù)器74LS193級(jí)聯(lián)組成的加減計(jì)數(shù)電路。P0-P3為計(jì)數(shù)器的4位預(yù)置數(shù)據(jù)端,與數(shù)據(jù)輸入鎖存器相接;Q0-Q3為計(jì)數(shù)器的4位數(shù)據(jù)輸出端,與數(shù)據(jù)輸出緩沖器相接;MR為清零端與上電清零脈沖相接;PL為預(yù)置允許端,由譯碼控制電路觸發(fā);CU為加脈沖輸入端,CD為減脈沖輸入端;TCU為進(jìn)位輸出端,TCD 為借位輸出端。當(dāng)CU和CD中一個(gè)輸入脈沖時(shí),另一個(gè)必須處于高電平,才能進(jìn)行計(jì)數(shù)工作。而從編碼器直接輸出的A、B兩路脈沖不符合要求,不能直接接到計(jì)數(shù)器的輸入端。但我們可以利用這兩路脈沖之間的相位關(guān)系對(duì)其進(jìn)行鑒相后再計(jì)數(shù)。
三、利用單片機(jī)內(nèi)部計(jì)數(shù)器實(shí)現(xiàn)可逆計(jì)數(shù)
用純軟件計(jì)數(shù)雖然電路簡(jiǎn)單,但是計(jì)數(shù)速度慢,難以滿足實(shí)時(shí)性要求,而且容易出錯(cuò),用外接加減計(jì)數(shù)芯片的方法,雖然速度快,但硬件電路復(fù)雜,要做一個(gè)12位計(jì)數(shù)器需要5個(gè)外圍芯片,成本也較高。那么需要用單片機(jī)內(nèi)部的計(jì)數(shù)器來(lái)實(shí)現(xiàn)加減計(jì)數(shù)。8051片內(nèi)有兩個(gè)16位的定時(shí)器:定時(shí)器0和定時(shí)器1,8052還有一個(gè)定時(shí)器2,這三個(gè)定時(shí)器都可以作為計(jì)數(shù)器來(lái)用。但8051內(nèi)部的計(jì)數(shù)器是加1計(jì)數(shù)器,所以不能直接應(yīng)用,必須經(jīng)過(guò)適當(dāng)?shù)能浖幊?,?lái)實(shí)現(xiàn)其“減”計(jì)數(shù)功能??梢园呀?jīng)過(guò)D觸發(fā)器之后的脈沖,即方向控制脈沖(DIR)接到單片機(jī)的外部中斷INT0端,同時(shí)經(jīng)過(guò)反向器后再接到另一個(gè)外部中斷INT1,并且把計(jì)數(shù)脈沖A接到單片機(jī)的片內(nèi)計(jì)數(shù)器T0端即可,相對(duì)外部計(jì)數(shù)芯片來(lái)說(shuō),使用這種方法電路相對(duì)要簡(jiǎn)單的多。系統(tǒng)工作時(shí),先要把兩個(gè)中斷設(shè)置成下降沿觸發(fā),并打開相應(yīng)的中斷。當(dāng)方向判別脈沖(DIR)由低—高跳變時(shí),INT1中斷,執(zhí)行相應(yīng)的中斷程序,進(jìn)行加計(jì)數(shù);而當(dāng)方向判別脈沖由高—低跳變時(shí),INT0中斷,執(zhí)行相應(yīng)的中斷程序,進(jìn)行“減”計(jì)數(shù)(實(shí)際是重新復(fù)值,進(jìn)行加計(jì)數(shù))。