304301959 发表于 2013-2-2 22:59:16

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”呢?麻烦解释一下

304301959 发表于 2013-2-2 23:02:57

会不会是我理解错误呢?

304301959 发表于 2013-2-2 23:30:09

把其他程序都屏蔽了,还是一样的效果

easier 发表于 2013-2-2 23:32:50

Pinx is input

easier 发表于 2013-2-2 23:34:50

DDRx set port direction
PORTx is output

304301959 发表于 2013-2-2 23:42:57

easier 发表于 2013-2-2 23:34 static/image/common/back.gif
DDRx set port direction
PORTx is output

不怎么明白你这样说的目的是什么。

304301959 发表于 2013-2-3 00:13:26

if(KEY_S1_PIN&BIT(KEY_S1_PIN))
        {
       
        }
        else                                             
        return         KEY_VALUE_S1;
换为这个语句就没有问题了,不得不怀疑是编译器优化的问题
页: [1]
查看完整版本: AVR PINX读引脚错误