課程設(shè)計--多級通信系統(tǒng)_第1頁
已閱讀1頁,還剩8頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)

文檔簡介

1、<p><b>  多機通信系統(tǒng)</b></p><p>  單片機a,b,c. a為主機,bc為從機。a上有一個外部中斷0輸入,按第一次a的兩個LED亮500ms,再按一下,b機的兩個LED燈亮500ms,第三次按下c機的兩個LED燈亮500ms,然后周而復(fù)始。兩個數(shù)碼管分別顯示0/1/2, 和abc(bc由從機反饋)</p><p><b> 

2、 /*</b></p><p><b>  主從通信基本步驟:</b></p><p>  1. 主機從機初始化為方式2或者3,從機都置SM2=1,允許中斷</p><p>  2. 主機置TB8=1,發(fā)送從機地址</p><p>  3. 所有從機均接收主機發(fā)送要尋址的從機地址</p><

3、;p>  4. 被尋址的從機確認地址后,置本機SM2=0,向主機返回地址,供主機核對</p><p>  5. 核對無誤后,主機向被尋址的從機發(fā)送命令,通知從機接受或者發(fā)送數(shù)據(jù)。</p><p>  6. 本次通信結(jié)束后,主從機重置SM2=1,主機可再對其他從機尋址</p><p><b>  */</b></p><

4、p>  ******************************************************************</p><p><b>  主機a:</b></p><p>  ******************************************************************</p>

5、<p>  #include <reg51.h></p><p>  #define uchar unsigned char</p><p>  #define uint unsigned int</p><p>  uchar leddata[]={0x3F,0x06,0x5B,0x4F,0x66,0x6D,0x7D,0x07,0x7F,0x

6、6F,0x77,0x7C,0x39,0x5E,0x79,0x71,0x40,0x00};</p><p>  uchar Mode;</p><p>  sbit P10 = P1^0;</p><p>  sbit P13 = P1^3;</p><p>  sbit P17 = P1^7;</p><p>  sb

