雖然單片機串口通訊的內容老早學過,但當時只是粗略的過了一遍,記了一下SCON以及其工作方式。但是測試也僅限於單片機和電腦串口測試軟件之間,這里發送一串內容,那里顯示出來。總感覺不得勁。
這次在其他知識過程中用了串口通訊,不是很熟練,就回過頭了學一遍。
單片機與單片機之間的通訊,接線方面,只需要將A的RXD接B的TXD,B的RXD接A的TXD,就可以了。(P30接P31,P31接P30)
兩個單片機用兩個不同的程序。我這里打算通訊后,實現P2口燈全亮。
執行中,因為我的單片機只是簡單的發送一條指令到另一方,實際上,接一條杜邦線就可以。
萬丈高樓平地起,通過這個簡單的程序,實現了A-->B的串口通訊,接下來會琢磨稍微復雜一點的。
-----------------------------------------發送端程序------------------------------------------------
#include"reg52.h"
typedef unsigned char uchar;
void init() //初始化函數
{
SCON=0X50; //設置工作方式為工作方式1
TMOD=0X20; //計時器工作方式2
PCON=0X80; //波特率加倍
TH1=0Xf3; //設定初值
TL1=0Xf3;
TR1=1; //啟動計數器
EA=1; //啟動總中斷
ES=1; //啟動串口通訊
}
void t_send(uchar state) //數據發送
{
SBUF=state; //把state的值賦給SBUF發送緩沖器
while(TI==0); //發送沒結束,TI=0;發送結束,內部硬件會自動將TI置1;
TI=0; //必須用軟件將TI置0;
}
void main()
{
P2=0x00; //要發送的數據,作用:使LED燈亮
init();
while(1)
{
t_send(P2);
}
}
-----------------------------------------接收端程序------------------------------------------------
#include"reg52.h"
typedef unsigned char uchar;
uchar state;
void init()
{
SCON=0X50;
TMOD=0X20;
PCON=0X80;
TH1=0Xf3;
TL1=0Xf3;
TR1=1;
EA=1;
ES=1;
}
void r_receive()
{
while(RI==0);
state=SBUF;
RI=0;
}
void main()
{
init();
while(1)
{
r_receive();
P2=state;
}
}