如何在C中将端口设置为按钮的输入?

时间:2012-08-21 02:53:20

标签: c input embedded microcontroller pic

我正在使用MikroC来尝试编程我的PIC16f62微控制器。我设法让我的输出工作(我可以启用LED等)但我似乎无法使输入工作。

这是我目前的代码:

void main() {
    TRISB.RB0 = 0; //set Port RB0 as output
    PORTB.RB0 = 1; //set Port RB0 to high (turn on LED)
    TRISA = 1; //Set PORTA as inputs 

    for(;;){  //endless loop
            if(PORTA.RA0 == 1){  //if push button is pressed
                         PORTB.RB0 = !PORTB.RB0;  \\toggle LED
            }
    }
}

我不知道问题是我是不是正确配置PORT还是我正在检查按钮是否按错了。

感谢任何帮助。感谢。

2 个答案:

答案 0 :(得分:7)

此更改可能会对您有所帮助。

for(;;){  //endless loop
        if(PORTA.RA0 == 1){  //if push button is pressed
                     PORTB.RB0 = !PORTB.RB0;  \\toggle LED
          while(PORTA.RA0 == 1);
       /*wait till button released as press of a buttons take time  and processor is too fast */
        }

答案 1 :(得分:2)

您可能正确读取端口引脚,但是因为您在检测到按下时打开和关闭LED,您的眼睛无法看到结果。

例如,1Mhz的时钟速率将具有大约每秒150,000次的开/关切换(每个循环1,000,000个循环/ ~3个ASM指令/ 2个循环以打开然后关闭)。

我建议采用让LED匹配输入引脚状态的方法。

for(;;)
{
  if(PORTA.RA0 == 1) //if button is pressed
  {
    PORTB.RB0 = 1;   //turn on LED
  }
  else
  {
    PORTB.RB0 = 0;   //turn off LED
  }
}

这种技术类似于Rajesh的建议,但对输入引脚是否设置提供了更直接的反馈。

如果这不起作用,那么设置TRISA的内容就不正确了。你可能想试试这个:

TRISA.RB0 = 1;