gpt4 book ai didi

c - 在 pic 18F4550 上启用端口 RB4 和 RB3

转载 作者:太空宇宙 更新时间:2023-11-04 04:06:28 27 4
gpt4 key购买 nike

我在 mplab v8.63 中用 C 编译器 C18 在 pic 18F4550 上编写了这个程序。如果我按下 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;
}

最佳答案

在 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,但如果当时 RB3 为低电平,它会切换 D1 和 A2。因此,按照我的建议将这段代码移至主循环,直到你让它工作,然后让它在中断时工作。

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

关于c - 在 pic 18F4550 上启用端口 RB4 和 RB3,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5397074/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com