找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 1784|回復: 3
收起左側

單片機程序 串口能進中斷,可正常接收,不能發(fā)送,卻能進發(fā)送中斷

[復制鏈接]
ID:1087361 發(fā)表于 2023-7-5 16:21 | 顯示全部樓層 |閱讀模式
問題描述:串口2能進入接收中斷,正常接受數(shù)據(jù)。發(fā)送部分也能進入發(fā)送中斷,更新發(fā)送標記位,但奇怪的是,電路上靜悄悄,沒有任何波動,串口助手接受不到單片機回傳的數(shù)據(jù)。也就是,串口接受正常,發(fā)送不正常。請大神看看,是不是程序有什么問題?


使用STC8H1K28單片機
串口2驅動部分
void Uart2Init(void)                //9600bps@22.1184MHz 面板用串口
{
        S2CON = 0x50;                //8位數(shù)據(jù),可變波特率
        AUXR |= 0x04;                //定時器時鐘1T模式
        T2L = 0xC0;                //設置定時初始值
        T2H = 0xFD;                //設置定時初始值
        AUXR |= 0x10;                //定時器2開始計時
        IP2 &= 0XFE;
        IP2H &=0XFE;//UART2中斷優(yōu)先級最低
        P_SW2 = 0x00;          //RXD2/P1.0, TXD2/P1.1
        IE2  |= 0X01;         //打開Uart2中斷允許位 相當于 ES2=1;
}


串口發(fā)送部分
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處于發(fā)送忙狀態(tài)
                UartSendFlag = 0;
                for(i=0;i<6;i++)
                {
                                S2BUF = *UartSend_Ptr++;
                                while(!UartSendFlag);
                                UartSendFlag = 0;
                              
                }
                Uart_OnSending = 0;//標記CPU可接受后續(xù)數(shù)據(jù)
}

串口中斷部分:
void Intterrupt_Uart2(void) interrupt 8 //UART2 INTTERUPT
{
                if(S2CON & 0X02)//發(fā)送部分《= 此處中斷能進入,UartSendFlag能被置1,但數(shù)據(jù)發(fā)送不出去。
                {
                                S2CON &=~0X02;//清除發(fā)送標記位
                                UartSendFlag =1;
                }

               if(S2CON & 0X01)//接受部分
                {
                                S2CON &=~0X01;//接受標記位
                                UartReceieveFlag = 1;

                }
}


回復

使用道具 舉報

ID:584195 發(fā)表于 2023-7-7 09:11 | 顯示全部樓層
你可以進入調試,看看是卡在哪里了,是不是沒有清發(fā)送中斷標志位?
回復

使用道具 舉報

ID:883242 發(fā)表于 2023-7-7 15:35 | 顯示全部樓層
能進發(fā)送中斷說明已經發(fā)送出去了,你看不到那就是硬件問題。
回復

使用道具 舉報

ID:161164 發(fā)表于 2023-7-7 15:49 | 顯示全部樓層
STC8引腳預設是高阻輸入
你改回準雙向了嗎?
回復

使用道具 舉報

您需要登錄后才可以回帖 登錄 | 立即注冊

本版積分規(guī)則

小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術交流QQ群281945664

Powered by 單片機教程網

快速回復 返回頂部 返回列表