标题:
单片机程序 串口能进中断,可正常接收,不能发送,却能进发送中断
[打印本页]
作者:
nanjyy
时间:
2023-7-5 16:21
标题:
单片机程序 串口能进中断,可正常接收,不能发送,却能进发送中断
问题描述:串口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;
}
}
作者:
zyluglugl
时间:
2023-7-7 09:11
你可以进入调试,看看是卡在哪里了,是不是没有清发送中断标志位?
作者:
Hephaestus
时间:
2023-7-7 15:35
能进发送中断说明已经发送出去了,你看不到那就是硬件问题。
作者:
lkc8210
时间:
2023-7-7 15:49
STC8引脚预设是高阻输入
你改回准双向了吗?
欢迎光临 (http://www.51hei.com/bbs/)
Powered by Discuz! X3.1