[AVR单片机] 发光二极管不闪动什么问题

[复制链接]
5261|20
 楼主| qfengbj 发表于 2010-5-14 22:37 | 显示全部楼层 |阅读模式
#include<avr/io.h>
#define uint unsigned int
int main(void)
{
   uint i,j;
   DDRB=0xff;
   while(1)
   {
       PORTB=0b01010101;
       for(i=0;i<=1000;i++)
       {
       for(j=0;j<=8000;j++);
       }
       PORTB=0b10101010;
       for(i=0;i<=1000;i++)
       {
       for(j=0;j<=8000;j++);
      }
   }
}


能编译过去,但是8个灯全亮 不闪烁怎么回事啊 ?
xiaomifan 发表于 2010-5-14 23:19 | 显示全部楼层
延时会被优化
woshixinshou 发表于 2010-5-16 12:23 | 显示全部楼层
volatile uint i,j;
yidou 发表于 2010-5-16 22:09 | 显示全部楼层
volatile uint i,j;
什么作用?
 楼主| qfengbj 发表于 2010-5-17 11:45 | 显示全部楼层
volatile是变量修饰符,在这里什么用法?
 楼主| qfengbj 发表于 2010-5-17 11:50 | 显示全部楼层
找到一种解释啦,声明为 volatile 的字段不受编译器优化(假定由单个线程访问)的限制。
但是volatile 修饰符通常用于由多个线程访问,这里不是只有这么一段小程序呀?:o
liao_fangxing 发表于 2010-5-19 16:52 | 显示全部楼层
本帖最后由 liao_fangxing 于 2010-5-19 16:54 编辑

主时钟跑多快??  会不会是主时钟太高导致延时太短,闪了也看不见啊;P  毕竟你的程序太短了 跑个来回很快
chuxh 发表于 2010-5-19 21:49 | 显示全部楼层
很有可能
ershisi 发表于 2010-5-19 23:00 | 显示全部楼层
for(i=0;i<=1000;i++)
       {
       for(j=0;j<=8000;j++);
       }
延时并不短啊
xiaohuai 发表于 2010-5-20 22:18 | 显示全部楼层
我也觉得不是延时的问题啊
SHSLZHZ 发表于 2010-5-21 09:43 | 显示全部楼层
1# qfengbj
看你的程序根本没问题,即使时间长也不会出现灯全亮的情况,很可能是编译的问题!!!!!
chenczy 发表于 2010-5-21 12:26 | 显示全部楼层
你用的是C++还是C,C的话好像没有INT MAIN(VOID)这样的吧,C++就不知道了
Karlshen 发表于 2010-5-21 22:44 | 显示全部楼层
不是程序问题
strang 发表于 2010-5-26 21:07 | 显示全部楼层
本帖最后由 strang 于 2010-5-26 21:10 编辑

#include<avr/io.h>
#define uint unsigned int
//===========================
void delayms(uint x)
{
uint y;
  while(x--)
  for(y=0;y>120;y++);

}
//========================
int main(void)
{
   uint i,j;
   DDRB=0xff;
   while(1)
   {
       PORTB=0x55;
       delayms(6000);
       PORTB=0xaa;
       delayms(6000);
   }
}
epsmc 发表于 2010-5-27 11:37 | 显示全部楼层
程序没有问题,确认程序写到单片机flash中?什么型号?PORTB是否有特殊功能?
lovetan 发表于 2010-5-27 15:28 | 显示全部楼层
for循环还没有问题啊。大大的问题
lovetan 发表于 2010-5-27 15:32 | 显示全部楼层
顶14楼
lovetan 发表于 2010-5-27 15:37 | 显示全部楼层
#include<avr/io.h>
#define uint unsigned int
void delay (uint z)
{
        uint a, b;
        for(a=100;a>0;a--)
        for(b=z;b>0;b--);
}
int main(void)
{
   uint i,j;
   DDRB=0xff;
   while(1)
   {
       PORTB=0b01010101;
       delay (2000);
       PORTB=0b10101010;
      delay (2000);
   }
}
ershisi 发表于 2010-5-27 21:40 | 显示全部楼层
strang写的for循环有问题,连我都看出来了
strang 发表于 2010-6-17 18:31 | 显示全部楼层
哦?打错了。不好意思,是这样的。

for(y=0;y<120;y++);
您需要登录后才可以回帖 登录 | 注册

本版积分规则

0

主题

158

帖子

1

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