我正在使用 Hi-Tech C 编译器对 PIC16F876 进行编程。我正处于必须使用延迟的地步,每次程序运行的持续时间都不同。
我想要这个功能
__delay_us()
然而,
该功能只接受,如手册所述;“字面常量”参数。我曾认为,在计算延迟的持续时间 => 持续时间后,我可以使用:
__delay_us(D);
只要 D 是这样分配的:
#define D duration //where duration is an unsigned long
但是,方法不起作用。似乎每当我使用#define 时,如果我分配的值是变量,编译器会抛出错误?(我没想到会这样,我原以为变量的当前值会在赋值时变成常量..)
如果我分配一个实际数字,例如:
#define D 20
这很好用,但我希望能够改变 D 的值。
我可以猜到为什么这不起作用:Hi-tech C 编译器无法为延迟生成汇编代码,除非它确切知道它是什么(在编译器时)。
我不能使用具有例如 1us 延迟的循环,因为单步执行循环所需的时间会改变延迟(我需要它非常准确)。
我唯一的选择是编写一个汇编函数并将持续时间的值传递给它吗?