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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 6550|回復: 3
打印 上一主題 下一主題
收起左側

單片機多機通信proteus仿真原理圖及源程序

[復制鏈接]
跳轉到指定樓層
樓主
51單片機多機通信原理圖:

單片機多機通信仿真工程文件及所有完整程序等資料下載地址:
http://m.raoushi.com/bbs/dpj-56304-1.html

源程序:

  1. #include "PMPDataR.h"

  2. unsigned char zu[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0x88,0x83,0xc6,0xa1,0x86,0x8d};
  3. /* 延時t毫秒 */
  4. void delay(uint t)
  5. {
  6.         uint i;
  7.         while(t--)
  8.         {
  9.                 /* 對于11.0592M時鐘,約延時1ms */
  10.                 for (i=0;i<125;i++)
  11.                 {}
  12.         }
  13. }

  14. /* 發送數據函數 */
  15. uchar recvdata()
  16. {

  17.         /* 接收數據 */
  18.                 while(!RI);
  19.                 if (RB8==1)
  20.                         return 0xee;                // 若接收的為地址幀,則返回0xee
  21.                 buf = SBUF;        
  22.                 RI = 0;        
  23.         return 0;                                        // 返回0
  24. }

  25. /* 串口初始化函數 */
  26. void init_serial()
  27. {
  28.         TMOD = 0x20;                                // 定時器T1使用工作方式2
  29.         TH1 = 250;
  30.         TL1 = 250;
  31.         TR1 = 1;                                        // 開始計時
  32.         PCON = 0x80;                                // SMOD = 1
  33.         SCON = 0xd0;                                // 工作方式,9位數據位,波特率9600kbit/s,允許接收
  34. }

  35. /* 主程序 */
  36. void main()
  37. {
  38.         uchar i = 0;
  39.         uchar tmp = 0xff;
  40.         P1= 0xff;
  41.         addr = P1&0x0f;                                // 獲取本機地址
  42.         P23 = 1;                                        // 發光管不亮
  43.         
  44.         init_serial();                                // 串口初始化

  45.         EA = 1;                                                // 關閉所有中斷
  46.         
  47.         /* 進入設備應答 */
  48.         while(1)
  49.         {
  50.                 SM2 = 1;                                // 只接收地址幀
  51.                
  52.                 /* 如果接收到的地址幀不是本機地址,則繼續等待 */
  53.                 while (tmp!=addr)
  54.                 {
  55.                         RI = 0;
  56.                         while(!RI)
  57.                         tmp = SBUF;
  58.                         RI = 0;
  59.                 }        
  60.                 SM2 = 0;                                // 允許接收數據

  61.                 /* 數據接收 */
  62.        tmp = recvdata();
  63.            //if(buf!=0x00)
  64.             
  65.                 if (tmp==0x00)        
  66.                 {                 
  67.                         P0=buf;
  68.                         /* 綠燈亮,持續500ms,表示接收數據成功 */
  69.                         P23 = 0;                        
  70.                         delay(30);
  71.                         P23 = 1;
  72.                         
  73.                 }            
  74.                 // 如果接收數據時發現地址幀,則重新開始整個接收過程
  75.         }
  76. }
