一乐电子

 找回密码
 请使用微信账号登录和注册会员

QQ登录

只需一步,快速开始

微信扫码登录

搜索
楼主: lingshuai2010

[avr] 新手玩AVR单片机求指教 低级LED闪烁问题

[复制链接]
 楼主| 发表于 2013-8-14 21:09 | 显示全部楼层
sdwy 发表于 2013-8-14 21:03
看下你的编译器int字长是几位的,如果是8位,for(I = 0; I < 10000; I++)是个死循环,改成unsigned long类 ...

有没有例子··麻烦发个过来我试试看·

回复

使用道具 举报

发表于 2013-8-14 21:09 | 显示全部楼层
/*******************************************
函数名称: Delayus
功    能: 延时指定微秒(8M晶振)
参    数: US--延时的微秒数(大约,不是很精确,US越大越准确)
返回值  : 无
/********************************************/
void Delayus(uint US)                  
{
uint i;
US=US*5/4;                           //5/4是在8MHz晶振下,通过软件仿真反复实验得到的数值
for( i=0;i<US;i++);
}
/*******************************************
函数名称: Delayms
功    能: 延时指定毫秒(8M晶振)
参    数: MS--延时的毫秒数
返回值  : 无
/********************************************/
void Delayms(uint MS)                  
{
uint i,j;
for( i=0;i<MS;i++)
for(j=0;j<1141;j++);        //1141是在8MHz晶振下,通过软件仿真反复实验得到的数值
}


直接拉去用吧,8M晶振,示波器亲自测试没问题!~
回复

使用道具 举报

发表于 2013-8-14 21:16 | 显示全部楼层
sdwy 发表于 2013-8-14 21:03
看下你的编译器int字长是几位的,如果是8位,for(I = 0; I < 10000; I++)是个死循环,改成unsigned long类 ...

把你的数据类型unsigned int 改成unsigned long就行了
回复

使用道具 举报

发表于 2013-8-15 08:34 | 显示全部楼层
把代码优化级别关掉吧,-0S最高级别了,之前我玩的时候也是无论如何都调不出效果,把代码优化级别选为-00或者-02就行了! good luck!
回复

使用道具 举报

发表于 2013-8-18 21:46 | 显示全部楼层
1、本人也遇到楼主一模一样的问题,差点放弃avr,一个流水灯,太打击积极性了;

2、编译器认为你写的延时函数无用(没有实质的操作),自动帮你优化了;

3、关闭代码优化(楼上说的很对),或者用winavr自带的延时库函数;

4、后来你会发现   volatile;恭喜你,等学到中断的时候就……;

5、最终你发现delay确实是一个分水岭……

回复

使用道具 举报

 楼主| 发表于 2013-8-19 23:25 | 显示全部楼层
一个LED就搞得我没激情了··
回复

使用道具 举报

发表于 2014-2-25 15:54 | 显示全部楼层
一定是你的延时函数里的变量被优化掉了,定义这个变量的时候要加volatile,这样,你的变量才不会被优化掉
回复

使用道具 举报

发表于 2014-6-12 10:24 | 显示全部楼层
尽量使用现有的资源,
那么多的库函数用,
可以事半功倍的。
回复

使用道具 举报

本版积分规则

QQ|一淘宝店|手机版|商店|一乐电子 ( 粤ICP备09076165号 ) 公安备案粤公网安备 44522102000183号

GMT+8, 2025-8-19 00:05 , Processed in 0.035825 second(s), 24 queries , Gzip On.

Powered by Discuz! X3.5

© 2001-2025 Discuz! Team.

快速回复 返回顶部 返回列表