STC12C5A单片机串口1接收数据给数组后,由串2发送,反之也可以,求大神帮忙看看程序为啥不行?

#include "STC12C5A.h"
#include "intrins.h"
#include "string.h"
#define uchar unsigned char
#define uint unsigned int
#define S2RI 0x01 //串口2接收中断请求标志位
#define S2TI 0x02 //串口2发送中断请求标志位
uchar xdata Data1_BUF[32],Data2_BUF[32];
uchar flag1,flag2,temp1,temp2;
uint m=0,n=0;
void delay(void)
{ uint j,g;
for(j=0;j<500;j++)
for(g=0;g<500;g++);
}
void Uart_Init (void)
{
SCON=0x50; //串口1工作方式1,
TMOD=0x20; //定时器1为工作方式2
TH1=0xFD; //产生9600bps
TL1=0xFD;
TR1=1;
S2CON=0x50; //工作方式一,允许接收
BRT=0xFD;
AUXR1=0x10;
AUXR=0x10;
IE2=0x01;
flag1=flag2=0;
ES=1;
EA=1;
}

void UART1_SendOneByte(uchar c)
{
SBUF = c;
while(!TI);
TI = 0;
}
void UART2_SendOneByte(uchar c)
{ S2BUF = c;
while(!(S2CON&S2TI));
S2CON&=~S2TI;
}
void UART1_SendString(char *p)
{ while(* p)
UART1_SendOneByte(*p++);
}
void UART2_SendString(char *p)
{
while(* p)
UART2_SendOneByte(*p++);
}

void UART_1Interrupt(void) interrupt 4
{ if(RI==1)
{ RI=0;
if(SBUF!='\0')
{ Data1_BUF[m++]=SBUF;}
else
{ flag1=1;
Data1_BUF[m]='\0';
m=0;
}
}
}

void UART_2Interrupt(void) interrupt 8
{
if(!(S2CON&S2RI))
{ S2CON&=~S2RI;
if(S2BUF!='\0')
{ Data2_BUF[n++]=S2BUF;}
else
{ flag2=1;
Data2_BUF[n]='\0';
n=0;
}
}
}

void main(void)
{ Uart_Init();
while(1);
{ if(flag1==1)
{ flag1=0;
UART2_SendString(Data1_BUF);
}
if(flag2==1)
{ flag2=0;
UART1_SendString(Data2_BUF);
}
}
}

第1个回答  推荐于2017-10-06
#include "include.h"
uchar databuff[20];
uint pin,pout;
/*
串口1用于发送系统采集到的数据
串口2用于GPS信号收集,
*/
//串口1用于将系统采集到的信息发送给PC或路由
void uart1_init()
{
SCON=0X50;//串口方式1,允许接收
TMOD=0X21;//定时器1的方式2,定时器0的方式1
TH1=0Xfd;//GPS接受信号波特率4800 //9600
TL1=0Xfd;//
PCON|=0X00;
TR1=1;//启动定时器1
REN=1; // 允许接收
ES=1; //允许串口中断
EA=1; // 开总中断
}
void uart1_sendbyte(uchar i)
{
ES=0;//发送数据时关中断
TI=0;
SBUF=i;
while(TI==0);
TI=0;
ES=1;
}
void uart1_receive(void) interrupt 4
{
uchar uc;
if(RI)
{
RI=0;
ES=0;//接收数据时关闭串口中断
uc=SBUF;
uart1_sendbyte(uc);//串口1将数据发给串口2
databuff[pin]=uc;
pin++;
if(pin>20)
pin=0;
}
// RI=1;
// ES=1; //开串口中断
}
//串口2用于接收GPS信号
void uart2_init()
{
S2CON=0X50;//方式2 允许接受
BRT=0XFD;// 设置波特率9600
AUXR|=0X10;//允许波特率发生器运行
AUXR1&=0XEF;//S2_P4=0 将uart2切换到p1口
IE2|=0X01;// 允许串口2中断
}
void uart2_sendbyte(uchar i)
{
ES=0;
S2BUF=i;// uart2发送数据
while((S2CON&0X02)!=0X02); //
S2CON&=~0X02; //
ES=1;
}
void uart2_receive(void) interrupt 8
{
uchar a;
uint k=0;
a=S2CON&0X01;
if(a==1)
{
k=S2BUF;
S2CON&=0xfe;
uart1_sendbyte(k);
// GPS(k);//将串口接收到的信息交给GPS处理程序
S2CON&=0xfd;
}
// else
// S2CON&=0xfd; // 清0 S2RI
}
void uart_printf(char a,uchar *p)
{
if(a==1)
{
while(*p!='\0') uart1_sendbyte(*p++);
}
if(a==2)
{
while(*p!='\0') uart2_sendbyte(*p++);
}
}
你好,你看一下这一个,我改的,正在用。。。希望对你有帮助
第2个回答  2013-10-29
你串口2没设波特率 啊,这怎么接
相似回答