|
昨天写串口中断的程序,一直没调好,才发现是串口中断里的函数干的事情太多的原因。
我原来的程序:
void uart()interrupt 4
{
if(RI)
{
global_uart_table[global_i]=SBUF;
assign_gsm_net();
assign_gprs_table();
compare_gsm_net_sign(); //判断是否获取网络时间
compare_gprs_net_sign();//判断是否获取GPRS服务器时间
assign_usb_table();
assign_fn_table();
compare_usb_sign(); //判断是否收到帧结束符
compare_fn_sign(); //判断电脑添加用户是否结束
global_i++;
if(global_i>MAX_UART_TABLE_NUMBER-1)
{
global_i=0;
}
RI=0;
}
}
发现这个程序一直不安自己想的走,后来发现是我在中断里做的事情太多了,因为我设定的波特率为115200.如果我在中断了干活的时间太长的话,那下一次中断来时我还没有退出中断,那么它的信息我将丢失掉。这就是原因的所在。
|
|