找回密码
 立即注册
查看: 390|回复: 6

8G1K08串口2无法进中断,麻烦大神给看下什么问题

[复制链接]
  • 打卡等级:初来乍到
  • 打卡总天数:1
  • 最近打卡:2024-06-14 17:41:01

1

主题

2

回帖

13

积分

新手上路

积分
13
发表于 2024-6-14 17:08:58 | 显示全部楼层 |阅读模式

void InitUart2(uint BAUD)        //9600bps@11.0592MHz
{
       

        P_SW2 &= ~0x01;                                                //UART2/USART2: RxD2(P1.0), TxD2(P1.1)
        S2CON = 0x10;                //8位数据,可变波特率
        AUXR |= 0x04;                //定时器时钟1T模式
        T2L = (65536 - (FOSC/4/BAUD));                //设定定时初值
        T2H = (65536 - (FOSC/4/BAUD))>>8;                //设定定时初值
        AUXR |= 0x10;                //定时器2开始计时
       
IE2 = 0x01;                                  //使能串口中断

EA = 1;

b485Send2 = 0;                                           //处于接收
}
void Uart2() interrupt 8
{
        //接收
    if (S2CON & 0x02)
    {
        S2CON &= ~0x02;                 //清除S2RI位                       
                                receTimeOut2 = 10;                            //通讯超时值这个地方很重要        10ms
                                receBuf2[receCount2] = S2BUF;                //把接收到的数据送往接收缓冲区
                                receCount2++;                                  //接收地址偏移寄存器加1     
    }
        //发送
    if (S2CON & 0x01)
    {
        S2CON &= ~0x01;         //清除S2TI位
        busy2 = 0;               //清忙标志
    }
}
void uartsends2(uchar buff[],uchar len)
{
        uchar i;
        for(i=0;i<len;i++)
        {        

                S2BUF = buff;
                busy2 = 1;
                while (busy2); 一直卡到这里
        }
}
void Begin_send2(void)
{
        b485Send2 = 1;                      //处于发送
        Delay1ms();
        Delay1ms();
        uartsends2(sendBuf2,sendCount2);
        b485Send2 = 0;               //处于接收
        Delay1ms();
        Delay1ms();
  receCount2 = 0;          //清接收地址偏移寄存器

}

回复

使用道具 举报 送花

  • 打卡等级:偶尔看看III
  • 打卡总天数:55
  • 最近打卡:2025-05-02 08:32:59

718

主题

1万

回帖

1万

积分

管理员

积分
15630
发表于 2024-6-14 17:30:20 | 显示全部楼层
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:初来乍到
  • 打卡总天数:1
  • 最近打卡:2024-06-14 17:41:01

1

主题

2

回帖

13

积分

新手上路

积分
13
发表于 2024-6-14 17:38:46 | 显示全部楼层
我这个是TSSOP20,有串口2的,发送数据串只能发出去第一个字节,然后就卡到检测忙标志的那里了,就是进不了中断一直在那卡着,

点评

用我们正确的程序测试  详情 回复 发表于 2024-6-14 20:33
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:偶尔看看III
  • 打卡总天数:55
  • 最近打卡:2025-05-02 08:32:59

718

主题

1万

回帖

1万

积分

管理员

积分
15630
发表于 2024-6-14 20:33:38 | 显示全部楼层
suho*** 发表于 2024-6-14 17:38
我这个是TSSOP20,有串口2的,发送数据串只能发出去第一个字节,然后就卡到检测忙标志的那里了,就是进不了 ...
用我们正确的程序测试
截图202406142033521839.jpg
STC8系列4组串口同时通信的程序,Modbus 演示程序;可共享T2做波特率发生器 - 串行口,DMA支持的4组串口,RS232,RS485 国芯技术交流网站 - STC全球32位8051爱好者互助交流社区 (stcaimcu.com)




回复 支持 反对

使用道具 举报 送花

  • 打卡等级:以坛为家II
  • 打卡总天数:423
  • 最近打卡:2025-05-02 07:55:56
已绑定手机

19

主题

3191

回帖

4872

积分

论坛元老

积分
4872
发表于 2024-6-14 22:02:20 | 显示全部楼层
busy2 = 1;
while (busy2); busy2赋值1了,while(1)不卡才怪
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:初来乍到
  • 打卡总天数:1
  • 最近打卡:2024-06-14 17:41:01

1

主题

2

回帖

13

积分

新手上路

积分
13
发表于 2024-6-15 09:57:05 | 显示全部楼层
so*** 发表于 2024-6-14 22:02
busy2 = 1;
while (busy2); busy2赋值1了,while(1)不卡才怪

进中断就会跳出来了,没进中断才会一直卡到这
void Uart2() interrupt 8
{
        //接收
    if (S2CON & 0x02)
    {
        S2CON &= ~0x02;                 //清除S2RI位                       
                                receTimeOut2 = 10;                            //通讯超时值这个地方很重要        10ms
                                receBuf2[receCount2] = S2BUF;                //把接收到的数据送往接收缓冲区
                                receCount2++;                                  //接收地址偏移寄存器加1     
    }
        //发送
    if (S2CON & 0x01)
    {
        S2CON &= ~0x01;         //清除S2TI位
        busy2 = 0;               //清忙标志
    }

}
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:以坛为家I
  • 打卡总天数:337
  • 最近打卡:2025-04-28 12:55:00

23

主题

296

回帖

1160

积分

金牌会员

积分
1160
发表于 2024-6-15 13:21:11 | 显示全部楼层
我看着像是中断函数里 接收和发送 搞反了,发送中断在第2位
截图202406151319585543.jpg
回复 支持 反对

使用道具 举报 送花

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

本版积分规则

QQ|手机版|小黑屋|深圳国芯人工智能有限公司 ( 粤ICP备2022108929号-2 )

GMT+8, 2025-5-2 20:21 , Processed in 0.143723 second(s), 96 queries .

Powered by Discuz! X3.5

© 2001-2025 Discuz! Team.

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