[AVR单片机] 刚接触AVR,请AVR高手帮忙分析,谢谢

[复制链接]
2650|4
 楼主| FZJ 发表于 2007-10-23 16:41 | 显示全部楼层 |阅读模式
AVR, ISP, LED, pi, se
/******************************************************************************/
void    led_disp   (void)
{   
     if   (++cnt>=200)
   {  cnt=0;
      if   ((PINB&0XF)==0)    PORTB=(PORTB|1);
      else if   ((PINB&0XF)==0X8)  PORTB=(PORTB&0XF0);
      else
      PORTB<<=1;
   } 
   
}
/******************************************************************************/
void    avr_init   (void)
{  WDTCR=0B00011001;
   TCCR0=0B00000010;
   DDRB=(0XF|(1<<PB6));
   MCUCR=0;
   PORTB|=((1<<PB7)|(1<<PB5)|(1<<PB4));
   WDR();
}
以上这两个子程序在主程序中调用时竟然把PB6输出高电平,可是程序中没操作PB6口啊,按道理讲应该是PB6口始终输出0,把PB6设为输入也同样使能了上拉,测试把LED—DISP全部屏蔽就好了,可我怎么也查不出问题出在哪里,请高手帮忙分析一下,谢谢了!
另外在MAIN 函数开头有一句:PORTB=0;
ayb_ice 发表于 2007-10-23 18:52 | 显示全部楼层

"PORTB<<=1;"...

fzj 发表于 2007-10-23 20:43 | 显示全部楼层

不是这个问题

左移我有限制, else if   ((PINB&0XF)==0X8)  PORTB=(PORTB&0XF0);
              else
              PORTB<<=1;
当PORTB到0X8的时候我就把它的低4位全部清O 
NE5532 发表于 2007-10-23 21:54 | 显示全部楼层
fzj 发表于 2007-10-24 08:12 | 显示全部楼层

谢谢ayb_ice和NE5532 问题找到了.

原因就是这条左移指令,AYB_ICE说的对,因为AVR的上拉使能是通过数据寄存器置1来实现的,考虑了低位却没把高位考虑进去,谢谢.
您需要登录后才可以回帖 登录 | 注册

本版积分规则

FZJ

35

主题

188

帖子

3

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