打印
[AVR单片机]

有关AVR端口读取问题

[复制链接]
1427|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 很给力!
5
qin552011373| | 2013-5-20 20:30 | 只看该作者
是你的if的错误  不是K值没法读

使用特权

评论回复
6
dirtwillfly| | 2013-5-20 21:36 | 只看该作者
:lol4

使用特权

评论回复
7
aifei7320| | 2013-5-22 15:43 | 只看该作者
顶4楼。你要先算好PD3到底应该是左移了几位,0到3是4位,所以不可能出现if(K==0x04)这种情况。另外你要明确是读那个端口的数据,你明明把D口设置为输入,为什么你又弄出来一个K=PINA&(1<<PD3)

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

3

主题

30

帖子

0

粉丝