?? receive_data.c
字號(hào):
/*****************************************/
/* 湖南師范大學(xué) 工學(xué)院
/* All rights reserved.
/* 程序名:receive_data.c
/* 時(shí) 間:2007-12-26
/* 作 者:wangguangxi11@163.com
/* 程序功能:多機(jī)通信,接收功能(先接收地址)
/*****************************************/
#include "receive_data.h"
/*************** 延時(shí)t毫秒 ***************/
void delay(uint t)
{
uint i;
while(t--)
{
/* 對于11.0592M時(shí)鐘,約延時(shí)1ms */
for (i=0;i<125;i++)
{}
}
}
/************* 接收數(shù)據(jù)函數(shù) ****************/
uchar recvdata()
{
while(!RI);
if (RB8==1)
return 0xee; // 若接收的為地址幀,則返回0xee
buf = SBUF;
RI = 0;
return 0; // 返回0
}
/*************串口初始化函數(shù) ****************/
void init()
{
TMOD = 0x20; // 定時(shí)器T1使用工作方式2
TH1 = 250;
TL1 = 250;
TR1 = 1; // 開始計(jì)時(shí)
PCON = 0x80; // SMOD = 1
SCON = 0xd0; // 工作方式,9位數(shù)據(jù)位,波特率9600kbit/s,允許接收
}
/**************** 主程序***************/
void main()
{
uchar i = 0;
uchar tmp = 0xff;
P1= 0xff;
addr = P1&0x0f; // 獲取本機(jī)地址
P23 = 1; // 發(fā)光管不亮
init(); // 串口初始化
EA = 1; // 關(guān)閉所有中斷
while(1) // 進(jìn)入設(shè)備應(yīng)答
{
SM2 = 1; // 只接收地址幀
while (tmp!=addr) // 如果接收到的地址幀不是本機(jī)地址,則繼續(xù)等待
{
RI = 0;
while(!RI)
tmp = SBUF;
RI = 0;
}
SM2 = 0; //允許接收數(shù)據(jù)
tmp= recvdata(); //數(shù)據(jù)接收
if (tmp==0x00)
{
P0=buf;
P23 = 0; //綠燈亮,持續(xù)500ms,表示接收數(shù)據(jù)成功
delay(30);
P23 = 1;
}
// 如果接收數(shù)據(jù)時(shí)發(fā)現(xiàn)地址幀,則重新開始整個(gè)接收過程
}
}
?? 快捷鍵說明
復(fù)制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號(hào)
Ctrl + =
減小字號(hào)
Ctrl + -