對於一些微控制器而言,系統的資源大多數情況下是有限的。為了充分的利用資源(節省成本),工程設計的時候往往會對資源進行不斷的壓榨。
對於微控制器而言它要做的事情大抵只有如下的幾件:
為了更好的驅動整個微控制器程式,我們有時候會採用類似 rtos 的方法,採用硬體定時器來設定乙個系統時鐘 systick 來使得程式能夠能快的執行(如果板子可以跑簡單的作業系統那就直接用 rtos 即可)。一般情況下我們會將當前時鐘的優先順序設定成比較高。 在微控制器裡面常常會用到延時,為了充分的利用資源在設計的時候很少會用等待延時(除了驅動某些外設,對協議的時序要求特別高的情況)。
private volatile uint32_t s_sysrefclocktick;
// 模仿cmsis標準的systick的isr,用於驅動作業系統,持續執行
void systick_handler(void) interrupt 5
在設計系統時鐘的時候一般會對外提供一下的兩個介面 setsystickcount 和 getsystickcount 。setsystickcount 故名思意,就是設定系統的時間,在系統進行省電休眠的時候,我們需要用到這個介面,使得系統的整體時間是正確的。在系統休眠之前獲取系統的時鐘,在系統休眠結束被喚醒後系統休眠的時間加上休眠前的時間就是正確的時間,從而確保整個系統能夠正常的執行。getsystickcount 用於比如你每隔一定時間要做某一件事情,但是又希望微控制器不浪費資源在這等待時間上,當時間沒到的時候去做其他的事情,只有當時間到達的時候才去做相應的操作。具體的**如下:
void clock_setsystickcount(uint32_t tick)
uint32_t clock_getsystickcount(void)
下面用按鍵掃瞄的例子來進行說明:
對於按鍵而言,我們常常需要知道按鍵是長按還是短按,按下的次數等。對於機械按鍵而言會有乙個消抖的過程。
// 按鍵被按下的標誌
private volatile bit s_newkeypressed;
// 鍵盤掃瞄狀態機
private uint8_t data s_keypadstate;
// 按鍵被按下時的tick
private uint32_t xdata s_tickwhenpressed;
// 按鍵被按下時的掃瞄值
private int8_t data s_scanvalwhenpressed;
void keypad_irqhandler(void) interrupt 7
void keypadgetkeycode(bf_uint8_t keypadscanval)
s_keypadstate = keypad_state_released;
return; }
if (0 == (s_scanvalwhenpressed & key_flag_long_press))
}else
}void keypad_scantask(void)
break;
case keypad_state_debounce:
if ((clock_getsystickcount() - s_tickwhenpressed) > key_debounce_tick)
else
}break;
case keypad_state_pressed:
keypadgetkeycode(newscanval);
break;
case keypad_state_released:
g_readykeycode = keycode_none;
s_keypadstate = keypad_state_wait_to_press;
// 僅當此時確實沒有按鍵按住的情況,才清零按下標誌,
// 如果有新的按鍵按住,則保持按下標誌不變,後續將啟動新一輪的按鍵的掃瞄動作
// ea = bit_tmp;
// }
break;
default:
break;
}}
本文的設計方法主要用到了有限狀態機。 微控制器及微控制器系統
微控制器及微控制器系統 1 什麼是微控制器?微控制器是將 處理器 cpu 隨機儲存器 ram 唯讀儲存器 rom或eprom 定時器晶元和一些輸入 輸出介面電路整合在乙個晶元上的微控制器 microcontroller 處理器包括運算器 控制器和暫存器3個主要部分,是微控制器的核心。儲存器按工作方式...
最小微控制器系統
在最小的微控制器系統中,對於初學者的我來說,有以下幾點是要注意的 在復位電路中,也就是接在rst引腳的電路系統,rst是復位訊號的輸入端,復位訊號是高電平有效,rst在低電平下正常工作,在高電平下復位。復位也就是把電路恢復到起始狀態,就像計算機清零一樣。當rst接低電平時,系統會取用外部的程式 來執...
微控制器中斷系統
微控制器中斷系統的優點 1 實現實時處理。2 實現分時操作。3 進行故障處理。4 待機狀態的喚醒。微控制器嵌入式系統的應用中,為了減少電源的功耗,當系統不處理任何事物,處於待機狀態時,可以讓微控制器工作在休眠的低功耗方式。通常,恢復到正常工作方式往往也是利用中斷訊號來喚醒。中斷處理過程 中斷系統中,...