|
昨天寫串口中斷的程序,一直沒調好,才發現是串口中斷里的函數干的事情太多的原因。
我原來的程序:
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.如果我在中斷了干活的時間太長的話,那下一次中斷來時我還沒有退出中斷,那么它的信息我將丟失掉。這就是原因的所在。
|
|