AVR,CodeBlocks和Proteus中的CPU频率

时间:2012-06-04 18:32:29

标签: codeblocks avr atmega

好吧,我使用Code :: Blocks作为IDE,使用Win AVR作为编译器。 F_CPU被选为8000000UL。 我正在为Atmega32编写代码。 但是当我在Proteus设计套件(ISIS)中运行我的书面代码(* .hex文件)时, _delay_ms(1000)不会延迟1秒。我不知道它是写还是错,我在编辑组件中选择 CKSEL保险丝(0100)Int.RC 8MHz 。 怎么了? 请....

3 个答案:

答案 0 :(得分:2)

您是否尝试将编译器优化设置为-O0以外的其他值?来自avr-libc docs关于延迟 *函数。

  

为了使这些函数按预期工作,编译器   必须启用优化,延迟时间必须为a   表达式在编译时是一个已知的常量。

答案 1 :(得分:2)

使用PWM进行伺服控制我发现即使使用内部8Mhz的这个设置,Proteus实际上也是用1Mhz的时钟模拟的。如果您将F_CPU更改为1000000UL,您会发现延迟工作正常。

答案 2 :(得分:1)

它只是变形蛋白模拟滞后。在真实设备上,您的延迟功能将正常工作。为了模拟时间延迟,良好的选择是使用avr studio程序。