當前位置:編程學習大全網 - 編程語言 - 我想用壹個單片機去控制另外壹個單片機,如何連接以及相應的數據處理?

我想用壹個單片機去控制另外壹個單片機,如何連接以及相應的數據處理?

某溫度數據采集系統有主、從機進行串行通訊,假定雙機的系統時鐘頻率fosc=11.0592MHz,通訊速率9600bps,主機每次將溫度數據temperature的值發送給從機,從機則將收到的數據送到顯示器上顯示,試完成雙機通信程序設計。

分析:設定時器1工作於方式2,TMOD=00100000b=0x20。

定時器的初值計算:9600=K*fosc/[32*12*(256-TH1)],這裏設SMOD=0,則K=1。fosc=11.0592MHz,計算得到:TH1=253=0x0fd。

SCON的確定:串口工作在方式1,允許接收。?所以:SCON=01010000b=0x50。

主機采集數據,並發送給從機的參考程序如下(這裏沒有考慮通信協議):

#include<reg51.h>

#define?uchar?unsigned?char

#define?uint?unsigned?int?

uchar?Temperature;

void?InitSystem(void);

void?CollectData(void);

void?Delay(void);

/*系統初始化*/

void?InitSystem(void)

{

TMOD=0x20;/*?T1工作於方式2*/

TH1=0xfd;/*?通信速率2400bps*/

TL1=0xfd;

PCON=0x00;/*?SMOD=0*/

SCON=0x50;/*?允許接收*/

ES=0;/*?開串口中斷*/

ET1=0;

TR1=1;?/*?啟動定時器1*/

RI=0;

TI=0;

}

void?CollectData(void)?/*數據采集程序*/

{;

//?此程序將采集的溫度數據送入Temperature變量,限於篇幅,省去該程序代碼。?

}

void?Delay()?/*延時子程序*/

{

int?i;

for(i=0;i<10000;i++);

}

void?main(void)

{

InitSystem();

while(1)

{

Delay();

SBUF=Temperature;/*發送溫度數據*/

while(!TI);

TI=0;

CollectData();?/*?采集溫度數據*/

}

}

從機程序如下:

#include<reg51.h>

#define?uchar?unsigned?char

#define?uint?unsigned?int?

uchar?Temperature;

void?InitSystem(void);

void?Comm(void)?;

void?Display(void);

void?InitSystem(void)?/*系統初始化程序*/

{

TMOD=0x20;/*?T1工作於方式2*/

TH1=0xfd;/*?通信速率2400bps*/

TL1=0xfd;

PCON=0x00;/*?SMOD=0*/

SCON=0x50;/*?允許接收*/

EA=1;

ES=1;/*?開串口中斷*/

ET1=0;

TR1=1;?/*?啟動定時器1*/

RI=0;

TI=0;

}

void?Comm(void)?interrupt?4?using?0?/*串行中斷服務程序*/

{

Temperature=SBUF;?/*?保存數據*/

RI=0;/*清中斷標誌*/

}

void?Display(void)/*顯示程序*/

{

;

/*此程序將收到的Temperature?通過顯示器顯示出來*/

}

void?main(void)

{

InitSystem();

while(1)

{

Display();

;

}

}

註意:晶振和波特率壹定按照程序中給出的那樣設置,否則會有很大的誤碼率導致通信失敗。。。程序中用的是11.0592妳就別用12M的,否則妳就等著後悔吧

  • 上一篇:火災應急預案劇本
  • 下一篇:關於亞運會的英語短文,急!!!!!
  • copyright 2024編程學習大全網