weixiao8776 发表于 2012-7-29 13:06:26

为什么我不能对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;}
}
}
}

holyfire 发表于 2012-7-29 15:54:03

AVR端口貌似不能和51一样的位操作的

easier 发表于 2012-7-29 19:45:48

IF U USE IAR

PIND_Bit0

weixiao8776 发表于 2012-7-30 22:06:17

easier 发表于 2012-7-29 19:45 static/image/common/back.gif
IF U USE IAR

PIND_Bit0

不懂这是什么意思?能说明白些吗?谢谢!

easier 发表于 2012-7-31 09:22:27

若你使用 IAR 編程

可以

if (PIND_Bit0 ==0)
{
...
}

guxingganyue 发表于 2012-7-31 10:02:16

if(PIND0==0)
有问题,看你使用的那个编译器而定了。AVR本身不支持位操作的

weixiao8776 发表于 2012-7-31 21:23:00

easier 发表于 2012-7-31 09:22 static/image/common/back.gif
若你使用 IAR 編程

可以


我使用的是ICC AVR ,这个编译器该怎么样编写呢?

356053261 发表于 2012-7-31 23:13:54

if(PIND&0X01==0)

356053261 发表于 2012-7-31 23:15:06

或者if(PIND&BIT(0)==0)

badrobot 发表于 2012-8-31 23:15:15

这样行吗if(!(PIND&BIT(0)))

sco518 发表于 2012-9-1 08:06:12

badrobot 发表于 2012-8-31 23:15 static/image/common/back.gif
这样行吗if(!(PIND&BIT(0)))

可以的。

tanguicaicai 发表于 2012-9-1 09:54:23

if(PIND0==0)
不行if(!(PIN&(1<<0)))winavr

5612404 发表于 2012-9-1 10:19:24

你看一下头文件是怎么定义的
页: [1]
查看完整版本: 为什么我不能对IO口进行位操作?