标题: 串口程序调试记录 [打印本页]

作者: dajia    时间: 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了,所有程序死在了这里。


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








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