最近在调串口通信时,遇到一个问题,求各位大神指导。
用的芯片是MA82G5B16,在调串口通信时,发送数据没有返回,但是,单片机向串口发送数据时可以正常发送,
请各位大神看下是哪块的问题了呢?
这是串口初始化函数
void Uart0_Init()
{
SFRPI = PAGE_0; //切换SFR页为0页
S0CON = 0x50; //设置串口0工作模式为1,使能串口接收
PCON0 &= 0x3F; //
S0CFG &= 0x3F; //定时器 2 作波特率发生器
// EA=1;//开启总中断.在定时器初始化时已经打开
}
void Prints(uint8_t *ptr)
{
uint8_t temp;
while(*ptr)
{
temp = *ptr;
if(temp == '\n')
{
PrintChar(0x0D);
PrintChar(0x0A);
}
else if(temp == '\r')
{
PrintChar(' ');
}
else
PrintChar(*ptr);
ptr++;
}
}
void PrintChar(uint8_t c)
{
S0BUF = c;
while (!TI0); //check Tx Empty
TI0=0;
}
///////////////////定时器2相关配置//////////////////////////////////////
//Timer2
T2MOD = 0x10;//当 T2CON.C/T2 = 0选择 SYSCLK 作为捕获和自动重载模式定时器 2 的时钟源。
T2CON = 0x30;//定时器2溢出用作接串行口模式1和3接收和发送时钟
TH2 = 0xFF;
TL2 = 0xE6;
RCAP2H = 0xFF;
RCAP2L = 0xE6; // base48MHz
TR2 = 1;
}
这是主程序中的中断处理
// Prints("12");//这个可以再串口正常显示,
// DelayMs(200);
//////////////////////中断标志/////////////////////////////////////
if(R_flag==1)
{
PrintChar(SenData);//将接受到的数据发送出去
R_flag=0;
}
}
这是中断
void interrupt_uart0(void) interrupt 5
{
if(TI0)
{
TI0=0;
}
if(RI0)
{
RI0=0;
ReData=S0BUF; //SUBF接受/发送缓冲器
SenData=ReData;
R_flag=1;//接收标志置位
}
}
求大神看下是哪块的问题了呢?
|