标题: 串口中断的学习 [打印本页]

作者: dajia    时间: 2015-3-21 03:03
标题: 串口中断的学习
昨天写串口中断的程序,一直没调好,才发现是串口中断里的函数干的事情太多的原因。
我原来的程序:
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.如果我在中断了干活的时间太长的话,那下一次中断来时我还没有退出中断,那么它的信息我将丢失掉。这就是原因的所在。



作者: dajia    时间: 2015-3-21 03:04
今天写程序碰见一个奇怪的问题,我用到单片机的串口,在配置的时候使能了串口中断,但是我没有写相应的中断函数,编译程序没错误,但是下载到板子上的时候程序死在了开头,后来我写上中断函数,在中断函数里随便写了一些代码,程序能正常执行,我把串口使能关断,不写串口中断,程序也能正常执行。
作者: bjfxxc    时间: 2015-3-27 15:58
谢谢楼主的分享,这都是经验。




欢迎光临 (http://www.51hei.com/bbs/) Powered by Discuz! X3.1