搜索
bottom↓
回复: 2

avr延时函数的问题

[复制链接]

出0入0汤圆

发表于 2013-5-20 21:44:54 | 显示全部楼层 |阅读模式
刚学avr,学习IO口的使用,想让LED闪烁,参考现有例程就写了个如下的延时函数,一下的函数是拿的现成的
void delay_ms(int time)
{
int i;
for(;time>0;time--)
  for(i=0;i<1000;i++);
}
设置LED延时时间为1s,却发现LED不闪烁,后来搜索avr的延时函数看到了如下的写法,拈来试了下,LED闪了,我用的IAR是6202版本,刚从官网下的,我想问第一个延时函数是不是被编译器优化了,为什么没有起作用呢?又该如何设置呢?貌似在avr studio中单步调试类似DDRA=0xff;PORTA=0xff;delay_(1000)//2;PORTA=0x00;delay_(1000);的语句,调试注释有2的语句时就执行不下去了,不知道是怎么回事?望有经历的解答一下,谢谢啦

后来可以使用的粘来的延时函数如下:
//delay.h
#ifndef __IAR_DELAY_H
#define __IAR_DELAY_H

#include <intrinsics.h>

#define XTAL 8 //可定义为你所用的晶振频率(单位Mhz)

#define delay_us(x) __delay_cycles ( (unsigned long)(x * XTAL) )
#define delay_ms(x) __delay_cycles ( (unsigned long)(x * XTAL*1000) )
#define delay_s(x) __delay_cycles ( (unsigned long)(x * XTAL*1000000) )

#endif

阿莫论坛20周年了!感谢大家的支持与爱护!!

知道什么是神吗?其实神本来也是人,只不过神做了人做不到的事情 所以才成了神。 (头文字D, 杜汶泽)

出0入0汤圆

发表于 2013-5-23 21:28:15 | 显示全部楼层
被编译器优化了,我用AVR有很多类似的经历。

出0入0汤圆

 楼主| 发表于 2013-5-24 00:10:37 | 显示全部楼层
zengzhx 发表于 2013-5-23 21:28
被编译器优化了,我用AVR有很多类似的经历。

嗯,的确是的
回帖提示: 反政府言论将被立即封锁ID 在按“提交”前,请自问一下:我这样表达会给举报吗,会给自己惹麻烦吗? 另外:尽量不要使用Mark、顶等没有意义的回复。不得大量使用大字体和彩色字。【本论坛不允许直接上传手机拍摄图片,浪费大家下载带宽和论坛服务器空间,请压缩后(图片小于1兆)才上传。压缩方法可以在微信里面发给自己(不要勾选“原图),然后下载,就能得到压缩后的图片。注意:要连续压缩2次才能满足要求!!】。另外,手机版只能上传图片,要上传附件需要切换到电脑版(不需要使用电脑,手机上切换到电脑版就行,页面底部)。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

手机版|Archiver|amobbs.com 阿莫电子技术论坛 ( 粤ICP备2022115958号, 版权所有:东莞阿莫电子贸易商行 创办于2004年 (公安交互式论坛备案:44190002001997 ) )

GMT+8, 2024-7-24 01:32

© Since 2004 www.amobbs.com, 原www.ourdev.cn, 原www.ouravr.com

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