找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索

單片機之間主從通訊程序 485總線

查看數(shù): 6240 | 評論數(shù): 7 | 收藏 2
關燈 | 提示:支持鍵盤翻頁<-左 右->
    組圖打開中,請稍候......
發(fā)布時間: 2015-6-5 00:21

正文摘要:

單片機之間主從通訊實例

回復

ID:159139 發(fā)表于 2017-4-24 00:21
謝謝樓主,下來學習一下,非常感謝。
ID:128463 發(fā)表于 2017-4-8 10:31
謝謝分享。。。。!
ID:128463 發(fā)表于 2017-4-8 10:28
謝謝分享。。
ID:47286 發(fā)表于 2016-2-27 00:52
請教樓主

TB8是多機通訊位 這個位只開業(yè)0/1還是0~255都可以 從機地址是怎么確定的 一直沒有看到比較好的教程
ID:67573 發(fā)表于 2016-2-25 14:53
值得學習
ID:1 發(fā)表于 2015-6-5 00:38
從機程序:
  1. /*********************主機程序**************************/
  2. #include <reg52.h>
  3. #define uint unsigned int
  4. #define uchar unsigned char
  5. sbit t0 = P3^7;//發(fā)送、接收使能
  6. /***********延時函數(shù)**************************/
  7. void delay(uint x)
  8. {
  9.         uchar i;
  10.         while(x--)
  11.         {        for(i=0;i<110;i++);        }
  12. }
  13. /***********串口初始化函數(shù)**************************/
  14. void init_UART()
  15. {
  16.         SCON = 0xd0; //工作方式3 允許串口接收
  17.         TMOD = 0x20; //定時器T/C1工作方式2
  18.         PCON = 0x00; //波特率倍頻
  19.         TH1 = 0xfd;
  20.         TL1 = 0xfd;
  21.         TR1 = 1;
  22. }
  23. /*****************主函數(shù)************************/
  24. void main()
  25. {   
  26.     uchar ADDR=0x01,num=0,tmp;//ADDR地址碼,num地址個數(shù)
  27.         init_UART();//串口初始
  28. //        P1=0xc0;//初始時顯示0
  29.         while(1)
  30.             {

  31.                         /*********接受從機地址**********/
  32.                                 t0=0;        //接受使能
  33.                                 delay(20);
  34.                                 while(!RI);//等待接收從機發(fā)回的握手信號
  35.                                 tmp=SBUF;         //接收回來的值賦值給顯示變量
  36.                                 RI=0;        //接收成功
  37.                                 delay(20);
  38.                                 tmp++;

  39.                 /*********發(fā)送從機地址**********/
  40.                                   TI=0;
  41.                                   TB8=1;//發(fā)送地址信號
  42.                                       t0=1;        //發(fā)送使能
  43.                                       delay(20);
  44.                                        SBUF=tmp;//發(fā)送地址信號加1
  45.                                       while(!TI);//等待發(fā)送
  46.                                       TI=0;//發(fā)送成功
  47.                                       delay(1000);
  48.                          }
  49. }
  50. /*
  51. 本程序為從機程序
  52. 11.0592M晶振 波特率9600
  53. 從機:STC12C4052AD  主機:STC12C5A60S2
  54. 從機數(shù)據(jù)接加1后發(fā)送回主機
  55. 2014年9月4日 23時50分
  56. 實驗成功
  57. */
復制代碼
ID:1 發(fā)表于 2015-6-5 00:37
485主機通訊:
  1. /*********************主機程序**************************/
  2. #include <reg52.h>
  3. #define uint unsigned int
  4. #define uchar unsigned char
  5. sbit t0 = P0^0;//發(fā)送、接收使能
  6. sbit key = P0^1; //控制開關
  7. /***********延時函數(shù)**************************/
  8. void delay(uint x)
  9. {
  10.         uchar i;
  11.         while(x--)
  12.         {        for(i=0;i<110;i++);        }
  13. }
  14. /***********串口初始化函數(shù)**************************/
  15. void init_UART()
  16. {
  17.         SCON = 0xd0; //工作方式3 允許串口接收
  18.         TMOD = 0x20; //定時器T/C1工作方式2
  19.         PCON = 0x00; //波特率倍頻
  20.         TH1 = 0xfd;
  21.         TL1 = 0xfd;
  22.         TR1 = 1;
  23. }
  24. /*****************主函數(shù)************************/
  25. void main()
  26. {   
  27.     uchar ADDR=0x01,num=0,tmp;//ADDR地址碼,num地址個數(shù)
  28.         init_UART();//串口初始
  29.         while(1)
  30.             {
  31.             if(key==0)//判斷開關是否被按下
  32.             {
  33.                              delay(50);
  34.                  while(key==0);
  35.                 /*********發(fā)送從機地址**********/
  36.                                   TI=0;
  37.                                   TB8=1;//發(fā)送地址信號
  38.                                       t0=1;        //發(fā)送使能
  39.                                       delay(20);
  40.                                        SBUF=ADDR;//發(fā)送地址信號
  41.                                       while(!TI);//等待發(fā)送
  42.                                       TI=0;//發(fā)送成功
  43.                                       ADDR++;
  44.                                       if(ADDR==6) ADDR=1;


  45.                         /*********接受從機地址**********/
  46.                                 t0=0;        //接受使能
  47.                                 delay(20);
  48.                                 while(!RI);//等待接收從機發(fā)回的握手信號
  49.                                 P1=SBUF;         //接收回來的值賦值給顯示變量
  50.                                 RI=0;        //接收成功
  51.                                 delay(1000);

  52.                  
  53.              }
  54.                  }
  55. }
  56. /*
  57. 主機:STC12C5A60S2    從機:STC12C4052AD
  58. MAX485通訊
  59. 波特率為9600
  60. 晶振為110592MHZ
  61. 接通第一次按鍵主機發(fā)送01給從機 從機收到后加1返回給主機 發(fā)送值最大為5
  62. 圓滿成功  2014.9.4 23:41
  63. */
復制代碼

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

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

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