《单片机C语言(for)延时计算.docx》由会员分享,可在线阅读,更多相关《单片机C语言(for)延时计算.docx(4页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、C程序中可使用不同类型变量来进行延时设计。经实验测试,使用unsigned char类型具有比unsigned int更优化代码,在使用时应该使用unsigned char作为延时变量。 以某晶振为12MHz单片机为例,晶振为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 DJNZ 2us二层循环m:R6*(
2、n+3) = 202*165 = 33330us DJNZ 2us + R5赋值 1us = 3us三层循环: R7*(m+3) = 15*33333 = 499995us DJNZ 2us + 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; for(i=5;
3、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)/=大于10US0;Ms-)for(i=26;i0;i-);i=(延时值-1.75)*12/Ms-15/4如想延时60US则 i=(60-1.75)*12/6-15/4=25.37526; 修改i值=26,再调用上面【10US级延时函数】Delay10us(6); 则就精确延时60US;如果想延时64US可以用这二种函数组合来用: Delay10us(6); for(i=9;iX;i-) 共延时64US4 / 4