|
(一)1號機通信程序設(shè)計
1、1號機初始化函數(shù)
1號機采用定時發(fā)送命令,等待接收數(shù)據(jù)的方式,使用初始化函數(shù)對串行口、定時器進行初始化。
void csh1()
{
SM0 = 0; //串行口通信方式1,8位異步通信
SM1 = 1;
REN = 1; //允許接收
PCON = 0x80; //波特率加倍
TMOD = 0x20; // T1作波特率發(fā)生器,方式2
TH1 = 0xd0; //選定波特率
TL1 = 0xd0;
TR1 = 1; //起動定時器
}
2、1號機發(fā)送程序
兩臺機器之間約定一個命令字節(jié)格式,假設(shè)2號機接收到該命令字節(jié),就向1號機發(fā)送溫度數(shù)據(jù),1號機接收到該溫度數(shù)據(jù)后顯示在數(shù)碼管上。1號機定時發(fā)送請求命令字節(jié)。
1號機的主程序:
Void main()
{
csh1(); //初始化串行口、定時器
while(1)
{
delay(); //延時
SBUF = 0xa5; //發(fā)送給1號機請求數(shù)據(jù)命令
while(~TI){ ; } //等待串行發(fā)送結(jié)束
TI = 0; //發(fā)送標(biāo)志清零
while(~RI) //等待接收2號機發(fā)來的數(shù)據(jù)
{ ; }
RI = 0; //接收標(biāo)志清零
wendu = SBUF; //保存接收的數(shù)據(jù)到wendu單元,供顯示使用
}
}
(二)2號機通信程序設(shè)計
2號機接收命令后發(fā)送數(shù)據(jù),2號機的初始化函數(shù)如下。
2號機采用接收命令后,中斷發(fā)送數(shù)據(jù)到1號機的方式,使用初始化函數(shù)對串行口、定時器、中斷進行初始化。
void csh2()
{
SM0 = 0; //串行口通信方式1,8位異步通信
SM1 = 1;
REN = 1; //允許接收
PCON = 0x80; //波特率加倍
TMOD = 0x20; // T1作波特率發(fā)生器,方式2
TH1 = 0xd0; //選定波特率
TL1 = 0xd0;
TR1 = 1; //起動定時器
EA = 1; //開中斷
ES = 1; //開串行口中斷
}
2號機串行通信中斷服務(wù)函數(shù)
Void tongxin( ) interrupt 4
{
If( TI == 1 ) TI = 0; //如果是發(fā)送中斷,清發(fā)送中斷標(biāo)志
else //否則是接收中斷,判斷接收數(shù)據(jù)是否是命令
{RI = 0; //清除接收中斷標(biāo)志
If( SBUF == 0xa5 ) SBUF = wendu; } //接收的來自1號機的命令字節(jié),則發(fā)送溫度數(shù)據(jù)
}
2號機的主程序:
Void main()
{
csh2(); //初始化串行口、定時器
while(1)
{
wdjc(); //溫度檢測函數(shù)
delay(); //延時
}
}
|
|