当前位置: 代码迷 >> 单片机 >> 这几个延时函数如何都不起作用呢?小弟我用atmega8a!求大侠们指点!
  详细解决方案

这几个延时函数如何都不起作用呢?小弟我用atmega8a!求大侠们指点!

热度:116   发布时间:2016-04-28 15:11:55.0
这几个延时函数怎么都不起作用呢?我用atmega8a!!求大侠们指点!!
用示波器看输出的波形没有变化!!

------解决方案--------------------
从编译器优化执行代码的角度出发,延时程序的执行过程是无用的,所以可能会自作聪明地将其优化掉,这样就没有延时了;

你可以检查一下,编译时所执行的make命令,就是gcc命令行上的附加开关,是否有 -O, -O1, -O2, -O3等, 数字越高,优化的级别越强,将优化开关去掉,再看看延时是否就有效果了.
------解决方案--------------------
引用:
我用的atmel studio ,如何更改这些编译命令呢


看情况,确实很有可能是被编译器优化掉了,之前在CCS上遇到过。

没怎么用过atmel studio,估计在编译器的相关设置和选项里可以修改,自己试试吧。
------解决方案--------------------
仔细看看你的延时函数,可能起不到明显的延时作用,延时单位在指令周期级别;delay那个函数看起来有点怪怪的
------解决方案--------------------
void port_init(void)
{
PORTB = 0x00;
DDRB  = 0x00;
PORTC = 0x00; //m103 output only
DDRC  = 0x00;
PORTD = 0x00;
DDRD  = 0x00;
}
不是没有延时,是你的IO配置错了,你配置成输入方式了。  你怎么能软件对IO数据操作呢?
  相关解决方案