问题描述:串口2能进入接收中断,正常接受数据。发送部分也能进入发送中断,更新发送标记位,但奇怪的是,电路上静悄悄,没有任何波动,串口助手接受不到单片机回传的数据。也就是,串口接受正常,发送不正常。请大神看看,是不是程序有什么问题?
使用STC8H1K28单片机
串口2驱动部分
void Uart2Init(void) //9600bps@22.1184MHz 面板用串口
{
S2CON = 0x50; //8位数据,可变波特率
AUXR |= 0x04; //定时器时钟1T模式
T2L = 0xC0; //设置定时初始值
T2H = 0xFD; //设置定时初始值
AUXR |= 0x10; //定时器2开始计时
IP2 &= 0XFE;
IP2H &=0XFE;//UART2中断优先级最低
P_SW2 = 0x00; //RXD2/P1.0, TXD2/P1.1
IE2 |= 0X01; //打开Uart2中断允许位 相当于 ES2=1;
}
串口发送部分
void UartReturnTemperatureValue()
{
char i =0;
Temperature_UartSend_Value[0] = 0xFF;
Temperature_UartSend_Value[1] = KZB_Cold_Temperature;
Temperature_UartSend_Value[2] = KZB_Warm_Temperature;
Temperature_UartSend_Value[3] = KZB_Ground_Temperature;
Temperature_UartSend_Value[4] = WIFI_Connect;
Temperature_UartSend_Value[5] = Temperature_UartSend_Value[0]+Temperature_UartSend_Value[1]+Temperature_UartSend_Value[2]+Temperature_UartSend_Value[3]+Temperature_UartSend_Value[4];
*UartSend_Ptr = Temperature_UartSend_Value;
Uart_OnSending = 1;//标记CPU处于发送忙状态
UartSendFlag = 0;
for(i=0;i<6;i++)
{
S2BUF = *UartSend_Ptr++;
while(!UartSendFlag);
UartSendFlag = 0;
}
Uart_OnSending = 0;//标记CPU可接受后续数据
}
串口中断部分:
void Intterrupt_Uart2(void) interrupt 8 //UART2 INTTERUPT
{
if(S2CON & 0X02)//发送部分《= 此处中断能进入,UartSendFlag能被置1,但数据发送不出去。
{
S2CON &=~0X02;//清除发送标记位
UartSendFlag =1;
}
if(S2CON & 0X01)//接受部分
{
S2CON &=~0X01;//接受标记位
UartReceieveFlag = 1;
}
}
|