找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 2916|回复: 2
收起左侧

串口中断的学习

[复制链接]
ID:74985 发表于 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.如果我在中断了干活的时间太长的话,那下一次中断来时我还没有退出中断,那么它的信息我将丢失掉。这就是原因的所在。


回复

使用道具 举报

ID:74985 发表于 2015-3-21 03:04 | 显示全部楼层
今天写程序碰见一个奇怪的问题,我用到单片机的串口,在配置的时候使能了串口中断,但是我没有写相应的中断函数,编译程序没错误,但是下载到板子上的时候程序死在了开头,后来我写上中断函数,在中断函数里随便写了一些代码,程序能正常执行,我把串口使能关断,不写串口中断,程序也能正常执行。
回复

使用道具 举报

ID:75468 发表于 2015-3-27 15:58 | 显示全部楼层
谢谢楼主的分享,这都是经验。
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表