|
include "cong2.h"
unsigned char zu[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0x88,0x83,0xc6,0xa1,0x86,0x8d};
/* 延時t毫秒 */
void delay(uint t)
{
uint i;
while(t--)
{
/* 對于11.0592M時鐘,約延時1ms */
for (i=0;i<125;i++)
{}
}
}
/* 發(fā)送數(shù)據(jù)函數(shù) */
uchar recvdata()
{
/* 接收數(shù)據(jù) */
while(!RI);
if (RB8==1)
return 0xee; // 若接收的為地址幀,則返回0xee
buf = SBUF;
RI = 0;
return 0; // 返回0
}
/* 串口初始化函數(shù) */
void init_serial()
{
TMOD = 0x20; // 定時器T1使用工作方式2
TH1 = 250;
TL1 = 250;
TR1 = 1; // 開始計時
PCON = 0x80; // SMOD = 1
SCON = 0xd0; // 工作方式,9位數(shù)據(jù)位,波特率9600kbit/s,允許接收
}
/* 主程序 */
void main()
{
uchar i = 0;
uchar tmp = 0xff;
P1= 0xff;
addr2 = P1&0x0f; // 獲取本機地址
P23 = 1; // 發(fā)光管不亮
init_serial(); // 串口初始化
EA = 1; // 關閉所有中斷
/* 進入設備應答 */
while(1)
{
SM2 = 1; // 只接收地址幀
/* 如果接收到的地址幀不是本機地址,則繼續(xù)等待 */
while (tmp!=addr2)
{
RI = 0;
while(!RI)
tmp = SBUF;
RI = 0;
}
SM2 = 0; // 允許接收數(shù)據(jù)
/* 數(shù)據(jù)接收 */
tmp = recvdata();
//if(buf!=0x00)
if (tmp==0x00)
{
P0=buf;
/* 綠燈亮,持續(xù)500ms,表示接收數(shù)據(jù)成功 */
P23 = 0;
delay(30);
P23 = 1;
}
// 如果接收數(shù)據(jù)時發(fā)現(xiàn)地址幀,則重新開始整個接收過程
}
}
|
-
-
51黑論壇_0039、多機通信.zip
2019-6-10 21:50 上傳
點擊文件名下載附件
下載積分: 黑幣 -5
238.45 KB, 下載次數(shù): 9, 下載積分: 黑幣 -5
評分
-
查看全部評分
|