我读取了端口RB7,并在if中检查了值。如果RB7上有输出,我希望我的芯片上的led点亮(led D1),但是即使没有连接到RB7,它也一直在燃烧。我做错什么了?这是PIC18F4550,它是用mplabv8.63和C18编译器编写的。
void main (void)
{
TRISD = 0x00; // PORTD als uitgang
TRISB = 0b00110000; // RB4 en RB5 als ingang
RCONbits.IPEN = 0; // prioriteit uit
INTCONbits.GIE = 1; // enable interrupt
INTCONbits.RBIE = 1; // interrupt portB aan
TRISBbits.TRISB7 = 0;
TRISBbits.TRISB6 = 0;
TRISBbits.TRISB3 = 0;
while(1)
{
_asm sleep _endasm
}
}
#pragma interrupt ISR
void ISR (void)
{
if (INTCONbits.RBIF==1)
{
if(LATBbits.LATB7 == 1) // value on RB7 ?
{
LATDbits.LATD1 ^= 1; // D2 togglen
}
}
INTCONbits.RBIF = 0;
}发布于 2011-03-19 15:56:11
有三件事:
发布于 2011-03-21 13:28:46
您正在读取在B7上的输出值,这没有多大意义。B7是明确的(低),除非您在代码中设置它,所以B7不会发生任何更改。在任何情况下,对B7输出锁存的更改都不会触发RBIF。
当任何RB7到RB4更改状态时,都会设置RBIF。您已经将RB5和RB4声明为输入,那么为什么不在RBIF启动时读取其中的一个呢?
if (PORTBbits.RB5 == 1)
LATDbits.LATD1 ^= 1;如果您在端口中断更改功能方面有问题,只需在主循环代码中尝试下面的行来证明您的IO。
LATDbits.LATD1 = PORTBbits.RB5;如果您的硬件没有拔起或拉下,您应该使用INTCON2中的RBPU标志启用端口B上的弱拉。请注意,当您将引脚声明为输出时,这些选项将自动关闭。
https://stackoverflow.com/questions/5363053
复制相似问题