[AVR单片机] 有关AVR端口读取问题

[复制链接]
2238|6
 楼主| ZLW168504 发表于 2013-5-20 16:05 | 显示全部楼层 |阅读模式
首先设置PORTD=(0<<PD3)  //数据为0
        DDRD=(0<<DDD3)  //输入
        
//若干处理
unsigned char TM1623_Read_Data(void)
  {
    unsigned char i,K;
    unsigned char temp=0;
    for(i=0;i<8;i++)
       { .........
         temp>>=1;
         .........
         K=PINA&(1<<PD3)  //读取PD3端口  问题最新阿斯这里   、、、
         if(K==0x04)
            {
            temp|=0x80;//1
            }
        else
            {
            temp&=~0x80;//0
            }
        }
    return(temp);
    }
        K=PINA&(1<<PD3)  //读取PD3端口
       为什么K的值都不出来呢?
 楼主| ZLW168504 发表于 2013-5-20 16:06 | 显示全部楼层
K=PINA&(1<<PD3)  //读取PD3端口   这里不知道对不
fp123123 发表于 2013-5-20 16:45 | 显示全部楼层
当然不对啦,PD3要用PIND,不是PINA

K=PINA&(1<<PD3) 改成 K = (PIND&(1<<PD3)) 加个括号,避免编译器错误解释

else
{
  temp&=~0x80;//0
}

可以不要
airwill 发表于 2013-5-20 16:48 | 显示全部楼层
       K=PINA&(1<<PD3)  //读取PD3端口
这是可以的
       为什么K的值都不出来呢
因为这个操作后, K 要么是0, 要么是8. 怎么会有 4 的可能性?

评分

参与人数 1威望 +6 收起 理由
qin552011373 + 6 很给力!

查看全部评分

qin552011373 发表于 2013-5-20 20:30 | 显示全部楼层
是你的if的错误  不是K值没法读
dirtwillfly 发表于 2013-5-20 21:36 | 显示全部楼层
aifei7320 发表于 2013-5-22 15:43 | 显示全部楼层
顶4楼。你要先算好PD3到底应该是左移了几位,0到3是4位,所以不可能出现if(K==0x04)这种情况。另外你要明确是读那个端口的数据,你明明把D口设置为输入,为什么你又弄出来一个K=PINA&(1<<PD3)
您需要登录后才可以回帖 登录 | 注册

本版积分规则

3

主题

30

帖子

0

粉丝
快速回复 在线客服 返回列表 返回顶部