单片机C语言延时的方法。最好能够详细说明原理

来源:百度知道 编辑:UC知道 时间:2024/05/22 18:05:39
主要是原理!网络上有许多这样的例子。但是都没有说明原理,我想知道它的原理以便自己好编写。并想知道它是否也是按照机器周期计算的,请高手指点下。
谢谢!

如果用C51来编写延时程序,一般都用循环语句:
例:
void delay(unsigned int num)
{
unsigned int i;

for (i=0; i<num; i++)
{
; // 程序什么都不做
}
}

原理很简单,程序什么都不做,只是不段的比较,直到比较完,这样就起到延时的作用了。至于它延时了多少时间,则需要编译后,看实际的反汇编程序。
2: {
3: unsigned int i;
4:
5: for (i=0; i<num; i++)
C:0x0000 E4 CLR A
C:0x0001 FD MOV R5,A
C:0x0002 FC MOV R4,A
C:0x0003 C3 CLR C
C:0x0004 ED MOV A,R5
C:0x0005 9F SUBB A,R7
C:0x0006 EC MOV A,R4
C:0x0007 9E SUBB A,R6
C:0x0008 5007 JNC C:0011
6: {
7: ; // 程序什么都不做
8: }
C:0x000A 0D INC R5
C:0x000B BD0001 CJNE R5,#0x00,C:000F
C:0x000E 0C INC R4
C:0x000F 80