打印
[技术问答]

N76E003 进入管脚中断后,不会在执行main的while程序,求助

[复制链接]
4227|13
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
各位前辈,麻烦指点下。
   我配置了P04号管脚,接通端子时,进入中断。现在进入了中断,但是之后不再执行main主程序while里面的代码了。求各位帮忙看下是哪里的问题。
代码如下:
sbit led = P1^3;
bit powerBool;

void main (void)
{
    InitialUART0_Timer1(115200);
    P13_Quasi_Mode;
    PICON |= 0x40;       
        PIPEN |= 0x10;
        set_EA;    //开启总中断
        set_EPI;

        while(1){
           if(powerBool ==0){
              printf ("\n if--");
                     led = 1;
                         Timer0_Delay1ms(500);
                         led = 0;
                         Timer0_Delay1ms(500);
                        led = 1;
                        Timer0_Delay1ms(500);         
                        led = 0;
            }else{
                  printf ("\n else");
              led = 1;
            }
    }
}

void PinInterrupt(void) interrupt 7 {
   
    printf ("\n zhongduan++");
    if(PIF==0x10){
        PIF=0;//清除外部中断标志
            if(powerBool==0){
                  printf ("\n zhongduan -- if --");
                  powerBool =1;  
                }else{
                  printf ("\n zhongduan --else--");
                  powerBool=0;
                }
    }
}

使用特权

评论回复
沙发
晨sunshine|  楼主 | 2021-8-19 17:53 | 只看该作者
看打印的日志,在zhongduan -- if --或者zhongduan --else--。然后就不在打印了,按我理解,应该中断执行完后,返回主程序的while循环里面的。

使用特权

评论回复
板凳
晨sunshine|  楼主 | 2021-8-19 17:57 | 只看该作者
if--
if--
if--
zhongduan++
zhongduan -- if --
zhongduan++
zhongduan --else--   
打印信息如上,我接通或者断开端子的时候,就有打印。证明是有检测到,但是不if---或者else---的打印怎么都不再出现了,就想程序卡主在管脚中断这了

96414611e2a64b44c9.png (13.23 KB )

96414611e2a64b44c9.png

19562611e2a6a213a5.png (13.23 KB )

19562611e2a6a213a5.png

使用特权

评论回复
地板
alienmiller| | 2021-8-19 18:39 | 只看该作者
注意一下 powerBool 的状态。

使用特权

评论回复
5
pigluffy| | 2021-8-19 22:48 | 只看该作者
本帖最后由 pigluffy 于 2021-8-19 22:53 编辑

你把PIF=0移到最下面應該就解決了
    if(PIF==0x10){
    }
    PIF=0;

使用特权

评论回复
6
晨sunshine|  楼主 | 2021-8-20 09:07 | 只看该作者
alienmiller 发表于 2021-8-19 18:39
注意一下 powerBool 的状态。

powerBool的状态,我测试过注释,但是一样的结果.应该和状态这个关系不大

使用特权

评论回复
7
晨sunshine|  楼主 | 2021-8-20 09:12 | 只看该作者
pigluffy 发表于 2021-8-19 22:48
你把PIF=0移到最下面應該就解決了
    if(PIF==0x10){
    }

我把PIF = 0;移动到最后。效果是一样的,回不到whlie。如果我把这个注释,那就一直在中断里面,串口一直在打印zhongduan++/zhongduan -- if --停不下来。

使用特权

评论回复
8
一事无成就是我| | 2021-8-20 10:37 | 只看该作者
注意你的中断操作模式,是自动清除中断标志还是需要手动,手动的话,中断执行完毕请你无条件清除中断标志

使用特权

评论回复
9
晨sunshine|  楼主 | 2021-8-20 13:31 | 只看该作者
一事无成就是我 发表于 2021-8-20 10:37
注意你的中断操作模式,是自动清除中断标志还是需要手动,手动的话,中断执行完毕请你无条件清除中断标志 ...

我设置的是上升触发,在触发之后PIF已置0  。可以帮忙看下是不是配置错了?

使用特权

评论回复
10
晨sunshine|  楼主 | 2021-8-20 13:37 | 只看该作者

PICON |= 0x40; 配置引脚 P04 边沿触发

因为配置上升触发,所以PINEN 没管
PIPEN |= 0x10;  配置4号脚上升触发。

边沿触发,PIF会变 1 ,然后我在触发后就清零
------------------------
不知道是不是哪里配置错了,请各位前辈帮忙看看。。感谢

使用特权

评论回复
11
pigluffy| | 2021-8-20 14:08 | 只看该作者
晨sunshine 发表于 2021-8-20 09:12
我把PIF = 0;移动到最后。效果是一样的,回不到whlie。如果我把这个注释,那就一直在中断里面,串口一直 ...

你把斷點設在IF(PIF==0x10)這邊,看中斷的時候PIF數值是什麼

使用特权

评论回复
12
elife| | 2021-8-20 15:30 | 只看该作者
把中断中的printf语句都去掉,只在大循环中看打印结果是否正常。

使用特权

评论回复
13
一事无成就是我| | 2021-8-20 17:09 | 只看该作者
void PinInterrupt(void) interrupt 7 {
   
    printf ("\n zhongduan++");
    if(PIF4)
   {   
            if(powerBool==0){
                  printf ("\n zhongduan -- if --");
                  powerBool =1;  
                }
                else
               {
                  printf ("\n zhongduan --else--");
                  powerBool=0;
                }
    }
    PIF=0;//清除外部中断标志
}
如果你其它口没有中断,请你不要用赋值运算,而是直接赋值方式,避免不必要的中断标志影响,因为有的片子只是中断有效没有开,但是中断标志依然是有效的

使用特权

评论回复
14
晨sunshine|  楼主 | 2021-8-21 10:41 | 只看该作者
本帖最后由 晨sunshine 于 2021-8-21 10:45 编辑

感谢各位前辈的帮助和意见。已经解决了。估计是因为和定时器有冲突,timer 0123都不行
采用这种方式延时才可以
void delay1s(void)   //误差 0us
{
    unsigned char a,b,c;
    for(c=167;c>0;c--)
        for(b=171;b>0;b--)
            for(a=16;a>0;a--);
    _nop_();  //if Keil,require use intrins.h
}
main里面的while改为
深层原因我没找到,可能是芯片的中断触发和定时器有什么地方冲突
如果有前辈知道原因的,麻烦告知下

------------再次感谢各位的回复

334576120683a78cba.png (36.17 KB )

334576120683a78cba.png

92968612068866d99d.png (37.43 KB )

92968612068866d99d.png

使用特权

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

本版积分规则

6

主题

19

帖子

0

粉丝