久久久久久久999_99精品久久精品一区二区爱城_成人欧美一区二区三区在线播放_国产精品日本一区二区不卡视频_国产午夜视频_欧美精品在线观看免费

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

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

單片機雙機Rs485通信問題,求前輩指點!

  [復制鏈接]
回帖獎勵 1 黑幣 回復本帖可獲得 1 黑幣獎勵! 每人限 1 次
跳轉到指定樓層
樓主
ID:574524 發表于 2020-2-8 20:08 | 只看該作者 回帖獎勵 |倒序瀏覽 |閱讀模式
一主機,用STC8A8K64S4,一從機,用STC89C52,用開發板上的MAX485模塊(兩個),進行通信,一直無法實現,以下是主機和從機的程序,求指點。
主機程序:
  1. #include "stc8.h"
  2. #include "intrins.h"
  3. typedef unsigned char uchar;
  4. typedef unsigned int uint;

  5. #define FOSC 11059200L         
  6. #define BAUD 4800              
  7. #define BN 8
  8. bit busy;
  9. sbit RS485_DIR = P0^4;

  10. uchar rebuf[8];
  11. uchar trbuf[8]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x66,0xf8};

  12. void delay(unsigned int ms)
  13. {                                                
  14.         unsigned char i;
  15.         while(ms--)
  16.         {
  17.                 for(i=0;i<110;i++);
  18.         }
  19. }

  20. void master(uchar command)
  21. {
  22. uchar aa,i;
  23. RS485_DIR=1;
  24. S3BUF=command;
  25. while(S3TI==0);
  26.         delay(5);
  27.         S3CON &=  ~S3TI;
  28.         RS485_DIR=0;
  29.    while(!S3RI);
  30.    S3CON &= ~S3RI;        
  31.    aa=S3BUF;
  32. if(aa==0x02)
  33.   {
  34.   for(i=0;i<BN;i++)
  35.     {
  36.     while(!S3RI);
  37.     S3CON &= ~S3RI;        
  38.     rebuf[i]=S3BUF;
  39.     }
  40.   }
  41. if(aa==0x01)
  42.   {
  43.         RS485_DIR=1;
  44.   for(i=0;i<BN;i++)
  45.     {
  46.     S3BUF=trbuf[i];
  47.                  while(!S3TI);
  48.     S3CON &= ~S3TI;         
  49.     }
  50.   }        
  51. }
  52. void ConfigUART(uint Baud)
  53. {
  54.           RS485_DIR=1;
  55.     S3CON = 0x10;               
  56.     AUXR = 0x10;                              
  57.     T2L = (65536 - (FOSC/4/Baud/12));   
  58.     T2H = (65536 - (FOSC/4/Baud/12))>>8;
  59.          
  60. }

  61. void main()
  62. {
  63.   uchar j;
  64.     P_SW2 =0x00;            //(P0.0/RxD3, P0.1/TxD3)
  65.                    ConfigUART(BAUD);
  66. //                         EA = 1;
  67.      while(1)
  68.                  {
  69.                          master(0x01);
  70.                         master(0x02);
  71.                 for(j=0;j<BN;j++)
  72.                 {
  73.                         P2=rebuf[j];
  74.                         delay(10000);
  75.                 }        
  76.         }
  77. }
復制代碼

從機程序:
  1. #include "reg52.h"                        
  2. typedef unsigned int uint;         
  3. typedef unsigned char uchar;
  4. sbit RS485DIR=P1^0;         
  5. uchar trbuf[8]={0x00,0xa4,0xf9,0x90,0xb0,0x92,0x66,0xff};
  6. uchar rebuf[8];

  7. void delay(uint i)
  8. {
  9.         int j;
  10.         while(i--)
  11.         {
  12. for(j=110;j>0;j--);
  13.         }               
  14. }


  15. void UsartInit()
  16. {        RS485DIR=0;
  17.         SCON=0X50;                        
  18.         TMOD=0X20;                        
  19.         PCON|=0X00;                        
  20.         TH1=0Xfa;                                
  21.         TL1=0Xfa;
  22.         TR1=1;                                       
  23.         EA=1;                                                
  24. }


  25. void main()
  26. {        
  27.         uchar j;
  28.         UsartInit();  
  29.         while(1)
  30.         {
  31.                 ES=1;                                                
  32.                 for(j=0;j<8;j++)
  33.                 {
  34.         P0=rebuf[j];
  35.         delay(1000);
  36.         }
  37. }
  38. }

  39. void Usart() interrupt 4
  40. {
  41.         uchar a,j,i;


  42.         RI = 0;
  43.         ES=0;
  44.         a=SBUF;
  45.         delay(100);
  46.   if(a==0x02)
  47.         {
  48.                 RS485DIR=1;
  49.         SBUF=0x02;
  50.         while(!TI);                          
  51.                 TI=0;                                                  
  52.         for(j=0;j<8;j++)
  53.         {
  54.         SBUF=trbuf[j];
  55.         while(!TI);
  56.         TI=0;               
  57.         }
  58.   }
  59.         if(a==0x01)
  60.         {
  61.                 RS485DIR=1;
  62.         SBUF=0x01;
  63.         while(!TI);                        
  64.                 TI=0;                                                
  65.         for(i=0;i<8;i++)
  66.         {
  67.         RS485DIR=0;
  68.         while(!RI);
  69.         RI=0;        
  70.         rebuf[i]=SBUF;
  71.                 }
  72.   }
  73. RS485DIR=0;
  74. ES=1;
  75. }
