0

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

4

3 回答 3

2

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

于 2014-05-07T03:44:33.360 回答
2

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

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

于 2012-06-11T15:49:31.127 回答
1

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

于 2012-08-16T14:08:21.107 回答