新聞中心

EEPW首頁(yè) > 嵌入式系統(tǒng) > 設(shè)計(jì)應(yīng)用 > 51學(xué)習(xí)之串口發(fā)送

51學(xué)習(xí)之串口發(fā)送

作者: 時(shí)間:2016-11-23 來(lái)源:網(wǎng)絡(luò) 收藏
先是自己根據(jù)PPT學(xué)習(xí)資料配置了下串口,試圖向上位機(jī)發(fā)送字母c.下了不能工作,找資料看發(fā)現(xiàn)少配置了SCON寄存器,再試,還不行,收到的是亂碼。又看了看人家的發(fā)現(xiàn)是配置的參數(shù)不正確,就是波特率不對(duì)。抄人家的數(shù)上來(lái),還不行。郁悶了。
然后周末搬家,收東西,也沒(méi)顧上調(diào)。這周單位忙TBKZQ的事情,晚上回來(lái)晚,也不說(shuō)調(diào)了。想想這2天晚上回來(lái)沒(méi)干啥事,有點(diǎn)空虛,決定再調(diào)調(diào)串口。
還是上回的程序,收到的東西很怪。并且有時(shí)候還會(huì)出現(xiàn)就是我關(guān)串口,或是電路板斷電,小助手還源源不斷的收數(shù)據(jù),最后死機(jī)了。(我猜測(cè)這種情況是因?yàn)榇谝恢辈煌0l(fā),數(shù)據(jù)間也沒(méi)延時(shí),最后串口處理不過(guò)來(lái),會(huì)亂碼,會(huì)死機(jī)。)換個(gè)字發(fā),還是不行,但偶爾也會(huì)正常,再下程序,OK了。
elay()
{ int i,j;
for(i=0;i<7000;i++)
{
for(j=0;j<3;j++);
}
}

Uart_int()
{ SCON=0x50;
TMOD=0x20;
TH1 =0xfd;
TL1 =0xfd;

TR1 =1;
}

void Main()
{
Uart_int();
while(1)
{
SBUF=c;
Delay();
SBUF=s;
Delay();
SBUF= ;
Delay();
}
}
哎,不管怎樣,先弄個(gè)正確的,也好有點(diǎn)信心往下進(jìn)行。至于復(fù)雜點(diǎn)的,調(diào)用函數(shù)發(fā)字符啥的,回頭再弄吧。
總結(jié)下串口發(fā)送吧!
1. 串口發(fā)送可以不理發(fā)送中斷,所以不用配置中斷。但要查詢中斷,肯定要開(kāi)中斷才行了。
2. 波特率一定要配置對(duì),不然收到的肯定不是你想要的數(shù)據(jù)了。
3. 發(fā)數(shù)據(jù)要注意延時(shí),要不會(huì)死機(jī)的。
4. 有空還是要好好學(xué)學(xué)相關(guān)的理論??!比如波特率初值的計(jì)算啥的。


評(píng)論


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

關(guān)閉