下载此文档

精确延时.doc


文档分类:通信/电子 | 页数:约18页 举报非法文档有奖
1/18
下载提示
  • 1.该资料是网友上传的,本站提供全文预览,预览什么样,下载就什么样。
  • 2.下载该文档所得收入归上传者、原创者。
  • 3.下载的文档,不会出现我们的网址水印。
1/18 下载此文档
文档列表 文档介绍
KEIL单片机C语言精确延时值的计算2011-11-2020:54|发布者:pcb_dz|查看:111|评论:0|来自:机C语言的精确延时,网上很多都是大约给出延时值没有准确那值是多少,也就没有达到精确高的要求,而51hei给出的本函数克服了以上缺点,能够精确计数出要延时值且精确达到1us,本举例所用CPU为STC12C5412系列12倍速的单片机,只要修改一下参数值其它系例单片机也通用,适用范围宽。共有三条延时函数说明如下:函数调用分两级:一级是小于10US的延时,二级是大于10US的延时//====================小于10US的【用1US级延时】====================//----------微秒级延时---------for(i=X;i>X;i--)延时时间=(3+5*X)/12提示(单位us,X不能大于255)//================大于10US<【10US级延时函数】===========voidDelay10us(ucharMs){uchardatai;for(;Ms>0;Ms--)for(i=26;i>0;i--);}i=[(延时值-)*12/Ms-15]/4如想延时60US则i=[(60-)*12/6-15]/4=≈26;修改i的值=26,再调用上面的【10US级延时函数】Delay10us(6);则就精确延时60US;如果想延时64US可以用这二种函数组合来用:Delay10us(6);for(i=9;i>X;i--)共延时64US//==============对于大于20Ms的可用中断来实现程序运行比较好===============中断用定时器0,1Ms中断:voidtimer0(void)interrupt1{TL0=(0xffff-1000+2)%0x100;TH0=(0xffff-1000+2)/0x100;//每毫秒执行一次if(DelayMs_1>0)DelayMs_1--;//大于20Ms延时程序}函数调用voidDelayMs(uinta)//延时a×1(ms)的时间。{DelayMs_1=a;while(DelayMs_1);}如果延时50Ms则函数值为DelayMs(50)//+++++++++++++++++++++++++公式推算来由++++++++++++++++++++++++++++二级延时C语言反汇编见上传图1://=======================STC单片机延时指令时间====================指今时间(1us)指今时间(1us)MOVARn1SETBC1MOVRn#data2SUBBA#data2DJNZRnrel4DecRn3SJMPrel3JCrel3MOVRndirect4Lcalladdr166RET4//--------------JNZ3XRL2SUBB3使用Delay10us(ucharMs);其中循环外函数调用与返回用的时间=(6+4)进入+退出(1+1+2+3+,4)=10+11=21/12=;循环内函数时间MS=Ms*(1+1+2+3,+2+4*I+3+3)/12=Ms*(15+4*I)/12;所以如果延时60us时用【10US级延时函数】I的值为:60=循环外时间+循环内时间=+Ms*(15+4*I)/12;则i=[(60-)*12/6-15]/4=≈26即如果Ms=6,i=26;本算法中的12是STC12单片机与普通标准速率比。C语言写程序时,初学者遇到的一个难题时精确延时程序的设计。我刚开始用C语言写程序时同样遇到了这个问题,后来参考了一些文章和实际设计后才知道了精确延时程序的设计。我现在就用两种方法来实现,一种是while()语句,另一种是for()语句,这两种语句均可产生汇编语句中的DJNZ语句,以12MHZ晶振为例(说明:在编写C程序时,变量尽量使用unsignedchar,如满足不了才使用unsignedint):=99;while(--delay);产生的汇编代码为:000FHMOV08H,#63H0012HDJNZ08H,0012H这样产生的延时时间为:(99+1)×2us。最小延时时间为2us,若加上对delay赋值语句,则最小为4us。(i=delay;i>0;i--);产生的汇编代码同while()语句。下面来举例几个延时函数:(void){unsignedchari,j,k;for(i=15;i>0;i--)for(j=202;j>0;j--)for(k

精确延时 来自淘豆网m.daumloan.com转载请标明出处.

相关文档 更多>>
非法内容举报中心
文档信息
  • 页数18
  • 收藏数0 收藏
  • 顶次数0
  • 上传人文库旗舰店
  • 文件大小37 KB
  • 时间2019-12-02
最近更新