?? 雙機通信.c
字號:
/*8051雙機點對點通信程序聯系
//來自張銀華《黑皮書》Peg.231*/
#include <reg51.h>
#define flag 1 //發送或接收標記
unsigned char temp;
unsigned idata buf[10];
void main (void)
{
init(); //串口初始化
if(flag==0)
send(buf);
else
receive(buf);
}
void init(void)
{
TMOD = 0x20; //定時器1,工作方式2
TH1 = 0xE8; //fosc=11.0592MHz,Bod=1200
TL1 = 0xE8;
PCON = 0x00; //SMOD=0
flag = 1;
SCON =0x50; //8位UART,允許接收
}
void send (unsigned char idata *p) //發送函數
{
unsigned char i;
do
{
SBUF=0xAA;
while(TI==0); //等待發送信號
TI=0; //發送完畢,清標志
while(RI==0); //等待接收反饋應答信號
RI=0; //接收應答信號完畢,清標志
}while((SBUF^0xBB)!=0) ; //接收到的是應答允許信號0xBB嗎?Y,向下執行;N,重復請求
do
{
temp = 0;
for(i=0;i<16;i++)
{
SBUF = p[i]; //閥數據
temp += p[i];
while(TI==0);
TI=0; //發送完畢,清標志
}
SBUF=temp; //接著發 校驗和
while(TI==0);
TI=0; //校驗和發送完畢
while(RI==0); //接收反饋信號
RI=0;
}while(SBUF!=0); //若接收到的反饋信號不是0,則重發
}
void receive(unsigned char idata *p) //接收函數
{
unsigned char i;
do
{
while(RI==0);
RI=0;
}while((SBUF^0xAA)!=0) ; //等待接收0xAA信息
SBUF=0xBB; //接收到0xAA后,回發0xBB允許信號
while(TI==0);
TI=0; //0xBB發送完畢,清標志
while(1) //開始接收數據
{
temp = 0;
for(i=0;i<16;i++)
{
while(RI==0);
RI=0;
p[i]=SBUF;
temp+=p[i];
}
while(RI==0)
{
RI=0;
if((SBUF^pf)==0))
SBUF=0x00; //通信成功
break;
else
{
SBUF=0xFF;
while(TI==0);
TI=0;
}
}
}
}
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -