找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 1371|回复: 3
打印 上一主题 下一主题
收起左侧

单片机程序 串口能进中断,可正常接收,不能发送,却能进发送中断

[复制链接]
跳转到指定楼层
楼主
ID:1087361 发表于 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;

                }
}


分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖 顶 踩
回复

使用道具 举报

沙发
ID:584195 发表于 2023-7-7 09:11 | 只看该作者
你可以进入调试,看看是卡在哪里了,是不是没有清发送中断标志位?
回复

使用道具 举报

板凳
ID:883242 发表于 2023-7-7 15:35 | 只看该作者
能进发送中断说明已经发送出去了,你看不到那就是硬件问题。
回复

使用道具 举报

地板
ID:161164 发表于 2023-7-7 15:49 | 只看该作者
STC8引脚预设是高阻输入
你改回准双向了吗?
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表