找回密碼
 立即注冊(cè)

QQ登錄

只需一步,快速開(kāi)始

搜索
查看: 2292|回復(fù): 3
打印 上一主題 下一主題
收起左側(cè)

關(guān)于串口傳輸?shù)囊恍﹩?wèn)題

[復(fù)制鏈接]
跳轉(zhuǎn)到指定樓層
樓主
在使用串口調(diào)試軟件時(shí),發(fā)送數(shù)據(jù)后會(huì)不斷重復(fù)數(shù)據(jù)的最后一個(gè)字符,如下圖。波特率一致,為4800bps,程序如下,我檢查了很多次也不知道什么原因,故發(fā)帖專(zhuān)心請(qǐng)教。
程序:
#include<reg51.h>
void comsetting();        //串口設(shè)置程序

void main()
{
        comsetting();
        while(1)
        {
        }
}

void comsetting()
{
        SCON=0x50;          //串口工作方式1
        TMOD=0x20;          //定時(shí)器工作方式2
        PCON=0x80;          //波特率加倍
        TH1=0xf4;          //定時(shí)器設(shè)置初值,波特率為4800(已加倍)
        TL1=0xf4;
        ES=1;                //允許串行中斷
        EA=1;                //打開(kāi)總中斷
        TR1=1;                //打開(kāi)定時(shí)器1
}

void comint() interrupt 4                //中斷服務(wù)程序
{
        unsigned char rdata; //定義變量為接收的數(shù)據(jù)receive data
        rdata=SBUF;                         //把接收緩沖器接收的數(shù)據(jù)賦給變量
        RI=0;                                //接收中斷標(biāo)志,接收結(jié)束,硬件自動(dòng)置1,用軟件復(fù)位
        SBUF=rdata;                        //把變量的數(shù)據(jù)賦給發(fā)送緩沖器
        while(!TI)                    //等待數(shù)據(jù)發(fā)送完成
        TI=0;                                //發(fā)送結(jié)束,軟件復(fù)位
}



調(diào)試圖片:


分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏 分享淘帖 頂 踩
回復(fù)

使用道具 舉報(bào)

沙發(fā)
ID:128697 發(fā)表于 2017-4-15 12:22 | 只看該作者
應(yīng)該是TH1=0xf3;TL1=0xf3
回復(fù)

使用道具 舉報(bào)

板凳
ID:123289 發(fā)表于 2017-4-16 06:56 | 只看該作者
每次串口中斷后,你都會(huì)從SBUF中取一個(gè)數(shù)字發(fā)出;
收到最后一個(gè)時(shí)SBUF讀到“o”,你發(fā)“o”。
注意:串口中斷響應(yīng)是不管收還是發(fā),都會(huì)發(fā)生中斷,所以發(fā)完最后一個(gè)“o”后,也會(huì)生產(chǎn)中斷,當(dāng)然你取到的SBUF一定是上次的SBUF也就是“o”,所以你又發(fā)一次“o”,發(fā)生后還會(huì)再中斷(發(fā)送中斷)……
實(shí)際上,當(dāng)你收到“h”時(shí),在發(fā)出“h”后也會(huì)產(chǎn)生發(fā)送中斷,但這個(gè)中斷不會(huì)被立即響應(yīng),因?yàn)檫@時(shí)程序還在中斷服務(wù)程序中尚未返回,當(dāng)你中斷返回后,響應(yīng)發(fā)送中斷時(shí),接收中斷也收到了,新發(fā)來(lái)了下一個(gè)“e”(接收中斷與發(fā)送中斷幾乎同時(shí)到達(dá)),所以你并未再發(fā)一次“h”,而是新收到的“e”。也就是說(shuō)你已丟了一次中斷,但丟掉的洽洽是重復(fù)的那一個(gè)!
讀懂以上后,程序修改一下就好了,應(yīng)當(dāng)很簡(jiǎn)單了!

評(píng)分

參與人數(shù) 1黑幣 +40 收起 理由
admin + 40 回帖助人的獎(jiǎng)勵(lì)!

查看全部評(píng)分

回復(fù)

使用道具 舉報(bào)

地板
ID:500065 發(fā)表于 2019-3-28 17:47 | 只看該作者
poseidon 發(fā)表于 2017-4-15 12:22
應(yīng)該是TH1=0xf3;TL1=0xf3

TH1=0xf3;TL1=0xf3和TH1=0xf4;TL1=0xf4有什么差別嗎!
回復(fù)

使用道具 舉報(bào)

本版積分規(guī)則

小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術(shù)交流QQ群281945664

Powered by 單片機(jī)教程網(wǎng)

快速回復(fù) 返回頂部 返回列表