在单片机开发中,延时是时常出现,初学时总不知所以,现总结一下:
首先要了解以下概念(假设开发板上晶振频率为 12MHZ,CPU STC89C52 ):
- 1个时钟周期=振荡周期=(1/12MHZ) s
- 1个机器周期=12x时钟周期=1 us ( 注:有些CPU不是12倍的)
- 指令周期
NOP : 1 个机器周期 (空指令)
DJNZ : 2 个机器周期 (循环等)
LCAL : 4 个机器周期(过程调用)
MOV : 1 个机器周期(赋值语句)
所以在Turbo51 中,若要延时 1 us ,可以用如下代码:
Asm
NOP;
end;
下面的代码究竟延时了几个 us
Program Test11;
procedure Delayus(atime:word);
begin
repeat
ASM NOP END;
dec(atime);
until atime=0;
end