【问题标题】:enable ports RB4 and RB3 on pic 18F4550在 pic 18F4550 上启用端口 RB4 和 RB3
【发布时间】:2011-03-22 19:59:14
【问题描述】:

我在 mplab v8.63 中使用 pic 18F4550 上的 c 编译器 C18 编写了这个程序。如果我按下我的 picdem (S3) 上的按钮并且在 RB5 上连接了一个 LED(带有一个电阻器),那么 LED 就会亮起。当我按下 (S3) 并且 RB4 上有一个 LED 时,LED 将不会亮起(虽然我预计会这样)与 RB3 相同。我忘记设置什么了吗?

目标是使用 LDR 分别测量红色、绿色和蓝色 LED。但首先我显然必须启用端口 RB5、RB4 和 RB3。

#pragma code
/******************************************************************************/

void main (void)
{   

    TRISD = 0x00;               // PORTD  as output
    TRISB = 0b00110000;         // RB4 en RB5 as input
    TRISA = 0x00;               // RA output

    RCONbits.IPEN = 0;          // priority
    INTCONbits.GIE = 1;         // enable interrupt
    INTCONbits.RBIE = 1;        // interrupt portB on

    while(1)
    {   
        _asm sleep _endasm  
    }
}

#pragma interrupt ISR
void ISR (void)
{
    //int red= 01110010011011110110111101100100;
    int on = 1;
    int off = 0;
    if (INTCONbits.RBIF==1)
    {
        if(PORTBbits.RB5==0)        // S3 pressed?
        {
            LATDbits.LATD1 ^= 1;    // D2 toggle
            LATAbits.LATA2 ^= on;
        }
        if(PORTBbits.RB4==0)
        {
            LATDbits.LATD1 ^= 1;    // D2 toggle
            LATAbits.LATA2 ^= on; 
        }
        if(PORTBbits.RB3==0)
        {
            LATDbits.LATD1 ^= 1;    // D2 toggle
            LATAbits.LATA2 ^= on; 
        }

    }   
    INTCONbits.RBIF = 0;
}

【问题讨论】:

    标签: c embedded microcontroller pic


    【解决方案1】:

    在 PIC TRIS 寄存器中,设置为 1 的位表示输入,0 表示输出。您将 TRISB = 0b00110000 设置为端口 B 上的所有输出,除了输入的 RB5 和 4。如果还需要 RB3 作为数字输入,则需要设置 TRISB = 0b00111000。位计数为 b7,b6,b5,b4,b3,b2,b1,b0。

    但是,您期望 RB3 触发 RBIF,但它不像我 explained here 那样触发。因此,正如您所拥有的,只有 RB5 和 4 会触发 RBIF,但如果 R​​B3 那时为低电平,它将切换 D1 和 A2。所以按照我的建议将此代码移动到主循环,直到你让它工作,然后让它在中断上工作。

    正如 ChrisJ 所说,某些引脚默认为模拟输入,除非您禁用它,这样您就不会获得数字输入并中断您期望使用 ADCON1 的引脚更改

    【讨论】:

      【解决方案2】:

      如果设置了PBADEN 位,则 PORTB 初始化为 RB4:RB0 设置为模拟输入。如果是这样,您必须使用 ADCON1 禁用 RB4:RB0 上的模拟输入。手册第 10.2 节开头的示例程序将 0x0E 写入ADCON1 以正确初始化 PORTB。

      有关ADCON1 位的解释,另请参见第 21.0 节。

      【讨论】:

      • 是的,我确实找到了这些部分。但我现在不知道如何在 C 语言中启用。它与此代码“TRISB = 0b0110000;”有关但是,不知道如何启用它。感谢您的回复!
      • 我只想启用其他端口(RB4 和 RB3)或 RB7 或 RB6。我该怎么做?
      • 不同可用配置的 ADCON1 值在最新手册的第 266 页有详细描述:ww1.microchip.com/downloads/en/DeviceDoc/39632e.pdf
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2021-07-18
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多