《单片机C语言(for)延时计算》由会员分享,可在线阅读,更多相关《单片机C语言(for)延时计算(3页珍藏版)》请在金锄头文库上搜索。
1、类型具有比12MHz 的单C 程序中可使用不同类型的变量来进行延时设计。经实验测试,使用 unsigned char unsigned int 更优化的代码,在使用时应该使用 unsigned char 作为延时变量。 以某晶振为 片机为例,晶振为 12MHz 即一个机器周期为 1us 。一. 500ms 延时子程序程序 :void delay500ms(void)unsigned char i,j,k;for(i=15;i0;i-)for(j=202;j0;j-)for(k=81;k0;k-);计算分析 :程序共有三层循环一层循环 n:R5*2 = 81*2 = 162us二层循环 m:R6
2、*(n+3) = 202*165 = 33330us三层循环 : R7*(m+3) = 15*33333 = 499995usDJNZ 2usDJNZ2us + R5赋值1us = 3usDJNZ2us + R6赋值1us = 3us循环外 : 5us子程序调用 2us + 子程序返回2us + R7 赋值 1us= 5us延时总时间 = 三层循环 + 循环外 = 499995+5 = 500000us =500ms 计算公式 :延时时间 =(2*R5+3)*R6+3*R7+5二. 200ms 延时子程序程序:void delay200ms(void)unsigned char i,j,k;f
3、or(i=5;i0;i-) for(j=132;j0;j-) for(k=150;k0;k-);三. 10ms 延时子程序 程序:void delay10ms(void)unsigned char i,j,k; for(i=5;i0;i-) for(j=4;j0;j-) for(k=248;k0;k-);四. 1s 延时子程序 程序: void delay1s(void) unsigned char h,i,j,k;for(h=5;h0;h-) for(i=4;i0;i-) for(j=116;j0;j-) for(k=214;k0;k-);关于单片机 C 语言的精确延时,网上很多都是大约给出
4、延时值没有准确那值是多少,也就没有达到精确高的要求, 而本函数克服了以上缺点, 能够精确计数出要延时值且精确达到 1us, 本举例所用 CPU 为 STC12C5412 系列 12 倍速的单片机 ,只要修改一下参数值其它系例单片 机也通用 ,适用范围宽。共有三条延时函数说明如下:函数调用分两级:一级是小于10US的延时,二级是大于 10US的延时/=小于 10US 的【用 1US 级延时】/ 微秒级延时 for(i=X;iX;i-)延时时间 =(3+5*X)/12提示 (单位 us, X 不能大于 255)11= 大于 10US0;MS-)for(i=26;i0;i-);i=(延时值-1.75)*12/Ms-15/4 如想延时60US贝U i=(60-1.75)*12/6- 15/4=25.37526修改i的值=26,再调用上面的 【10US级延时函数】 Delay10us(6); 则就精确延时 60US;如果想延时 64US 可以用这二种函数组合来用 : Delay10us(6); for(i=9;iX;i-)共延时 64US