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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 8456|回復(fù): 1
打印 上一主題 下一主題
收起左側(cè)

單片機串口通行與多機通信程序源碼

[復(fù)制鏈接]
跳轉(zhuǎn)到指定樓層
樓主
ID:435708 發(fā)表于 2019-3-10 21:30 | 只看該作者 回帖獎勵 |倒序瀏覽 |閱讀模式
(一)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();                //延時
}
}



分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏3 分享淘帖 頂2 踩
回復(fù)

使用道具 舉報

沙發(fā)
ID:495287 發(fā)表于 2020-6-29 12:58 | 只看該作者
言簡意賅多機往,
恍然大悟細(xì)思量;
往返BUF帶命名;
地址參量見真章。
回復(fù)

使用道具 舉報

您需要登錄后才可以回帖 登錄 | 立即注冊

本版積分規(guī)則

小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術(shù)交流QQ群281945664

Powered by 單片機教程網(wǎng)

快速回復(fù) 返回頂部 返回列表