我想对一个ATtiny85微控制器进行编程,并且已经意识到我的程序需要一些延迟才能正常工作。我正在使用MPLabX和XC8编译器。因此,我应该能够使用__delay_ms()宏,并且MPLab会识别该宏,并且不会将红线放在代码下。但是,当我尝试编译程序时,使用宏的每一行都会引发错误。 “对__delay_ms的未定义引用”,以及使用该宏的第一行的其他“隐式声明__delay_ms”。我确实正确定义了_XTAL_FREQ并包含了xc.h。
即使没有延迟宏,代码也可以正常编译,但是不能正常工作,所以我需要延迟。
我不知道问题是什么。我之前使用__delay_ms宏对其他微控制器进行了编程。我也在使用最新版本的XC8编译器。并且根据编译器的文档,该版本与ATtiny85完全兼容。
我也试图在Internet上找到解决方案,但没有找到任何解决我问题的方法...
有什么想法可以解决问题吗?
答案 0 :(得分:1)
因此,我在xc8的包含目录中进行了更多挖掘,发现了一些东西。 如果包含util / delay.h,则可以使用这些函数,但只能使用一个下划线而不是两个下划线。因此命令必须是_delay_ms()。然后,我可以编译代码,但是它缺少F_CPU的定义。但是,这只会导致警告而不是错误。我将尝试找出F_CPU的定义位置。我猜它是相对于_XTAL_FREQ定义的...
我会及时通知您。
答案 1 :(得分:0)
也许这应该是一条评论,但是我想给你一个例子,它对我来说很好:
这是PIC的工作方式
编译器:xc8 2.0
#include <xc.h>
#define _XTAL_FREQ 4000000
void main (void)
{
while(1)
{
__delay_ms(1);
}
}
对于AVR,它有点不同:(那太疯狂了!)
#define F_CPU 4000000UL
#include <xc.h>
#include <avr/delay.h>
int main(void)
{
while (1)
{
_delay_ms(1);
}
}