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