这些小活动你都参加了吗?快来围观一下吧!>>
电子产品世界 » 论坛首页 » 企业专区 » Microchip » 【再也不相信爱情了】--再也不相信Microchip C30自带头文件中的XXX

共8条 1/1 1 跳转至

【再也不相信爱情了】--再也不相信Microchip C30自带头文件中的XXXXbits.XXX了

高工
2013-07-26 15:38:06     打赏

    大家写程序的时候是不是在可以的情况下喜欢使用例如if(PORTBbits.RB12 == 0){}之类的句子啊,只说括号里面的内容哈!这里提个醒:在某些情况下是不能这样使用的,附上代码说明:

void __attribute__((interrupt, no_atuo_psv)) _CNInterrupt(void)
{
    IFS1bits.CNIF = 0; // 清除外部中断标志位
    Exit_Delay();
    if((LATB &0x1000) == 0x1000)  // RB12
    {
        KeyValue = 1;    // 只有这一句执行得到,因为上面是用的整个寄存器与或实现的
    }

    // 以下这些用XXXXbits.XXXX的都无法检测到的
    else if(LATBbits.LATB13 == 0)  // RB13
    {
        KeyValue = 2;
    }
    else if(LATBbits.LATB14 == 0)
    {
        KeyValue = 3;
    }
    else if(LATBbits.LATB15 == 0)
    {
        KeyValue = 4;
    }
    else if(LATFbits.LATF4 == 0)
    {
        KeyValue = 5;
    }
    else if(LATFbits.LATF5 == 0)
    {
        KeyValue = 6;
    }

    Exit_Delay();
    IFS1bits.CNIF = 0; // 清除外部中断标志位
}

不知道是不是我使用的错误,按理说官方文件里面的东西不应该出这样的错啊,再也不相信爱情了……


刚刚一个马虎,判断错误,在这里声明,至少在这个地方不是刚刚说的XXXXbits.XXXX引起的,而是LATX引起的,下面的程序试过是正确的,有没有大侠知道全面点的,麻烦总结一下:

void __attribute__((interrupt, no_atuo_psv)) _CNInterrupt(void)
{
    IFS1bits.CNIF = 0; // 清除外部中断标志位
    Exit_Delay();
    //if((PORTB & 0x1000) == 0x0000)  // RB12
    if(PORTBbits.RB12 == 0)
    {
        KeyValue = 1;   // ===>这样就可以,看来是用的有问题
    }
    else if((PORTB &0x2000) == 0x0000)  // RB13
    {
        KeyValue = 2;
    }
    else if((PORTB &0x4000) == 0x0000)
    {
        KeyValue = 3;
    }
    else if((PORTB &0x8000) == 0x0000)
    {
        KeyValue = 4;
    }
    else if((PORTF &0x0010) == 0x0000)
    {
        KeyValue = 5;
    }
    else if((PORTF &0x0020) == 0x0000)
    {
        KeyValue = 6;
    }

    Exit_Delay();
    IFS1bits.CNIF = 0; // 清除外部中断标志位
}

我又相信爱情了,但好像对爱情还不是很懂……

 




关键词: 再也     不相信     爱情     Microchip     XXXXb    

高工
2013-07-26 15:42:25     打赏
2楼
这个好用switch语句么,一个寄存器某些引脚用作了中外部中断,其他引脚还有其他功能,随时可能发生值的变化,不能吧……

高工
2013-07-26 16:00:28     打赏
3楼
是我自已用法用问题好像,大侠们说用LAT读得准一些,我就用LAT,结果被蒙了……

高工
2013-07-26 16:01:48     打赏
4楼
听大侠说,用LAT好像端口读得更准一点,然后我就用LAT了,刚刚突发奇想用PORTx直接读,就可以了,已在原贴更正了

高工
2013-07-26 16:03:44     打赏
5楼

嗯,我刚发完,然后就想到了用PORTx测试,结果发现这里不能用LATx而要用PORTx,具体原因等回去查一下资料,然后总结一下,在原贴更正……


高工
2013-07-26 16:17:52     打赏
6楼

嗯,的确是这个样子,该好好总结一下


高工
2013-07-29 11:28:09     打赏
7楼
呵呵,导致不相信爱情的因素很多,比如说某某和某某分手了,再也不相信爱情了,呵呵

高工
2013-08-02 09:14:04     打赏
8楼
嗯,谢谢,当时也想到了,只是想想判断速度很快,不存在,不过你的方法更好些。

共8条 1/1 1 跳转至

回复

匿名不能发帖!请先 [ 登陆 注册 ]