我正在使用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还是我正在检查按钮是否按错了。
感谢任何帮助。感谢。
答案 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;