【问题标题】:How to set Port as Input for Push Button in C?如何将端口设置为C中按钮的输入?
【发布时间】:2012-08-21 02:53:19
【问题描述】:

我正在使用 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 还是我正在检查按钮是否按下不正确。

感谢任何帮助。谢谢。

【问题讨论】:

  • 您是否将示波器连接到 RA0 和 RB0 - 按住按钮会显示什么?
  • 我在这篇文章中添加了嵌入式标签。将其包含在有关微控制器的任何问题中,您将有更高的机会让合适的人阅读和回答。

标签: c input embedded microcontroller pic


【解决方案1】:

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

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 */
        }

【讨论】:

    【解决方案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;
    

    【讨论】:

      猜你喜欢
      • 2017-02-20
      • 1970-01-01
      • 2017-04-27
      • 1970-01-01
      • 1970-01-01
      • 2010-11-02
      • 1970-01-01
      • 1970-01-01
      • 2021-06-17
      相关资源
      最近更新 更多