C8051F单片机C程序精确延时的方法*■闽江学院薛小铃刘志群贾俊荣关键词C8051F单片机C循环语句精确延时引言单片机延时一般有定时器延时和程序延时两种方法。当CPU运行延时程序而无需做其他工作时,为了节省单片机定时器的硬件资源,降低结构编程的难度。往往采用程序延时的方法实觋延时。采用C语言编写延时程序时,关键是循环语句的使用。如果使用不当,延时时间的精度就不好控制,需要通过程序的反复调试进行算法补偿,给使用者带来诸多小便。C8051F单片机是完全集成的混合信号系统级芯片(S0c),其MCU系统控制器的内核是CIP一51微控制器。CIP一51的指令集与标准8051指令集完全兼容。CIP一51采用流水线指令结构,指令时序与标准805l不同:70%指令的执行时间为l或2个系统时钟周期;所有指令时序都以时钟周期计算;大多数指令执行所需的时钟周期数与指令的字节数一致;条件转移指令在不发生转移时和发生转移时的时钟周期数不同。同标准8051相比,C8051F单片机实现程序延时的方法更复杂些。在充分考虑Keil软件编译循环语句特点和C8051F单片机指令时序特点的基础上,利用Keil软件仿真调试的技巧。可以编出灵活、方便、精度高的延时程序。下面以C8051F020单片机为调试器件,说明C8051F单片机C程序精确延肘的方法。C语言3种循环语句的编译特点下面是C语言3种单层循环语句的程序代码;voidSingleCircle(unsignedchart){unsignedcharX=t,Y5t基金项目:福建省教育厅科技硬目(jB07277)。do(}while(一一t);while(x一一);for(;y--一;);,得到的汇编代码如下:C:0x0080AE07C:ox0082AD07C:0x0084DFFEC:0x0086AF06C:0x00881EC:0x0089EFC:0x00BA70FAC:0x00BCAF05C:0xOOBE1DC:0x00BFEFC:0xOOCO70FAC:0x00C222MOVR6,0x07M(】,C:00134M()VR7,:0086MOVR7,Ox05DECR5M():。其中,do—while循环语句编译的汇编代码最简单,while和{or循环语句编译效率一样。再看双层循王f=语句的程序代码:voidDoubleCircle(unsignedchart,{unsignedcharx,i=t,j—t;do{×一2:do(77万方数据)while(一一x)‘)while(一一t);while(i--一){x一2;while(x一一)1for(;卜一一;){for(x=2;x一一;),,得到的汇编代码如下:C:0x0054AD07MOVR5,0x07C:0x0056AE07MOVR6,0x07C:0x00587C02MOVR4,#0x02C:0x005ADCFEDJNZR4,C;005AC:0x005CDFFADJNZR7,C:0058C:0x005EAF05MOVR7,0x05C:0x00
【电信技术】C8051F单片机C程序精确延时的方法 来自淘豆网www.taodocs.com转载请标明出处.