標(biāo)題:
請(qǐng)教各位,現(xiàn)在一直搞不清楚單片機(jī)串口代碼是哪里的問(wèn)題?
[打印本頁(yè)]
作者:
89C52RC單片機(jī)
時(shí)間:
2023-3-20 21:03
標(biāo)題:
請(qǐng)教各位,現(xiàn)在一直搞不清楚單片機(jī)串口代碼是哪里的問(wèn)題?
代碼如下所示,只要定時(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; //寫入數(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...不停的出
作者:
xuyaqi
時(shí)間:
2023-3-21 07:37
在 main 最后應(yīng)加 while(1);
作者:
yzwzfyz
時(shí)間:
2023-3-21 13:27
老師有沒(méi)有講過(guò),當(dāng)MAIN函數(shù)執(zhí)行到最后一句之后,CPU將如何運(yùn)行呢?
作者:
89C52RC單片機(jī)
時(shí)間:
2023-3-21 20:11
用過(guò)while(1)也是不行的 我另一個(gè)帖子 有朋友幫解決了 但是那個(gè)邏輯問(wèn)題我還是很理解
作者:
89C52RC單片機(jī)
時(shí)間:
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ù)上面這樣寫就可以收發(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
歡迎光臨 (http://www.torrancerestoration.com/bbs/)
Powered by Discuz! X3.1