最根本的问题还是在于C的循环语句在keil中不同的编译处理。从keil的汇编处理来看,最终的选择仍然是 while 语句,包括 do...while,其实不建议使用 for 循环的主要原因还是多了个变量,导致需要反复操作寄存器、累加器。不过前者while并不适合循环体内包含其他语句,最佳的选择是后者: do...while
#include
例一:适用于最小的延迟,
void delayus(unsigned char us){
while(--us);
C:0x00CF DFFE DJNZ R7,delayus(C:00CF)
}
例二:在循环中加入 NOP 指令,获得稍长的延时。
void delayus(unsigned char us){
do{
_nop_();
C:0x00CF 00 NOP
}while(--us);
C:0x00D0 DFFD DJNZ R7,delayus(C:00CF)
}
基本就是这样,需要注意的就是循环次数的数据类型。尤其是较长的延迟。
没有评论:
发表评论