AVR PINX读引脚错误
我用的是mega48单片机,编译环境ICCAVR。有如下语句:
#define KEY_S1_DDR DDRD
#define KEY_S1_PORT PORTD
#define KEY_S1_BIT PD0
#define KEY_S1_PIN PIND
//S1端口带上拉输入
KEY_S1_DDR&=~BIT(KEY_S1_BIT); KEY_S1_PORT|=BIT(KEY_S1_BIT);
这句话本意很简单,就是设置PD0为带上拉输入来检测按键的低电平触发。但是一直没有效果,
然后用AVR stdio仿真发现居然PIND.0居然一直都是0,按理说经过初始化后如果按键没有按下,PIND.0读出来应该是“1”的吧?
如下图所示:
从图中也可以看出,DDRD.0=0;PORTD.0=1; 也就是设置为了带上拉输入了吧?但是为什么PIND.0为“0”呢?麻烦解释一下 会不会是我理解错误呢? 把其他程序都屏蔽了,还是一样的效果 Pinx is input
DDRx set port direction
PORTx is output easier 发表于 2013-2-2 23:34 static/image/common/back.gif
DDRx set port direction
PORTx is output
不怎么明白你这样说的目的是什么。 if(KEY_S1_PIN&BIT(KEY_S1_PIN))
{
}
else
return KEY_VALUE_S1;
换为这个语句就没有问题了,不得不怀疑是编译器优化的问题
页:
[1]