为什么我不能对IO口进行位操作?
本帖最后由 weixiao8776 于 2012-7-29 13:08 编辑各位大侠帮忙看一下这个程序,为何我无法对单片机的IO口进行单独的位操作。即使按键没有按下,也就是PIND0为高电平的状态下,程序依然进入到了if里面去执行语句。按正常情况的话,它是不应该执行if里面的语句的。这是怎么回事?程序和仿真图片如下:
#include<stdio.h>
#include<iom128v.h>
void delayns(void)
{
unsigned int i;
for(i=0;i<50;i++);
}
void main(void)
{
DDRD=0X00;
DDRA=0XFF;
DDRE=0X04;
PORTD=0XFF;
PORTA=0XFF;
PORTE=0X04;
while(1)
{
if(PIND0==0)
{
delayns();
if(PIND0==0)
{PORTA=0XFE;}
}
}
}
AVR端口貌似不能和51一样的位操作的 IF U USE IAR
PIND_Bit0 easier 发表于 2012-7-29 19:45 static/image/common/back.gif
IF U USE IAR
PIND_Bit0
不懂这是什么意思?能说明白些吗?谢谢! 若你使用 IAR 編程
可以
if (PIND_Bit0 ==0)
{
...
}
if(PIND0==0)
有问题,看你使用的那个编译器而定了。AVR本身不支持位操作的 easier 发表于 2012-7-31 09:22 static/image/common/back.gif
若你使用 IAR 編程
可以
我使用的是ICC AVR ,这个编译器该怎么样编写呢? if(PIND&0X01==0) 或者if(PIND&BIT(0)==0) 这样行吗if(!(PIND&BIT(0))) badrobot 发表于 2012-8-31 23:15 static/image/common/back.gif
这样行吗if(!(PIND&BIT(0)))
可以的。 if(PIND0==0)
不行if(!(PIN&(1<<0)))winavr 你看一下头文件是怎么定义的
页:
[1]