找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 2630|回复: 0
打印 上一主题 下一主题
收起左侧

串口程序调试记录

[复制链接]
跳转到指定楼层
楼主
ID:74985 发表于 2015-3-21 03:08 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
今天和昨天写了一个简单的串口程序,发现程序怎么都不按自己写的走,现在才找到问题:
/*串口发送函数*/
void txd_uart(uchar txd)
{
        SBUF=txd;
        while(TI!=1);
        TI=0;
}

/*串口中断函数*/
void uart()interrupt 4
{
        if(RI)
                {
                        uart_table[global_num]=SBUF;
                        global_num++;
                        if(global_num>100)
                                global_num=0;
                        global_sign=1;
                        RI=0;
                }
        if(TI)
            TI=0
;
}

我的这个程序是:电脑先给单片机发数,单片机通过中断收到数后存到uart_table[];然后我单片机再把收到的数发给电脑,在电脑上显示出来,我按上面这个这样写,发现程序跑着跑着就死了,后来把中断函数里红色的语句屏蔽后,程序又按自己的想法来跑。

仔细分析一下:
串口发送函数里蓝色部分的语句,当发送完成,串口立马进入中断,此时while(TI!=1);可能还没被执行到 ,但是我在中断了写了if(TI)TI=0;这条语句,直接又把TI置0,当退出中断后,程序继续执行while(TI!=1);但是TI已经变为0了,所有程序死在了这里。


因此以后再写串口程序的时候:要注意这个情况。



分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖 顶 踩
回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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