单片机程序设计中运用事件驱动机制
unsigned char num_buf[8];
void uum_proc(void); /*数据处理模块*/
void ledbuf_write(unsigned,unsigned int); /*数据处理*/
void system_init(void); /*系统初始化*/
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); /*设置定时器*/
void t0_int_sever(void); /*定时器T0中断服务*/
void t1_int_sever(void); /*定时器T1中断服务*/
void int0_int_sever(void); /*INT0中断服务*/
void int1_int_sever(void); /*INT1中断服务*/
void uart_int_sever(void); /*串口中断服务*/
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);
}
}
}
事件驱动的单片机程序设计是通过在中断服务程序中置位相位标志,把耗时的中断服务中的处理部分分离出来,中断返回后,再由主程序根据标志启动相应的处理模块。在任务处理完成后,清除相应的标志。由于中断服务程序短小,所以一般能实时地响应各种中断;而处理程序之间不会被相互调用,所以不会产生代码重入;各模块界限分明,给程序中各模块的统调带来很大的方便。
实践证明,运用事件驱动机制来纺织单片机程序,即使对于要求定时准,耗时多的多中断、多模块系统,也可轻松地完成。
评论