新聞中心

        EEPW首頁(yè) > 嵌入式系統(tǒng) > 設(shè)計(jì)應(yīng)用 > 單片機(jī)串口接收中斷老是接收到00 00 00 00

        單片機(jī)串口接收中斷老是接收到00 00 00 00

        作者: 時(shí)間:2016-11-27 來(lái)源:網(wǎng)絡(luò) 收藏
        發(fā)現(xiàn)一個(gè)問(wèn)題,串口接收中斷

        Sendstring("Receiving ............"); //串口向終端發(fā)送字符串,結(jié)尾處回車(chē)換行
        Sendstring("----------------------");

        void revdata(void) interrupt 4
        {
        unsigned char temp;
        while(RI==0); //if(RI==0)
        //return; // //如果沒(méi)有接收中斷標(biāo)志,返回
        RI = 0; //清串行中斷標(biāo)志位
        temp = SBUF; //接收緩沖器中的字符
        Sendchar(temp); //將接收的字符發(fā)送出去
        }
        上面的程序在STC的串口上,接收的時(shí)候不會(huì)一直接收 00 00 00 00 00 ........
        void revdata(void) interrupt 4
        {
        unsigned char temp;
        if(RI)
        RI = 0; //清串行中斷標(biāo)志位
        temp = SBUF; //接收緩沖器中的字符
        Sendchar(temp); //將接收的字符發(fā)送出去
        }
        上面的程序在STC的串口上,接收的時(shí)候會(huì)一直接收 00 00 00 00 00 ........
        該中斷程序的結(jié)構(gòu)有問(wèn)題,單片機(jī)的中斷是根據(jù)SBUF中是否存在數(shù)據(jù)來(lái)中斷的,SBUF中存在“R”數(shù)據(jù)(Sendstring("Receiving ............"); )。開(kāi)始的發(fā)送字符串觸發(fā)了發(fā)送中斷,所以中斷函數(shù)相當(dāng)于
        void revdata(void) interrupt 4
        {
        unsigned char temp;
        temp = SBUF; //接收緩沖器中的字符
        Sendchar(temp); //將接收的字符發(fā)送出去
        } 一直在往外發(fā)送“R”
        所以必須要進(jìn)行限制,如下
        void revdata(void) interrupt 4
        {
        unsigned char temp;
        if(RI)
        {
        RI = 0; //清串行中斷標(biāo)志位
        temp = SBUF; //接收緩沖器中的字符
        Sendchar(temp); //將接收的字符發(fā)送出去
        }
        }



        關(guān)鍵詞: 單片機(jī)串口接收中

        評(píng)論


        技術(shù)專區(qū)

        關(guān)閉
        主站蜘蛛池模板: 谢通门县| 胶州市| 长葛市| 桂平市| 兴国县| 贵州省| 古田县| 大宁县| 三门峡市| 南木林县| 新沂市| 康马县| 曲水县| 彰化县| 房产| 澄城县| 西充县| 江川县| 会东县| 蓬溪县| 龙南县| 辽宁省| 乐亭县| 保山市| 正定县| 北海市| 东山县| 昭苏县| 大竹县| 体育| 新乡县| 黄浦区| 北流市| 宽甸| 浦东新区| 广汉市| 绥阳县| 区。| 台北县| 宣化县| 吕梁市|