使用位元運算子邏輯進行設計
善用數位訊號和數位硬體的力量
以下資訊旨在介紹 AND (&) 位元運算邏輯並闡明部落格中介紹的概念;直接連接埠操作實例。此範例操作含多個按鈕和電位器控制的步進馬達驅動攝影滑軌。選定的微控制器在許多連接埠分佈有限的 I/O,透過將 I/O 組合成單一數位值進行處理。
概述
在軟體中評估開關輸入通常從有用的 if/then 陳述式開始。這可能適用於一個獨立輸入,但對於多個互動式輸入就不是如此了。用 if/then 陳述式涵蓋所有按鈕按下的組合可能會生成數百行程式碼並大量執行各個循環。實作位元運算邏輯可將程式碼減至最少並提高循環速度。
專案參數
攝影滑軌專案涉及五個瞬動接觸 SPST 開關,在滑軌驅動馬達運作時選擇方向和速度。輸入轉換為 SPEED/ENABLE/DIRECTION 輸出。「開關按下」與「多重開關按下識別」共同鎖定在軟體中。
AND 位元運算子
用於攝影滑軌的主要位元運算子是 AND,其使用 C 語言編程的 & 符號及真值表 (圖 1)。
圖 1:AND 位元運算子真值表和範例。(圖片來源:Don Johanneck)
I/O 組合
建立代表所有開關的單一值,需將位元移動到所需的位置,相加在一起,並使用 AND 運算子進行比較 (如圖 2)。將另一個代表極限感測器當前狀態的值與開關按下值進行比較,如果達到極限則取消輸出。
圖 2:攝影滑軌開關配置、位元編譯,以及 AND 運算子的使用。(圖片來源:Don Johanneck)
在此情境下,如果按下任何按鈕或按鈕組合,則 buttonValues 不等於 0,並且使用 limitValue 和查找表執行軟體以確定輸出與前述直接連接埠操作部落格文章相符。
編程
該程式使用處理過的輸入值進行索引的輸出值表。編程人員可以透過更改表值來確定由任何按鈕按下組合的作業,因此無需增添麻煩,更改程式結構。此範例圖 3 中的表值,代表無單一 IF 陳述式的單一、多個、相反的按鈕操作 (圖 4)。
圖 3:由輸入值索引的唯一輸出值表。
圖 4:主要程式碼;讀取值並確定輸出。
馬達控制採用計時器中斷服務常式以決定步進頻率和「跳躍」方法,僅當 stepGo 變量等於或大於 stepFreq 時,透過設置馬達控制板上的 STEP 引腳來促成速度控制 (圖 5)。較低的電位計值使常式跳過更多 STEP。
圖 5:馬達控制中斷服務常式。
結論:
使用 AND (&) 等位元運算子可簡化程式碼並大幅減少解析數位輸入所需的 IF 陳述式數量。建立輸出表既簡單且靈活。使用更多的輸出位元可以快速擴展表格並提供更多的輸出選項。各個額外輸出位元都需要在主程式碼中添加一個或多個處理程序 (handler)。一旦建立,該表在每個週期只使用一次,主要程式碼會完成繁重的工作。中斷服務常式在幕後穩定作業,更新馬達控制器的 STEP 引腳,直到主程式碼切換馬達控制器的啟用 (ENN) 引腳時才會動作。

Have questions or comments? Continue the conversation on TechForum, Digi-Key's online community and technical resource.
Visit TechForum