W77E058A And RS485

2019-07-16 06:53发布

本帖最后由 helper197 于 2011-7-31 02:18 编辑

您好
      我使用 W77E058A 单片机,但遇到一个问题是
      Keil 4 上面都可以正确的模拟,不过放到硬件上
      Uart 1 总是没有输出? Uart0 则是很正常
      Sensor <sp485c < Uart 0 < W77E058a < Uart 1 < sp485c < PC
      硬件的接线, uart1 除了 rx/tx都接到 sipexsp485c ,
      控制线 ww7e058a P1_0 拉出来接到 sp485c De

  1. /*--------------------------------------------------------------------------
  2. W77C32.H

  3. Headerfile for Winbond W77C32, W77L32, W77C58, W77E58, W77LE58
  4. Copyright (c) 1988-2001 Keil Elektronik GmbH and Keil Software, Inc.
  5. All rights reserved.

  6. --------------------------------------------------------------------------*/

  7. /*  BYTE Registers  */
  8. sfr P0     = 0x80;

  9. sbit P0_0   = P0^0;
  10. sbit P0_1   = P0^1;



  11. sfr P1     = 0x90;
  12. sfr P2     = 0xA0;
  13. sfr P3     = 0xB0;
  14. sfr PSW    = 0xD0;
  15. sfr ACC    = 0xE0;
  16. sfr B      = 0xF0;
  17. sfr SP     = 0x81;
  18. sfr DPL    = 0x82;
  19. sfr DPH    = 0x83;
  20. sfr PCON   = 0x87;
  21. sfr TCON   = 0x88;
  22. sfr TMOD   = 0x89;
  23. sfr TL0    = 0x8A;
  24. sfr TL1    = 0x8B;
  25. sfr TH0    = 0x8C;
  26. sfr TH1    = 0x8D;
  27. sfr IE     = 0xA8;
  28. sfr IP     = 0xB8;
  29. sfr SCON   = 0x98;
  30. sfr SBUF   = 0x99;
  31. sfr SCON0  = 0x98;
  32. sfr SBUF0  = 0x99;

  33. /*  W77C32, W77C58 Extensions  */
  34. sfr DPL1   = 0x84;
  35. sfr DPH1   = 0x85;
  36. sfr DPS    = 0x86;
  37. sfr CKCON  = 0x8E;
  38. sfr EXIF   = 0x91;
  39. sfr P4     = 0xA5;
  40. sfr SADDR  = 0xA9;
  41. sfr SADDR1 = 0xAA;
  42. sfr SADEN0 = 0xB9;
  43. sfr SADEN1 = 0xBA;
  44. sfr SCON1  = 0xC0;
  45. sfr SBUF1  = 0xC1;
  46. sfr ROMMAP = 0xC2;
  47. sfr PMR    = 0xC4;
  48. sfr STATUS = 0xC5;
  49. sfr TA     = 0xC7;
  50. sfr T2CON  = 0xC8;
  51. sfr T2MOD  = 0xC9;
  52. sfr RCAP2L = 0xCA;
  53. sfr RCAP2H = 0xCB;
  54. sfr TL2    = 0xCC;
  55. sfr TH2    = 0xCD;
  56. sfr WDCON  = 0xD8;
  57. sfr EIE    = 0xE8;
  58. sfr EIP    = 0xF8;

  59. /*  BIT Registers  */
  60. /*  PSW */
  61. sbit CY    = PSW^7;
  62. sbit AC    = PSW^6;
  63. sbit F0    = PSW^5;
  64. sbit RS1   = PSW^4;
  65. sbit RS0   = PSW^3;
  66. sbit OV    = PSW^2;
  67. sbit FL    = PSW^1;
  68. sbit P     = PSW^0;

  69. /*  TCON  */
  70. sbit TF1   = TCON^7;
  71. sbit TR1   = TCON^6;
  72. sbit TF0   = TCON^5;
  73. sbit TR0   = TCON^4;
  74. sbit IE1   = TCON^3;
  75. sbit IT1   = TCON^2;
  76. sbit IE0   = TCON^1;
  77. sbit IT0   = TCON^0;

  78. /*  IE  */
  79. sbit EA    = IE^7;
  80. sbit ES1   = IE^6;
  81. sbit ET2   = IE^5;
  82. sbit ES0   = IE^4;
  83. sbit ET1   = IE^3;
  84. sbit EX1   = IE^2;
  85. sbit ET0   = IE^1;
  86. sbit EX0   = IE^0;

  87. /*  IP  */
  88. sbit PS1   = IP^6;
  89. sbit PT2   = IP^5;
  90. sbit PS0   = IP^4;
  91. sbit PT1   = IP^3;
  92. sbit PX1   = IP^2;
  93. sbit PT0   = IP^1;
  94. sbit PX0   = IP^0;

  95. /*  P1  */
  96. sbit INT5  = P1^7;
  97. sbit INT4  = P1^6;
  98. sbit INT3  = P1^5;
  99. sbit INT2  = P1^4;
  100. sbit TXD1  = P1^3;
  101. sbit RXD1  = P1^2;
  102. sbit T2EX  = P1^1;
  103. sbit T2    = P1^0;

  104. /*  P3  */
  105. sbit RD    = P3^7;
  106. sbit WR    = P3^6;
  107. sbit T1    = P3^5;
  108. sbit T0    = P3^4;
  109. sbit INT1  = P3^3;
  110. sbit INT0  = P3^2;
  111. sbit TXD0  = P3^1;
  112. sbit RXD0  = P3^0;

  113. /*  SCON0  */
  114. sbit SM0   = SCON0^7; /* alternative SM0_FE_0 */
  115. sbit SM1   = SCON0^6; /* alternative SM1_0 */
  116. sbit SM2   = SCON0^5; /* alternative SM2_0 */
  117. sbit REN   = SCON0^4; /* alternative REN_0 */
  118. sbit TB8   = SCON0^3; /* alternative TB8_0 */
  119. sbit RB8   = SCON0^2; /* alternative RB8_0 */
  120. sbit TI    = SCON0^1; /* alternative TI_0  */
  121. sbit RI    = SCON0^0; /* alternative RI_0  */

  122. /*  SCON1  */
  123. sbit SM01  = SCON1^7; /* alternative SM0_FE_1  */
  124. sbit SM11  = SCON1^6; /* alternative SM1_1  */
  125. sbit SM21  = SCON1^5; /* alternative SM2_1  */
  126. sbit REN1  = SCON1^4; /* alternative REN_1  */
  127. sbit TB81  = SCON1^3; /* alternative TB8_1  */
  128. sbit RB81  = SCON1^2; /* alternative RB8_1  */
  129. sbit TI1   = SCON1^1; /* alternative TI_1   */
  130. sbit RI1   = SCON1^0; /* alternative RI_1   */

  131. /*  T2CON  */
  132. sbit TF2    = T2CON^7;
  133. sbit EXF2   = T2CON^6;
  134. sbit RCLK   = T2CON^5;
  135. sbit TCLK   = T2CON^4;
  136. sbit EXEN2  = T2CON^3;
  137. sbit TR2    = T2CON^2;
  138. sbit C_T2   = T2CON^1;
  139. sbit CP_RL2 = T2CON^0;

  140. /*  WDCON  */
  141. sbit SMOD_1 = WDCON^7;
  142. sbit POR    = WDCON^6;
  143. sbit EPFI   = WDCON^5;
  144. sbit PFI    = WDCON^4;
  145. sbit WDIF   = WDCON^3;
  146. sbit WTRF   = WDCON^2;
  147. sbit EWT    = WDCON^1;
  148. sbit RWT    = WDCON^0;

  149. /*  EIE  */
  150. sbit EWDI  = EIE^4;
  151. sbit EX5   = EIE^3;
  152. sbit EX4   = EIE^2;
  153. sbit EX3   = EIE^1;
  154. sbit EX2   = EIE^0;

  155. /*  EIP  */
  156. sbit PWDI  = EIP^4;
  157. sbit PX5   = EIP^3;
  158. sbit PX4   = EIP^2;
  159. sbit PX3   = EIP^1;
  160. sbit PX2   = EIP^0;