7、it P20 = P2^0;</p><p>  sbit P21 = P2^1;</p><p>  void UART_init()</p><p><b>  {</b></p><p>  TMOD = 0x20;</p><p>  TH1 = 0xfd;</p><

8、p>  TL1 = 0xfd;</p><p><b>  TR1 = 1;</b></p><p>  SCON = 0xd0;</p><p><b>  ES = 1;</b></p><p><b>  EX0 = 1;</b></p><p&

9、gt;  IT0 = 1; //INT0下跳觸發(fā)</p><p><b>  EA = 1;</b></p><p><b>  TI = 0;</b></p><p><b>  }</b></p><p>  void DelayMs(int ms)</p>

10、<p><b>  {</b></p><p><b>  uchar i;</b></p><p>  while(ms--) </p><p>  for(i=0; i<120; i++);</p><p><b>  }</b></p>&l

11、t;p>  void putc_to_SerialPort(uchar c)</p><p><b>  {</b></p><p><b>  SBUF = c;</b></p><p>  while(TI == 0);</p><p><b>  TI = 0;</b&g

12、t;</p><p><b>  }</b></p><p>  void MasterControl(unsigned char Addr, unsigned char Comd)</p><p><b>  {</b></p><p><b>  TB8 = 1;</b>&

13、lt;/p><p>  putc_to_SerialPort(Addr);</p><p>  DelayMs(50);</p><p><b>  TB8 = 0;</b></p><p>  putc_to_SerialPort(Comd);</p><p>  DelayMs(50);</

14、p><p><b>  }</b></p><p>  Ex0_int(void) interrupt 0</p><p><b>  {</b></p><p>  P0 = leddata[Mode];</p><p><b>  P20 = 0;</b>

15、;</p><p>  if(Mode == 0)</p><p><b>  {</b></p><p>  P2 = leddata[10];</p><p><b>  P10 = 0;</b></p><p><b>  P13 = 0;</b>

16、</p><p>  DelayMs(500);</p><p><b>  P10 = 1;</b></p><p><b>  P13 = 1;</b></p><p>  // MasterControl('b','C');</p>

17、<p>  // MasterControl('c','C');</p><p><b>  } </b></p><p>  else if(Mode == 1)</p><p><b>  {</b></p><p><b>

18、;  P10 = 1;</b></p><p>  P13 = 1; </p><p>  MasterControl('b','O'); </p><p>  // MasterControl('c','C');</p><p><b> 

19、 }</b></p><p>  else if(Mode == 2)</p><p><b>  {</b></p><p><b>  P10 = 1;</b></p><p>  P13 = 1; </p><p>  // MasterCo

20、ntrol('b','C');</p><p>  MasterControl('c','O'); </p><p><b>  }</b></p><p>  Mode = (Mode + 1) % 3;</p><p><b>  }

21、 </b></p><p>  com_int(void) interrupt 4</p><p><b>  {</b></p><p><b>  if(RI)</b></p><p><b>  {</b></p><p><b&

22、gt;  RI = 0;</b></p><p>  if(SBUF == 'b')</p><p><b>  {</b></p><p>  P2 = leddata[11];</p><p><b>  }</b></p><p>  if(

23、SBUF == 'c')</p><p><b>  {</b></p><p>  P2 = leddata[12];</p><p><b>  }</b></p><p><b>  }</b></p><p><b> 

24、 }</b></p><p>  void main(void)</p><p><b>  {</b></p><p>  P0 = 0x00;</p><p>  P1 = 0xff;</p><p>  P2 = 0x00;</p><p>  UART_

25、init();</p><p><b>  Mode = 0;</b></p><p><b>  while(1);</b></p><p><b>  }</b></p><p>  *********************************************

26、*********************</p><p><b>  從機b:</b></p><p>  ******************************************************************</p><p>  #include <reg51.h></p><p

27、>  #define uchar unsigned char</p><p>  uchar RecData;</p><p>  sbit P10 = P1^0;</p><p>  sbit P13 = P1^3;</p><p>  void UART_init()</p><p><b>  {

28、</b></p><p>  TMOD = 0x21;</p><p>  TH1 = 0xfd;</p><p>  TL1 = 0xfd;</p><p><b>  TR1 = 1;</b></p><p>  SCON = 0xf0;</p><p>&

29、lt;b>  ES = 1;</b></p><p><b>  PS = 1;</b></p><p><b>  EA = 1;</b></p><p><b>  }</b></p><p>  void DelayMs(int ms)</p>

30、;<p><b>  {</b></p><p><b>  uchar i;</b></p><p>  while(ms--) </p><p>  for(i=0; i<120; i++);</p><p><b>  }</b></p>

31、<p>  void putc_to_SerialPort(uchar c)</p><p><b>  {</b></p><p><b>  SBUF = c;</b></p><p>  while(TI == 0);</p><p><b>  TI = 0;</

32、b></p><p><b>  }</b></p><p>  com_int(void) interrupt 4</p><p><b>  {</b></p><p><b>  if(RI)</b></p><p><b>  {

33、</b></p><p>  RecData = SBUF;</p><p><b>  RI = 0;</b></p><p>  if(RB8 == 1) //地址</p><p><b>  {</b></p><p>  if(RecData == &#

34、39;b') //是自己的地址,置SM2=0,準備接受數(shù)據(jù)</p><p><b>  {</b></p><p><b>  SM2 = 0; </b></p><p>  putc_to_SerialPort('b'); </p><p><b>  }&

35、lt;/b></p><p>  else //不是自己的地址</p><p><b>  {</b></p><p><b>  SM2 = 1;</b></p><p><b>  } </b></p><p><b>  }

36、</b></p><p>  if(RB8 == 0) //數(shù)據(jù)</p><p><b>  { </b></p><p>  if(RecData=='O')</p><p><b>  {</b></p><p><b>  P10

37、 = 0;</b></p><p><b>  P13 = 0;</b></p><p>  DelayMs(500);</p><p><b>  P10 = 1;</b></p><p><b>  P13 = 1;</b></p><p&g

38、t;<b>  }</b></p><p>  if(RecData=='C')</p><p><b>  {</b></p><p><b>  P10 = 1;</b></p><p><b>  P13 = 1;</b></p

39、><p><b>  }</b></p><p><b>  SM2 = 1;</b></p><p><b>  } </b></p><p><b>  } </b></p><p><b>  }</b>

