AVR单片机循环左移置位问题

[复制链接]
3932|6
 楼主| renhuan333 发表于 2011-6-25 09:27 | 显示全部楼层 |阅读模式
#include <mega16.h>
#include<delay.h>
unsigned char j;
void main(void)
{
PORTB=0xff;
DDRB=0xFF;
while(1)
      {
                PORTB=0x00;
      for(j=7;j>=0;j--)
                {
                PORTB|=(1<<j);
                delay_ms(300);
                 }
          };
}

为什么while(1)里这个for循环只循环一次就停止了呢?
而改成下边的形式就可以无限循环呢:
for(j=7;j>0;j--)
                {
                PORTB|=(1<<j);
                delay_ms(300);
                if(j==1)
                PORTB.0=1;
                }

主要是j>=0和j>0的原因,肯求解释!谢谢
NE5532 发表于 2011-6-25 12:00 | 显示全部楼层
unsigned char型,你用j>=0,可能出现j<0的情况么?你两个描述写翻了吧。
老鱼探戈 发表于 2011-6-25 13:23 | 显示全部楼层
LZ数据类型都没弄明白~
 楼主| renhuan333 发表于 2011-6-26 03:57 | 显示全部楼层
谢谢楼上回答,知道为什么错了!
bnyuli 发表于 2011-6-27 15:11 | 显示全部楼层
知道错误的时候就需要典当了
 楼主| renhuan333 发表于 2011-6-29 22:49 | 显示全部楼层
典当什么意思啊?
jamin.x 发表于 2011-9-27 19:30 | 显示全部楼层
我没有这样做过左移,PORTB=0X01<<b:b++;……,你的两个左移函数功能不一样啊,位数不一样吧?
您需要登录后才可以回帖 登录 | 注册

本版积分规则

0

主题

37

帖子

1

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