打印
[AVR单片机]

刚接触AVR,请AVR高手帮忙分析,谢谢

[复制链接]
1814|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 | 只看该作者

0XF?

使用特权

评论回复
5
fzj| | 2007-10-24 08:12 | 只看该作者

谢谢ayb_ice和NE5532 问题找到了.

原因就是这条左移指令,AYB_ICE说的对,因为AVR的上拉使能是通过数据寄存器置1来实现的,考虑了低位却没把高位考虑进去,谢谢.

使用特权

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

本版积分规则

FZJ

32

主题

184

帖子

3

粉丝