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

 找回密碼
 立即注冊(cè)

QQ登錄

只需一步,快速開(kāi)始

搜索
查看: 3718|回復(fù): 11
收起左側(cè)

單片機(jī)雙機(jī)Rs485通信問(wèn)題,求前輩指點(diǎn)!

  [復(fù)制鏈接]
回帖獎(jiǎng)勵(lì) 1 黑幣 回復(fù)本帖可獲得 1 黑幣獎(jiǎng)勵(lì)! 每人限 1 次
ID:574524 發(fā)表于 2020-2-8 20:08 | 顯示全部樓層 |閱讀模式
一主機(jī),用STC8A8K64S4,一從機(jī),用STC89C52,用開(kāi)發(fā)板上的MAX485模塊(兩個(gè)),進(jìn)行通信,一直無(wú)法實(shí)現(xiàn),以下是主機(jī)和從機(jī)的程序,求指點(diǎn)。
主機(jī)程序:
  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. }
復(fù)制代碼

從機(jī)程序:
  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. }
復(fù)制代碼
回復(fù)

使用道具 舉報(bào)

ID:235200 發(fā)表于 2020-2-9 00:32 | 顯示全部樓層
對(duì)于程序來(lái)說(shuō),只要波特率一致就可以了,重點(diǎn)檢查兩者配置的波特率是否一致
回復(fù)

使用道具 舉報(bào)

ID:648281 發(fā)表于 2020-2-9 09:16 | 顯示全部樓層
你好!
1、晶振和波特率要一致
2、485收發(fā)控制要做好
3、從簡(jiǎn)到繁逐步去調(diào)試
回復(fù)

使用道具 舉報(bào)

ID:574524 發(fā)表于 2020-2-9 11:41 | 顯示全部樓層
波特率都是4800,STC8單片機(jī)P2收到的數(shù)據(jù)全是00,STC89C52,P0數(shù)據(jù)也是00
回復(fù)

使用道具 舉報(bào)

ID:77479 發(fā)表于 2020-2-10 12:37 | 顯示全部樓層
第一步,晶振和波特率要匹配。 第二步,兩塊單片機(jī)板各自獨(dú)立用 ttl to usb 與串口助手進(jìn)行通信,先調(diào)通單片機(jī)與串口助手能通暢通信。第三步,在單片機(jī)與串口助手能通信的基礎(chǔ)上,把串口助手換成單片機(jī),調(diào)試兩個(gè)單片機(jī)進(jìn)行串口通信。   第四步,把232通信改成485通信。
回復(fù)

使用道具 舉報(bào)

ID:346434 發(fā)表于 2020-3-13 11:44 | 顯示全部樓層
樓主先仿真試一下
回復(fù)

使用道具 舉報(bào)

ID:451718 發(fā)表于 2020-3-13 13:01 | 顯示全部樓層
1.先從TTL端截取信號(hào),通過(guò)TTL轉(zhuǎn)USB到電腦調(diào)試一下,看信號(hào)發(fā)出來(lái)沒(méi)有。
2.做485傳輸?shù)臅r(shí)候,建議把公共地也對(duì)接起來(lái)。不然很容易出莫名其妙的問(wèn)題。也就是A+,B-,還有GND三個(gè)信號(hào)。
3.注意A+,B-的對(duì)應(yīng),別搞反了。
回復(fù)

使用道具 舉報(bào)

ID:707641 發(fā)表于 2020-3-13 14:19 | 顯示全部樓層
485通訊測(cè)試方法如下:
1:先測(cè)試通訊雙方的TTL信號(hào)是否正常從TX引腳發(fā)出,若沒(méi)有,首先檢查代碼關(guān)于串口配置是否正確(代碼盡量簡(jiǎn)單),而檢查芯片是否正常工作,比如芯片供電,晶振配置等等!若一致則走下一步
2:示波器抓取通訊雙方的TTL的波特率是否一致,有時(shí)候即使波特率不一致能可以收到數(shù)據(jù),不過(guò)是一些亂碼,波特率若不一致,檢查程序的波特率配置、
3:檢查485收發(fā)是否正常工作,比如供電,控制收發(fā)引腳狀態(tài)是否符合控制邏輯
4:測(cè)試線路導(dǎo)通性
回復(fù)

使用道具 舉報(bào)

ID:405079 發(fā)表于 2020-3-15 12:33 | 顯示全部樓層
如果程序沒(méi)問(wèn)題的話檢查一下485芯片是否與單片機(jī)共地
回復(fù)

使用道具 舉報(bào)

ID:708837 發(fā)表于 2020-3-15 14:11 | 顯示全部樓層
樓主你可用先用TTL電平直連測(cè)試。以便區(qū)分是否是程序問(wèn)題
回復(fù)

使用道具 舉報(bào)

ID:694586 發(fā)表于 2020-4-8 11:07 來(lái)自觸屏版 | 顯示全部樓層
我也用的這兩個(gè)單片機(jī),也是不能通訊
回復(fù)

使用道具 舉報(bào)

ID:25310 發(fā)表于 2020-4-8 17:41 | 顯示全部樓層
IO口初始化一下,STC單片機(jī)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;
回復(fù)

使用道具 舉報(bào)

本版積分規(guī)則

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

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

快速回復(fù) 返回頂部 返回列表