問題描述:串口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;
}
}
|