STC15W4K单片机串口2 RS485通信问题

2019-07-15 13:47发布

我用STC15W4K单片机串口2进行485通信时,能正常接收却不能发送,用串口助手收不到我要它回复的内容,收发控制线设置也都正确,有谁知道可能是什么原因吗?
附程序(注释部分复制过来乱码了):

#include        "STC15Fxxxx.H"

#include "intrins.h"
#include <string.h>

sbit m485_TX2=P1^2;
#define FOSC 11059200L
#define BAUD 9600
#define TM  (65536-(FOSC/4/BAUD))  //¼ÆÊý³õÖµ=65536-Fosc/Òç³öÂÊ£¨Òç³öËÙÂÊ£©,Òç³öÂÊ=1/¶¨Ê±Ê±¼ä

#define S2RI  0X01
#define S2ti  0X02

char code uart2_resp[]="OK ";
unsigned char xdata uart2_re[10];
unsigned char xdata Recestr_2[10];
u8 xdata uart2_m,uart2_n=0,re_i=0;


void Uart2_Response(char *Resp_2)  //ÏìÓ¦½ÓÊÕµ½µÄÄÚÈÝ£¬Txd·¢ËÍ
{
        IE2 &= ~1;                                                        //¹Ø±Õ´®¿ÚÖжÏ
        S2CON&=~S2RI;
        m485_TX2=1;
        uart2_m=0;
        while(Resp_2[uart2_m]!= '')
   {
                 S2BUF = Resp_2[uart2_m];                //SUBF½ÓÊÜ/·¢ËÍ»º³åÆ÷(Óֽд®ÐÐͨÐÅÌØÊ⹦ÄܼĴæÆ÷)
     while(S2CON&S2TI==0);                                // µÈÌØÊý¾Ý´«ËÍ        (TI·¢ËÍÖжϱêÖ¾)
                 P20=0;
                 S2CON&=~S2TI;                                        // Çå³ýÊý¾Ý´«ËͱêÖ¾
                 uart2_m++;                                            // ÏÂÒ»¸ö×Ö·û
   }
  m485_TX2=0;
        IE2|=0X01;       
}


void Uart2_Check(unsigned char *Recestr)  
{
         re_i=0;
        while(*Recestr)
        {
                Recestr_2[re_i]=*Recestr;
                Recestr++;
                re_i++;
        }
        Recestr_2[re_i]='';
if(strcmp(Recestr_2,"hello")==0)
{
         Uart2_Response(uart2_resp);
}
}



void init_uart2_485(void)  //´®¿Ú1¡¢2¹²ÓÃ1¸ö²¨ÌØÂÊ·¢ÉúÆ÷T2
{
        //        IO_init();                                   //Õë¶ÔIAP15W4K61S4  IO¿Ú³õʼ»¯
                m485_TX2=0;                                 //485¿ØÖƵã¸ø1 ÈÃ485´¦ÓÚ·¢ËÍ״̬  P1.2

    S2CON = 0x50;        //S2REN=1ÔÊÐí´®ÐнÓÊÕ¿ØÖÆ룬S2SM0=0,S2SM1=1,¹¤×÷·½Ê½0,8λUART£¬²¨ÌØÂʿɱä=T2Òç³öÂÊ/4  
                              //´®¿Ú2Ö»ÄÜÑ¡ÔñT2×÷Ϊ²¨ÌØÂÊ·¢ÉúÆ÷   
                T2L=TM;                                 //²¨ÌØÂʸ³Öµ
                T2H=TM>>8;           // ÈçÓв»Ã÷°×Çë²é STC15ÊÖ²áÉÏÓÐÏêϸ˵Ã÷
    AUXR|=0X14;                     //¿ªÆô1Tģʽ£¬²»·ÖƵ,¶¨Ê±Æ÷2ÔÊÐíÔËÐÐ
           IE2|=0X01;            //ES2=1,¿ª´®¿Ú2ÖжϠ                                                        

}



void Uart2()  interrupt 8 using 2               
{
       
  if(S2CON&S2RI)
  {
                if(S2BUF=='#')
                {
                        uart2_re[uart2_n]='';
                        Uart2_Check(uart2_re);
                        uart2_n=0;
                }
                else
                {
                        uart2_re[uart2_n]=S2BUF;
                        uart2_n++;
                }
               
                if(uart2_n>10) uart2_n=0;
               
                S2CON&=~S2RI;
  }
}




友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。