在嵌入式体系中,延时是常常需求运用的一种手法,延时的办法能够通过运用类似于"NOP"的指令来完成,可是假如延时的时刻比较长,假如运用太多的"NOP" 指令则会耗费过多的贮存空间,最好的办法是运用子程序(汇编言语中)或子函数(高档言语中)。当然这儿并不计划评论假如运用定时器中止来完成延时。下面就在C言语中运用子函数完成延时的几个问题做些评论,当然评论高档言语的延时就需求考虑编译器和处理器,这儿为了评论的便利,并且不失一般性,能够用规范51单片机作处理器和uVision2作为编译环境,晶振为12MHz,这样一个规范的机器周期即为1uS。其他的状况则能够据此类推。
先看一段延时程序:其间Delay1()与Delay2()两者的型参类型不同。
将上述的Delay1(100)(变量为unsigned int 类型)或Delay2(100)(变量为unsigned char 类型)分别在两次过程中履行,便会得到了下述的履行成果:
断点B减去断点A的时刻为810uS,这个时刻即为履行Delay1(100)所花费的时刻;
断点B减去断点A的时刻为608uS,这个时刻即为履行Delay2(100)所花费的时刻;
由此可见,作为unsigned int 变量类型来传递延时函数的参数,会增加延时的时刻,而运用unsigned char 变量类型则会得到短的延时时刻。咱们都知道C言语通过编译后是要转化成汇编言语的,只要汇编句子才有准确的履行时刻,所以要知道这两者成果的不同,原因就在于他们通过编译之后汇编句子的不同的当地。