好吧,我使用Code :: Blocks作为IDE,使用Win AVR作为编译器。 F_CPU被选为8000000UL。 我正在为Atmega32编写代码。 但是当我在Proteus设计套件(ISIS)中运行我的书面代码(* .hex文件)时, _delay_ms(1000)不会延迟1秒。我不知道它是写还是错,我在编辑组件中选择 CKSEL保险丝为(0100)Int.RC 8MHz 。 怎么了? 请....
答案 0 :(得分:2)
您是否尝试将编译器优化设置为-O0以外的其他值?来自avr-libc docs关于延迟 *函数。
为了使这些函数按预期工作,编译器 必须启用优化,延迟时间必须为a 表达式在编译时是一个已知的常量。
答案 1 :(得分:2)
使用PWM进行伺服控制我发现即使使用内部8Mhz的这个设置,Proteus实际上也是用1Mhz的时钟模拟的。如果您将F_CPU
更改为1000000UL
,您会发现延迟工作正常。
答案 2 :(得分:1)
它只是变形蛋白模拟滞后。在真实设备上,您的延迟功能将正常工作。为了模拟时间延迟,良好的选择是使用avr studio程序。