復制代碼
分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏1 分享淘帖 頂 踩
回復

使用道具 舉報

沙發
ID:235200 發表于 2020-2-9 00:32 | 只看該作者
對于程序來說,只要波特率一致就可以了,重點檢查兩者配置的波特率是否一致
回復

使用道具 舉報

板凳
ID:648281 發表于 2020-2-9 09:16 | 只看該作者
你好!
1、晶振和波特率要一致
2、485收發控制要做好
3、從簡到繁逐步去調試
回復

使用道具 舉報

地板
ID:574524 發表于 2020-2-9 11:41 | 只看該作者
波特率都是4800,STC8單片機P2收到的數據全是00,STC89C52,P0數據也是00
回復

使用道具 舉報

5#
ID:77479 發表于 2020-2-10 12:37 | 只看該作者
第一步,晶振和波特率要匹配。 第二步,兩塊單片機板各自獨立用 ttl to usb 與串口助手進行通信,先調通單片機與串口助手能通暢通信。第三步,在單片機與串口助手能通信的基礎上,把串口助手換成單片機,調試兩個單片機進行串口通信。   第四步,把232通信改成485通信。
回復

使用道具 舉報

6#
ID:346434 發表于 2020-3-13 11:44 | 只看該作者
樓主先仿真試一下
回復

使用道具 舉報

7#
ID:451718 發表于 2020-3-13 13:01 | 只看該作者
1.先從TTL端截取信號,通過TTL轉USB到電腦調試一下,看信號發出來沒有。
2.做485傳輸的時候,建議把公共地也對接起來。不然很容易出莫名其妙的問題。也就是A+,B-,還有GND三個信號。
3.注意A+,B-的對應,別搞反了。
回復

使用道具 舉報

8#
ID:707641 發表于 2020-3-13 14:19 | 只看該作者
485通訊測試方法如下:
1:先測試通訊雙方的TTL信號是否正常從TX引腳發出,若沒有,首先檢查代碼關于串口配置是否正確(代碼盡量簡單),而檢查芯片是否正常工作,比如芯片供電,晶振配置等等!若一致則走下一步
2:示波器抓取通訊雙方的TTL的波特率是否一致,有時候即使波特率不一致能可以收到數據,不過是一些亂碼,波特率若不一致,檢查程序的波特率配置、
3:檢查485收發是否正常工作,比如供電,控制收發引腳狀態是否符合控制邏輯
4:測試線路導通性
回復

使用道具 舉報

9#
ID:405079 發表于 2020-3-15 12:33 | 只看該作者
如果程序沒問題的話檢查一下485芯片是否與單片機共地
回復

使用道具 舉報

10#
ID:708837 發表于 2020-3-15 14:11 | 只看該作者
樓主你可用先用TTL電平直連測試。以便區分是否是程序問題
回復

使用道具 舉報

11#
ID:694586 發表于 2020-4-8 11:07 來自觸屏版 | 只看該作者
我也用的這兩個單片機,也是不能通訊
回復

使用道具 舉報

12#
ID:25310 發表于 2020-4-8 17:41 | 只看該作者
IO口初始化一下,STC單片機IO口不初始化有些端口是不能用的:
    P0M0 = 0x00;
    P0M1 = 0x00;
    P1M0 = 0x00;
    P1M1 = 0x00;
    P2M0 = 0x00;
    P2M1 = 0x00;
    P3M0 = 0x00;
    P3M1 = 0x00;
    P4M0 = 0x00;
    P4M1 = 0x00;
    P5M0 = 0x00;
    P5M1 = 0x00;
    P6M0 = 0x00;
    P6M1 = 0x00;
    P7M0 = 0x00;
    P7M1 = 0x00;
回復

使用道具 舉報

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

本版積分規則

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

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 精品一二三区在线观看 | 国产精品久久久久久久久免费丝袜 | 免费激情网站 | 成人国产一区二区三区精品麻豆 | 麻豆久久久9性大片 | 久草视频在线播放 | 午夜精品一区 | 亚洲精品大片 | 精品久久久久香蕉网 | 国产精品久久欧美久久一区 | 中文字幕在线视频免费视频 | 欧美日本一区 | av久久| 亚洲综合二区 | 亚洲一区二区视频在线播放 | 91精品国产一区二区三区 | 毛片av免费在线观看 | 五月香婷婷 | 五月天婷婷狠狠 | 天天操夜夜爽 | 欧美精品欧美精品系列 | 国产成人在线一区二区 | 欧美二区三区 | 久久精品国产亚洲 | 久久这里只有 | 亚洲视频精品 | 日韩日韩日韩日韩日韩日韩日韩 | 综合二区| 国产欧美一区二区在线观看 | av中文在线 | 中文字幕国产视频 | 九色视频网站 | 日本激情一区二区 | 久久综合伊人一区二区三 | 亚洲精品片 | 亚洲第一福利网 | 国产真实精品久久二三区 | 激情自拍偷拍 | 特级做a爰片毛片免费看108 | 日本亚洲一区 | 日韩精品一区二区三区中文字幕 |