首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 嵌入开发 > 单片机 >

AVR单片机 ATmega16 读取IO口电位的奇葩有关问题

2013-04-26 
AVR单片机 ATmega16 读取IO口电位的奇葩问题?IO状态是这样的。DDRD0x00PORTD0x00程序是这样的:while(1)

AVR单片机 ATmega16 读取IO口电位的奇葩问题?
IO状态是这样的。
DDRD=0x00;
PORTD=0x00;

程序是这样的:
while(1)
    {
    if((PIND&BIT(4))==0x10)
    {    
         PORTB&=~BIT(0);            //输出一个低电平,点亮发光管。
     }
     else
     {
         PORTB&=~BIT(4);            //输出一个低电平,点亮发光管。
     }       
}
无论PD4是高还是低,为什么两个指示灯都是亮的呢?我用的开发板测试的。
使用仿真软件发现,即使是低电平程序莫名就跑到了 PORTB&=~BIT(0);这里。。按理说这里是高电平才会进入的,问题在哪里呢? 单片机 avr atmega16
[解决办法]
  PORTB&=~BIT(4);   这条语句仅仅能够使PB4=0,不能够使PB0=1;同理,PORTB&=~BIT(0);仅仅能够使PB0=0,不能够使PB4=1;
   所以,只要你改变过PD4的电平,输出过高和低两种电平后,两指示灯就都亮了,不会灭掉。 
[解决办法]
PB口要设置成输出态
[解决办法]
if((PIND&BIT(4))==0x10)

LZ首先要确认的是,你的这个条件,能在外部触发变化的时候,能正确的进入两个分支

然后,再谈你现在的LED的输出

LED的亮灭,这个和接法有一定关系,具体还要看你的接法


[解决办法]
LED的发光点亮、熄灭有一定的延时性,可在拉高拉低后适当加短延时时间
[解决办法]
楼主走一下单步运行,先看逻辑上能不能实现功能,再说其他。

热点排行