首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >图- RB7有值吗?

图- RB7有值吗?
EN

Stack Overflow用户
提问于 2011-03-19 15:39:04
回答 2查看 1.2K关注 0票数 0

我读取了端口RB7,并在if中检查了值。如果RB7上有输出,我希望我的芯片上的led点亮(led D1),但是即使没有连接到RB7,它也一直在燃烧。我做错什么了?这是PIC18F4550,它是用mplabv8.63和C18编译器编写的。

代码语言:javascript
复制
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; 
}
EN

回答 2

Stack Overflow用户

发布于 2011-03-19 15:56:11

有三件事:

  1. 输入总是高的还是低的,不管你是否有任何连接到它们的东西。您是否有适当的上拔或拉下电路?
  2. ,您可能需要取消该输入,以防止单个输入触发多个状态变化。
  3. 看起来不像在启动时设置了输出D1。我不认为它默认为任何特定的状态。
票数 2
EN

Stack Overflow用户

发布于 2011-03-21 13:28:46

您正在读取在B7上的输出值,这没有多大意义。B7是明确的(低),除非您在代码中设置它,所以B7不会发生任何更改。在任何情况下,对B7输出锁存的更改都不会触发RBIF。

当任何RB7到RB4更改状态时,都会设置RBIF。您已经将RB5和RB4声明为输入,那么为什么不在RBIF启动时读取其中的一个呢?

代码语言:javascript
复制
if (PORTBbits.RB5 == 1)
   LATDbits.LATD1 ^= 1;

如果您在端口中断更改功能方面有问题,只需在主循环代码中尝试下面的行来证明您的IO。

代码语言:javascript
复制
  LATDbits.LATD1 = PORTBbits.RB5;

如果您的硬件没有拔起或拉下,您应该使用INTCON2中的RBPU标志启用端口B上的弱拉。请注意,当您将引脚声明为输出时,这些选项将自动关闭。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/5363053

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档