新聞中心

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

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

作者: 時間:2016-11-23 來源:網(wǎng)絡(luò) 收藏
自己寫了個接收程序,流程是上位機(jī)發(fā)給單片機(jī),如果收到的是1,就點亮一個LED,同時把收到的再發(fā)到串口。編譯不通過,原因是我把中斷函數(shù)、接收函數(shù)等前加了個void,一直不明白加與不加有何區(qū)別。明天上網(wǎng)查下。去掉,有報警,但是編譯能通過,下進(jìn)去,果然沒有預(yù)期的結(jié)果。也不知道到底是啥毛病,明天再找吧!
明天調(diào)好這個,再做做收發(fā),就先做自收發(fā)吧!


調(diào)通了網(wǎng)上原程序。這個也通了??蓪崿F(xiàn)上述功能,不過程序做的是點亮后,延時會熄滅。

#include
#define uchar unsigned char
#define uint unsigned int
sbit Led = P0^0;
Delay()
{ int i,j;
for(i=0;i<5000;i++)
{
for(j=0;j<30;j++);
}
}


Uart_int()
{ SCON=0x50;
TMOD=0x20;
TH1 =0xfd;
TL1 =0xfd;
IE =0x90;
TR1 =1;
}
UART_interrupt() interrupt 4
{ char m;
ES = 0;
if(TI)
{
TI=0;
}
else
{
RI=0;
m=SBUF;

if(m==0x31)
{
Led=0;
Delay();
Led=1;
}
SBUF=m;
}
ES = 1;
}


其實,開始我自己做的程序也行。錯就錯在關(guān)于m判斷上。我以前寫的是if(m==1),而從串口發(fā)31或1.而在C中,它只能判定16進(jìn)制和10進(jìn)制,所以我的ASCII 收成10進(jìn)制是49,收成16進(jìn)制是31,怎么也不會等于1.而把if(m==1)改成if(m==0x31)一試OK了。


關(guān)鍵詞: 51串口收

評論


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

關(guān)閉