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

QQ登錄

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

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

請(qǐng)教各位,現(xiàn)在一直搞不清楚單片機(jī)串口代碼是哪里的問(wèn)題?

[復(fù)制鏈接]
跳轉(zhuǎn)到指定樓層
樓主
ID:1067311 發(fā)表于 2023-3-20 21:03 | 只看該作者 回帖獎(jiǎng)勵(lì) |倒序?yàn)g覽 |閱讀模式
代碼如下所示,只要定時(shí)器一打開(kāi)(TR1=1),串口助手里面就不停的顯示00 00 00.。。,發(fā)送和接收都沒(méi)反應(yīng),實(shí)在找不出哪里的問(wèn)題,請(qǐng)各位大神幫看一下

#include <REGX52.H>
void URET_TX(unsigned char key)
{

                   SBUF=key;                   //寫(xiě)入數(shù)據(jù)進(jìn)SBUF緩存器
                   if(TI==1)                  //檢測(cè)標(biāo)志位,是否是1,,表示數(shù)據(jù)傳出完成
                   {
                         if(RI==1)            //檢測(cè)是否接收完成,如果是1,標(biāo)示數(shù)據(jù)被完整接收
                         P2=SBUF;      //讀取發(fā)送過(guò)來(lái)的SBUF數(shù)據(jù)
                         RI=0;           //重置數(shù)據(jù)傳輸完成標(biāo)志位
                         TI=0;      }        //重置數(shù)據(jù)接收完成標(biāo)志位
}
void URET_Tu(void)

{         
        PCON |= 0x80;                //使能波特率倍速位SMOD
        SCON = 0x50;                //8位數(shù)據(jù),可變波特率
        
        TMOD &= 0x0F;                //清除定時(shí)器1模式位
        TMOD |= 0x20;                //設(shè)定定時(shí)器1為8位自動(dòng)重裝方式
        TL1 = 0xF4;                //設(shè)定定時(shí)初值
        TH1 = 0xF4;                //設(shè)定定時(shí)器重裝值
        ET1 = 0;                //禁止定時(shí)器1中斷
        TR1 = 1;          //啟動(dòng)定時(shí)器用于產(chǎn)生波特率

         ES=1;  //開(kāi)啟串口通信
         
}
void main(void)
{
        URET_Tu();


        URET_TX(SBUF);

}


上面代碼 只要TR1=1,     URET_TX()函數(shù)中就算只有SBUF=key一個(gè)語(yǔ)句,也全是00 00 00...不停的出
分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏1 分享淘帖 頂 踩
回復(fù)

使用道具 舉報(bào)

沙發(fā)
ID:94031 發(fā)表于 2023-3-21 07:37 | 只看該作者
在 main 最后應(yīng)加 while(1);
回復(fù)

使用道具 舉報(bào)

板凳
ID:123289 發(fā)表于 2023-3-21 13:27 | 只看該作者
老師有沒(méi)有講過(guò),當(dāng)MAIN函數(shù)執(zhí)行到最后一句之后,CPU將如何運(yùn)行呢?
回復(fù)

使用道具 舉報(bào)

地板
ID:1067311 發(fā)表于 2023-3-21 20:11 | 只看該作者
用過(guò)while(1)也是不行的 我另一個(gè)帖子  有朋友幫解決了 但是那個(gè)邏輯問(wèn)題我還是很理解
回復(fù)

使用道具 舉報(bào)

5#
ID:1067311 發(fā)表于 2023-3-21 20:14 | 只看該作者
yzwzfyz 發(fā)表于 2023-3-21 13:27
老師有沒(méi)有講過(guò),當(dāng)MAIN函數(shù)執(zhí)行到最后一句之后,CPU將如何運(yùn)行呢?

void URET_TX()
{   
        if(RI==1)                //查詢接收中斷請(qǐng)求標(biāo)志位為1(已收到)
        {
                RI=0;                //接收中斷請(qǐng)求標(biāo)志位清0
                num=SBUF;        //獲取接收寄存器數(shù)據(jù)
                SBUF=num;        //發(fā)送數(shù)據(jù)
                while(!TI);        //等待發(fā)送中斷請(qǐng)求標(biāo)志位為1(已發(fā)送)
                TI=0;                //發(fā)送中斷請(qǐng)求標(biāo)志位清0
        }
...................................................................................................分隔線
函數(shù)上面這樣寫(xiě)就可以收發(fā) ,但是換個(gè)順序就不行,比如下面

void URET_TX()
{   
                SBUF=num;        //發(fā)送數(shù)據(jù)
                while(!TI);        //等待發(fā)送中斷請(qǐng)求標(biāo)志位為1(已發(fā)送)
                TI=0;                //發(fā)送中斷請(qǐng)求標(biāo)志位清0
        if(RI==1)                //查詢接收中斷請(qǐng)求標(biāo)志位為1(已收到)
        {
                RI=0;                //接收中斷請(qǐng)求標(biāo)志位清0
                num=SBUF;        //獲取接收寄存器數(shù)據(jù)
               
        }
}

我把它改成這樣就又全部是00 000 00  
回復(fù)

使用道具 舉報(bào)

本版積分規(guī)則

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

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

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