單片機程序設(shè)計中運用事件驅(qū)動機制
unsigned char num_buf[8];
void uum_proc(void); /*數(shù)據(jù)處理模塊*/
void ledbuf_write(unsigned,unsigned int); /*數(shù)據(jù)處理*/
void system_init(void); /*系統(tǒng)初始化*/
void uart_commune(void); /*串口通訊模塊*/
void led_display(void); /*LED顯示*/
void kb_scan(void); /*鍵盤掃描*/
void ic_reader(void); /*讀IC卡*/
void ic_writer(void); /*寫IC卡*/
void set_timer(unsigned int time_len,unsigned char type,unsigned char id); /*設(shè)置定時器*/
void t0_int_sever(void); /*定時器T0中斷服務(wù)*/
void t1_int_sever(void); /*定時器T1中斷服務(wù)*/
void int0_int_sever(void); /*INT0中斷服務(wù)*/
void int1_int_sever(void); /*INT1中斷服務(wù)*/
void uart_int_sever(void); /*串口中斷服務(wù)*/
void main(void)
{
system_init();
while(1) {
if (t0_int) led_display();
if (int0_int) ic_reader();
if (t1_int) kb_scan();
if (uart_int) uart_commune();
if (kb_enter){
num_proc();
ic_writer();
ledbuf_write(num_buf,8);
}
}
}
事件驅(qū)動的單片機程序設(shè)計是通過在中斷服務(wù)程序中置位相位標(biāo)志,把耗時的中斷服務(wù)中的處理部分分離出來,中斷返回后,再由主程序根據(jù)標(biāo)志啟動相應(yīng)的處理模塊。在任務(wù)處理完成后,清除相應(yīng)的標(biāo)志。由于中斷服務(wù)程序短小,所以一般能實時地響應(yīng)各種中斷;而處理程序之間不會被相互調(diào)用,所以不會產(chǎn)生代碼重入;各模塊界限分明,給程序中各模塊的統(tǒng)調(diào)帶來很大的方便。
實踐證明,運用事件驅(qū)動機制來紡織單片機程序,即使對于要求定時準(zhǔn),耗時多的多中斷、多模塊系統(tǒng),也可輕松地完成。
評論