⑴ 只用一個單片機可以識別光柵尺的位移和方向么
是的,可以識別,但是由於單片機的中斷採集速率較低(<10khz),所以,採集的速度不高,光柵尺不可移動太快了,否則處理不了太多的事務;其位移肯定是沒有問題的,方向就判別A\B兩相哪相先動作就知道了。
⑵ 單片機怎麼檢測上升沿與下降沿
您是問硬體的方式?還是軟體的方式?
如果是硬體的方式,那麼,各種單片機很不相清敗同,需要具體看它的資料。
一般來說,某些引腳,例如:外中斷引腳、定時器的計數觸發引腳、捕獲引腳等等,都可以用來檢測上升沿與下降沿。
以捕獲(有的單片機資料如80196,將它稱作「高速輸入」)引腳為例:
捕獲引腳可以與某個定時器相關羨正睜聯,在捕獲引腳上遇到上升沿或下降沿時,硬體就自動記錄下當時定時器的讀數,並產生中斷請求。您可以在中斷服務程序中做所需的相應操作。
至於是上升沿捕獲,還是下降沿捕獲,還是二者都能捕獲,可以由用戶自己選擇配置。
如果是用軟體的方式來檢測,那道理就簡單了。用兄歲查詢方式:只要將要檢測的信號接到某個輸入埠的某個位,在程序中反復讀取該位的輸入,一旦遇到「上次是0此次是1」的情況,就說明檢測到了上升沿,遇到「上次是1此次是0」的情況,就說明檢測到了下降沿。
⑶ 單片機根據輸出數據的低位在前還是高位在前去和判斷移位方向
嗯大概明白你的意思,低位在前就左移,高位在前就右移。
⑷ 用51單片機匯編語言檢測上升沿和下降沿
這里只講原理,不關注速度。實際設計工作中,已經有很多單片機能夠識別io埠上升沿和下降沿中斷,且方式不止一種。
sbit
io_inp=p2^1;輸入端
bit
old_bit;輸入端電平記憶
unsigned
char
low_high;上升下降沿標志,0=無變化,1=上升沿,2、下降沿
void
io_rest(void)
{
if(old_bit=!io_inp)
{
old_bit=io_inp;
if(io_inp=1)
low_high=1;
else
low_high=2;
}
}
void
main(void)
{
old_bit=io_inp=p2^1;
while(1)
{
low_high=0;
io_rest(void);
//在此應用
}
}
(4)單片機怎樣判斷軸向位移擴展閱讀:
直接使用肢猛匯編指令編寫單片機程序,對硬體的控制更加直接,可以直接操作物理地址,寄存器,埠等;歷坦橋其它更高級的語言(如:C語言)對硬體的控制是依賴於類庫來實現的。並且,對於一些對程序大小和運行速度有非常嚴苛要求的項目而言,都必須使用匯編指令。
C語言只是為了方便編寫,與機器打交道的信山其實都是2進製得代碼,匯編語言就是這些代碼好記憶的名稱和規則,只是比C語言難理解些。