40、</p><p>  void main(void)</p><p><b>  {</b></p><p>  P0 = 0xff;</p><p>  P1 = 0xff;</p><p>  UART_init();</p><p><b>  while(

41、1);</b></p><p><b>  }</b></p><p>  ******************************************************************</p><p><b>  從機c:</b></p><p>  ******

42、************************************************************</p><p>  #include <reg51.h></p><p>  #define uchar unsigned char</p><p>  uchar RecData;</p><p>  sbi

43、t P10 = P1^0;</p><p>  sbit P13 = P1^3;</p><p>  void UART_init()</p><p><b>  {</b></p><p>  TMOD = 0x21;</p><p>  TH1 = 0xfd;</p><p

44、>  TL1 = 0xfd;</p><p><b>  TR1 = 1;</b></p><p>  SCON = 0xf0;</p><p><b>  ES = 1;</b></p><p><b>  PS = 1;</b></p><p>

45、;<b>  EA = 1;</b></p><p><b>  }</b></p><p>  void DelayMs(int ms)</p><p><b>  {</b></p><p><b>  uchar i;</b></p>

46、<p>  while(ms--) </p><p>  for(i=0; i<120; i++);</p><p><b>  }</b></p><p>  void putc_to_SerialPort(uchar c)</p><p><b>  {</b></p>

47、;<p><b>  SBUF = c;</b></p><p>  while(TI == 0);</p><p><b>  TI = 0;</b></p><p><b>  }</b></p><p>  com_int(void) interrupt 4

48、</p><p><b>  {</b></p><p><b>  if(RI)</b></p><p><b>  {</b></p><p>  RecData = SBUF;</p><p><b>  RI = 0;</b>

49、;</p><p>  if(RB8 == 1) //地址</p><p><b>  {</b></p><p>  if(RecData == 'c') //是自己的地址,置SM2=0,準備接受數(shù)據(jù)</p><p><b>  {</b></p><p&g

50、t;<b>  SM2 = 0; </b></p><p>  putc_to_SerialPort('c'); </p><p><b>  }</b></p><p>  else //不是自己的地址</p><p><b>  {</b></p&

51、gt;<p><b>  SM2 = 1;</b></p><p><b>  } </b></p><p><b>  } </b></p><p>  if(RB8 == 0) //數(shù)據(jù)</p><p><b>  { </b>&l

52、t;/p><p>  if(RecData=='O')</p><p><b>  {</b></p><p><b>  P10 = 0;</b></p><p><b>  P13 = 0;</b></p><p>  DelayMs(5

53、00);</p><p><b>  P10 = 1;</b></p><p><b>  P13 = 1;</b></p><p><b>  SM2 = 1;</b></p><p><b>  }</b></p><p>  

54、if(RecData=='C')</p><p><b>  {</b></p><p><b>  P10 = 1;</b></p><p><b>  P13 = 1;</b></p><p><b>  SM2 = 1;</b><

55、;/p><p><b>  } </b></p><p><b>  } </b></p><p><b>  }</b></p><p><b>  }</b></p><p>  void main(void)</p>

56、;<p><b>  {</b></p><p>  P0 = 0xff;</p><p>  P1 = 0xff;</p><p>  UART_init();</p><p><b>  while(1);</b></p><p><b>  }&

57、lt;/b></p><p><b>  多機通信系統(tǒng)</b></p><p><b>  實驗清單:</b></p><p>  排阻 (1K) 10片</p><p>  80C51芯片 10片</p><p>  按鍵開關(guān)(2腳) 5個</

58、p><p>  發(fā)光二極管 30個</p><p>  電容 10uF 15個</p><p>  30pF 30個</p><p>  數(shù)碼管 10個</p><p>  石英晶體(1.2—12MHZ) 15個</p><p>  電阻 8.2K歐 15個<

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 眾賞文庫僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論