[技术问答]

关于赛元单片机的中断嵌套的问题求解答

[复制链接]
931|4
手机看帖
扫描二维码
随时随地手机跟帖
布丁奶茶|  楼主 | 2019-8-14 15:06 | 显示全部楼层 |阅读模式
单片机型号:  SC92F7423
遇到的问题: 发现在低等级的中断服务程序中加入类似于死等的条件,高等级中断发生时不能打断低优先级的中断

下面是我的一段模拟串口的程序,发现程序总是卡在while(!Time2Flag);里,(因为我的点灯没有得到执行)
void Timer2() interrupt 5
{               
        TF2 = 0;   //溢出清零
                P22 = ~P22;
                LEDPIN =1;    //点亮LED
               Time2Flag =1;           
}

void EX2() interrupt        2
{
   
            //有下降沿中断,说明收到了起始位,开始接收
        DisableINT1_2();
        EnableTim2();       
        //if(UART_RX == 1){
              // EnableINT1_2();
                //return;
        //}
       
        while(!Time2Flag);   //等待一个bit时间,接收第一个数据位
        Time2Flag =0;
        UartRecvOneByte_0 =(bit)UART_RX;
   
       
        while(!Time2Flag);   //等待一个bit时间,接收第二个数据位
        Time2Flag =0;
        UartRecvOneByte_1 =(bit)UART_RX;
   
        while(!Time2Flag);   //等待一个bit时间,接收第三个数据位
        Time2Flag =0;
        UartRecvOneByte_2 =(bit)UART_RX;

        while(!Time2Flag);   //等待一个bit时间,接收第四个数据位
        Time2Flag =0;
        UartRecvOneByte_3 =(bit)UART_RX;

        while(!Time2Flag);   //等待一个bit时间,接收第五个数据位
        Time2Flag =0;
        UartRecvOneByte_4 =(bit)UART_RX;

        while(!Time2Flag);   //等待一个bit时间,接收第六个数据位
        Time2Flag =0;
        UartRecvOneByte_5 =(bit)UART_RX;

        while(!Time2Flag);   //等待一个bit时间,接收第七个数据位
        Time2Flag =0;
        UartRecvOneByte_6 =(bit)UART_RX;

        while(!Time2Flag);   //等待一个bit时间,接收第八个数据位
        Time2Flag =0;
        UartRecvOneByte_7 =(bit)UART_RX;
   
        while(!Time2Flag){         //等待接收停止位
               if(UART_RX==1){
          Time2Flag =0;
                 break;
               }
            }
            DisableTim2();
            EnableINT1_2();               
}

使用特权

评论回复

相关帖子

ayb_ice| | 2019-8-15 15:34 | 显示全部楼层
优先级寄存器设置了没有呢

如果没有设置,这样是对的,这时是不能抢先的(同时发生中断可以抢先,但已经中断执行不能抢先)

使用特权

评论回复
布丁奶茶|  楼主 | 2019-8-15 15:57 | 显示全部楼层
ayb_ice 发表于 2019-8-15 15:34
优先级寄存器设置了没有呢

如果没有设置,这样是对的,这时是不能抢先的(同时发生中断可以抢先,但已经中 ...

请问优先级寄存器要怎么设置呢?我只是把外部中断的优先级设为低,但是根据中断向量表看,定时器的中断优先级本来就是要高于外部中断的。

使用特权

评论回复
ayb_ice| | 2019-8-15 16:32 | 显示全部楼层
布丁奶茶 发表于 2019-8-15 15:57
请问优先级寄存器要怎么设置呢?我只是把外部中断的优先级设为低,但是根据中断向量表看,定时器的中断优 ...

前面已经説很清楚了,怎么设置看寄存器手册, 这个芯片我没有用过

标准51是在IP寄存器里设置

使用特权

评论回复
knk| | 2019-8-22 19:56 | 显示全部楼层
布丁奶茶 发表于 2019-8-15 15:57
请问优先级寄存器要怎么设置呢?我只是把外部中断的优先级设为低,但是根据中断向量表看,定时器的中断优 ...

IP和IP1两个寄存器

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

44

主题

180

帖子

1

粉丝