欧美极品高清xxxxhd,国产日产欧美最新,无码AV国产东京热AV无码,国产精品人与动性XXX,国产传媒亚洲综合一区二区,四库影院永久国产精品,毛片免费免费高清视频,福利所导航夜趣136

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 2322|回復: 3
打印 上一主題 下一主題
收起左側

關于串口傳輸的一些問題

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

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

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

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



調試圖片:


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

使用道具 舉報

沙發
ID:128697 發表于 2017-4-15 12:22 | 只看該作者
應該是TH1=0xf3;TL1=0xf3
回復

使用道具 舉報

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

評分

參與人數 1黑幣 +40 收起 理由
admin + 40 回帖助人的獎勵!

查看全部評分

回復

使用道具 舉報

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

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

使用道具 舉報

您需要登錄后才可以回帖 登錄 | 立即注冊

本版積分規則

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

Powered by 單片機教程網

快速回復 返回頂部 返回列表