我用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 S2
ti 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;
}
}
一周热门 更多>