本程序必須由串口到數據,也就是SBUF得到數據才能啟動發送和接收。
本人查表發現11.0592和12 MHZ通信時,只有2400波特率,T1的時間設置才沒誤差。
89s51接晶振 12 mhz
89s52 接晶振 11.0592 mhz
89s51作為接收端代碼:
#include <reg51.h>
#define LED P1 //LED顯示
void main()
{
TMOD=0x20;
TH1=0xf3;
TL0=0xf3;
TR1=1;
SCON=0x50;
while(1)
{
while(RI==0); //確定收到成功判斷
LED=SBUF;
RI=0;
SBUF=LED;
while(TI==0); //確定發送成功判斷
TI=0;
}
}
89s52作為發送端代碼:
#include <reg52.h>
#define LED P1 //LED顯示
void main()
{
TMOD=0x20;
TH1=0xf4;
TL0=0xf4;
TR1=1;
SCON=0x50;
while(1)
{
while(RI==0); //接收成功判斷
LED=SBUF;
RI=0;
SBUF=LED;
while(TI==0); //發送成功判斷
TI=0;
}
}