欧美极品高清xxxxhd,国产日产欧美最新,无码AV国产东京热AV无码,国产精品人与动性XXX,国产传媒亚洲综合一区二区,四库影院永久国产精品,毛片免费免费高清视频,福利所导航夜趣136

標題: 單片機串口通行與多機通信程序源碼 [打印本頁]

作者: 1339337425    時間: 2019-3-10 21:30
標題: 單片機串口通行與多機通信程序源碼
(一)1號機通信程序設計
1、1號機初始化函數
1號機采用定時發(fā)送命令,等待接收數據的方式,使用初始化函數對串行口、定時器進行初始化。
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é)格式,假設2號機接收到該命令字節(jié),就向1號機發(fā)送溫度數據,1號機接收到該溫度數據后顯示在數碼管上。1號機定時發(fā)送請求命令字節(jié)。
        1號機的主程序:
Void main()
{
csh1();                //初始化串行口、定時器
while(1)
{
                delay();                         //延時
                SBUF = 0xa5;                        //發(fā)送給1號機請求數據命令
                while(~TI){  ;  }        //等待串行發(fā)送結束
                TI = 0;                                //發(fā)送標志清零
                while(~RI)                //等待接收2號機發(fā)來的數據
                        {  ;  }
                RI = 0;                                //接收標志清零
                wendu = SBUF;                //保存接收的數據到wendu單元,供顯示使用
}
}

(二)2號機通信程序設計
2號機接收命令后發(fā)送數據,2號機的初始化函數如下。
2號機采用接收命令后,中斷發(fā)送數據到1號機的方式,使用初始化函數對串行口、定時器、中斷進行初始化。
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號機串行通信中斷服務函數
Void  tongxin( )  interrupt  4
{
If( TI == 1 ) TI = 0;                                        //如果是發(fā)送中斷,清發(fā)送中斷標志
else                                                                        //否則是接收中斷,判斷接收數據是否是命令
{RI = 0;                                                                 //清除接收中斷標志
If( SBUF == 0xa5 ) SBUF = wendu; }         //接收的來自1號機的命令字節(jié),則發(fā)送溫度數據
}
2號機的主程序:
Void main()
{
csh2();                                //初始化串行口、定時器
while(1)
{
                wdjc();                //溫度檢測函數
                delay();                //延時
}
}




作者: Jeff_BlindCat    時間: 2020-6-29 12:58
言簡意賅多機往,
恍然大悟細思量;
往返BUF帶命名;
地址參量見真章。





歡迎光臨 (http://www.raoushi.com/bbs/) Powered by Discuz! X3.1