復制代碼

  1. /*****************************************/
  2. /* Copyright (c) 2005, 通信工程學院      */
  3. /* All rights reserved.                  */
  4. /* 作    者:戴 佳                                                 */
  5. /*****************************************/

  6. #include "PMPDataT.h"

  7. /* 延時t毫秒 */
  8. void delay(uint t)
  9. {
  10.         uint i;
  11.         while(t--)
  12.         {
  13.                 /* 對于11.0592M時鐘,約延時1ms */
  14.                 for (i=0;i<125;i++)
  15.                 {}
  16.         }
  17. }
  18. uchar keyscan(void)
  19. {
  20.         uchar scancode,tmpcode;
  21.         P1 = 0xf0;                                                                 // 發全0行掃描碼
  22.         if ((P1&0xf0)!=0xf0)                                        // 若有鍵按下
  23.         {
  24.                 delay(10);                                                        // 延時去抖動
  25.                 if ((P1&0xf0)!=0xf0)                                // 延時后再判斷一次,去除抖動影響
  26.                 {
  27.                         scancode = 0xfe;
  28.                         while((scancode&0x10)!=0)                // 逐行掃描
  29.                         {
  30.                                 P1 = scancode;                                // 輸出行掃描碼
  31.                                 if ((P1&0xf0)!=0xf0)                // 本行有鍵按下
  32.                                 {
  33.                                         tmpcode = (P1&0xf0)|0x0f;

  34.                                         /* 返回特征字節碼,為1的位即對應于行和列 */
  35.                                         return((~scancode)+(~tmpcode));
  36.                                 }
  37.                                 else scancode = (scancode<<1)|0x01;                // 行掃描碼左移一位
  38.                         }
  39.                 }
  40.         }
  41.         return(0);                                                                // 無鍵按下,返回值為0         
  42. }

  43. /* 發送數據函數 */
  44. void senddata(uchar buf)
  45. {

  46.         /* 發送數據 */
  47.                 TI = 0;
  48.                 TB8 = 0;                                // 發送數據幀
  49.                 SBUF =buf;        
  50.                 while(!TI);
  51.                 TI = 0;
  52. }

  53. /* 串口初始化函數 */
  54. void init_serial()
  55. {
  56.         TMOD = 0x20;                                // 定時器T1使用工作方式2
  57.         TH1 = 250;
  58.         TL1 = 250;
  59.         TR1 = 1;                                        // 開始計時
  60.         PCON = 0x80;                                // SMOD = 1
  61.         SCON = 0xd0;                                // 工作方式,9位數據位,波特率9600kbit/s,允許接收
  62. }
  63. void Getkey()
  64. {
  65.     switch(get_key)
  66.                    {
  67.                       case 0x11:                                                // 1行1列,數字0
  68.                               key=0xc0;
  69.                                   break;
  70.                         case 0x21:                                                // 1行2列,數字1
  71.                  key=0xf9;
  72.                                 break;                        
  73.                         case 0x41:                                                // 1行3列,數字2
  74.                                 key=0xa4;
  75.                                 break;
  76.                      case 0x81:                                                // 1行4列,數字3
  77.                                 key=0xb0;
  78.                                 break;
  79.                         case 0x12:                                                // 2行1列,數字4
  80.                 key=0x99;
  81.                                 break;
  82.                         case 0x22:                                                // 2行2列,數字5
  83.                                   key=0x92;
  84.                                 break;
  85.                         case 0x42:                                                // 2行3列,數字6
  86.                                    key=0x82;
  87.                                 break;
  88.                         case 0x82:                                                // 2行4列,數字7
  89.                                    key=0xf8;
  90.                                 break;
  91.                         case 0x14:                                                // 3行1列,數字8
  92.                                    key=0x80;
  93.                                    break;
  94.                         case 0x24:                                                // 3行2列,數字9
  95.                                  key=0x90;
  96.                                 break;
  97.                         case 0x44:                                                // 3行3列,10
  98.                                   key=0x88;
  99.                                 break;
  100.                         case 0x84:                                                // 3行4列,11
  101.                                  key=0x83;
  102.                                 break;
  103.                         case 0x18:                                                // 4行1列,12
  104.                                  key=0xc6;
  105.                                 break;
  106.                         case 0x28:                                                // 4行2列,13
  107.                                  key=0xa1;
  108.                                 break;
  109.                         case 0x48:                                                // 4行3列,14
  110.                                  key=0x86;
  111.                                 break;
  112.                         case 0x88:                                                // 3行4列,15
  113.                                  key=0x8e;
  114.                                 break;
  115.                         default:break;
  116.                 }


  117. }
  118. /* 主程序 */
  119. void main()
  120. {
  121.         uchar i = 0;
  122.         key=0xc0;
  123.         while(1)
  124.     {
  125.                   get_key = keyscan();                                // 調用鍵盤掃描函數
  126.              Getkey();
  127.                  buf=key;

  128.             /* 通過P0口讀要訪問的從機地址 */
  129.           P0 = 0xff;
  130.           addr = P0&0x0f;
  131.           init_serial();                                // 串口初始化

  132.           EA = 1;                                                // 關閉所有中斷
  133.         
  134.                      TI = 0;
  135.                     TB8 = 1;                                // 發送地址幀        
  136.                     SBUF = addr;
  137.                     while(!TI);
  138.                     TI = 0;
  139.                  senddata(buf);                        // 發送數據
  140.          
  141.         }
  142.         
  143. }
復制代碼
分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏1 分享淘帖 頂 踩
回復

使用道具 舉報

沙發
ID:306025 發表于 2018-4-11 17:33 | 只看該作者
這代碼不對呀
回復

使用道具 舉報

板凳
ID:117850 發表于 2018-4-29 08:44 | 只看該作者
代碼不對
回復

使用道具 舉報

地板
ID:322999 發表于 2018-5-5 18:51 | 只看該作者
大佬們,我是基于單片機的無線點餐畢業設計,但是仿真是采用多機通信的方式,所以,求助各位大佬們,
回復

使用道具 舉報

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

本版積分規則

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

Powered by 單片機教程網

快速回復 返回頂部 返回列表