复制代码

复制代码

  1. #include"W77E58.h"

  2. unsigned char flag_1,flag_0;
  3. unsigned char a=0,b=0;
  4. unsigned char *sp;
  5. unsigned char c1[10]={0x01,0x05,0x00,0x00,0xFF,0x00,0x8C,0x3A};
  6. unsigned char c2[10]={0x01,0x05,0x00,0x00,0x00,0x00,0xCD,0xCA};
  7. unsigned char c3[10];


  8. void Delay(unsigned long int n)
  9. {
  10.     unsigned char data i;
  11.    unsigned int  data j;

  12.    j=n;
  13.    while(j--){for(i=0;i<125;i++);}
  14. }
  15. main()
  16. {
  17.    
  18.      flag_1=1;
  19.      flag_0=1;
  20. //SYSTEM init ,其中串口0用定时器2,串口1用定时器1
  21.      
  22. /*******串口0定时器2**************/
  23.      
  24.      SCON0=0x50;      //工作在模式1,接收允许
  25.      RCLK=1;
  26.      TCLK=1;
  27.      CP_RL2=0;//T2CON=0x30;  //用定时器2做串口0的波特率发生器
  28.      RCAP2H=0xff;   // 11.0592M晶振下,baud rate=2400
  29.      RCAP2L=0x70;
  30.      TH2=0xff;
  31.      TL2=0x70;
  32.      ES0=1;
  33. /********************/


  34. /*******串口1定时器1******/
  35.      TMOD=0x20;      //定时器1工作在模式1
  36.      TL1=0xfd;      //baud rate=9600
  37.      TH1=0xfd;
  38.      
  39.      WDCON=0x00;//00:BAUDRATE*1; 80:BAUDRATE*2
  40.      SCON1=0x58;   //工作在模式1,允许接收
  41.      ES1=1;
  42.      TB81 = 0;

  43. /***********************/
  44.      CKCON=0x01;//wait 3 cycle
  45.   RCLK = 0;
  46.   TCLK = 0 ;
  47.   
  48.   
  49.     Delay(1500);
  50.     RI1=0;
  51.     TI1=0;
  52.     Delay(500);
  53.      EA=1;
  54.      TR2=1;
  55.      TR1=1;

  56.      while(1)
  57.      {
  58.                 if(flag_0==1)
  59.                         {
  60.                                 TI=1;flag_0=0;
  61.                         }
  62.                         Delay(1500);
  63.           flag_0=1;  
  64.          
  65.                 if(flag_1==1)
  66.                         {
  67.                                 TI1=1;flag_1=0;
  68.                         }
  69.           flag_1=1;  
  70.      }
  71. }


  72.   void serial_0(void)interrupt 4 using 1
  73. {
  74.     int i;
  75.     if(RI)
  76.     {
  77.         flag_0=1;
  78.         RI=0;   
  79.     }
  80.     if(TI)
  81.     {
  82.             INT0 = 1;
  83.         for(i=0;i<8;i++)
  84.         {
  85.                 P0_0 = 0;
  86.             TI=0;
  87.             SBUF0=c1[i];
  88.             while(TI==0) ;
  89.             TI=0;
  90.                      P0_0 = 1;
  91.         }
  92.                  INT0 = 0;
  93.     }
  94.         }

  95. void serial_1(void)interrupt 7 using 2
  96. {   
  97.     int i;
  98.     if(RI1)
  99.     {
  100.         flag_1=1;
  101.         RI1=0;   
  102.     }
  103.     if(TI1)
  104.     {
  105.              T2 = 1;
  106.        T2EX = 1;
  107.    
  108.         for(i=0;i<8;i++)
  109.         {
  110.                 P0_1 = 0;
  111.           TI1=0;
  112.           SBUF1=c2[i];
  113.           while(TI1==0) ;
  114.           TI1=0;
  115.           P0_1 = 1;
  116.                         Delay(1500);         
  117.         }
  118.    
  119.        T2EX = 0;
  120.        T2 = 0;
  121.     }

  122. }
复制代码
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
3条回答
helper197
1楼-- · 2019-07-16 10:25
补充一下, 不过如果都改用 max232 都很正常

我有把 uart 0 uart 1 的两个 rs485 ic 对调

一样状况 uart 0 正常 uart 1确认有发出数据却收不到

IC买卖
2楼-- · 2019-07-16 16:16
提供PDF资料就更好了
helper197
3楼-- · 2019-07-16 20:14

         WINBOND_W77E058A_40DL

         http://www.100y.com.tw/pdf_file/WINBOND_W77E058A40DL.pdf

         

一周热门 更多>