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