单片机C语言精确延时值的计算

来源:华强电子网

作者:华仔

浏览:431

时间:2016-08-10 14:18

标签:

摘要:

单片机C语言做精确延时,网上很多都是大约给出延时值没有准确那值是多少,也就没有达到精确高的要求,而51hei给出的本函数克服了以上缺点,能够精确计数出要延时值且精确达到1us,本举例所用CPU为STC12C5412系列12倍速的单片机,只要修改一下参数值其它系例单片机也通用,适用范围宽。共有三条延时函数说明如下:函数调用分两

单片机C语言做精确延时,网上很多都是大约给出延时值没有准确那值是多少,也就没有达到精确高的要求,而51hei给出的本函数克服了以上缺点,能够精确计数出要延时值且精确达到1us,本举例所用CPU为STC12C5412系列12倍速的单片机,只要修改一下参数值其它系例单片机也通用,适用范围宽。

共有三条延时函数说明如下:

函数调用分两级:一级是小于10US的延时,二级是大于10US的延时

//====================小于10US的【用1US级延时】====================

//----------微秒级延时---------

for(i=X;i>X;i--) 延时时间=(3+5*X)/12   提示(单位us,  X不能大于255)

//================大于10US

void Delay10us(uchar Ms)

{

uchar data i;

for(;Ms>0;Ms--)

for(i=26;i>0;i--);

}

i=[(延时值-1.75)*12/Ms-15]/4

如想延时60US则  i=[(60-1.75)*12/6-15]/4=25.375≈26; 修改i的值=26,再调用上面的【10US级延时函数】Delay10us(6); 则就精确延时60US;

如果想延时64US可以用这二种函数组合来用: Delay10us(6); for(i=9;i>X;i--)  共延时64US

//==============对于大于20Ms的可用中断来实现程序运行比较好===============

中断用定时器0, 1Ms中断:

void timer0(void) interrupt 1

{

TL0=(0xffff-1000+2)%0x100;TH0=(0xffff-1000+2)/0x100; //每毫秒执行一次

if(DelayMs_1>0)DelayMs_1--;//大于20Ms延时程序

}

函数调用

void DelayMs(uint a)//延时 a×1(ms)的时间。

{

DelayMs_1=a;

while(DelayMs_1);

}

如果延时50Ms则 函数值为  DelayMs(50)

//+++++++++++++++++++++++++公式推算来由++++++++++++++++++++++++++++

二级延时C语言反汇编见上传图1:

//=======================STC单片机延时指令时间====================

指今   时间(1us)  指今   时间(1us)

MOV   A   Rn       1                        SETB  C             1

MOV   Rn  #data     2                        SUBB  A   #data     2

DJNZ  Rn  rel       4

Dec   Rn            3                         SJMP  rel            3

JC    rel            3                         MOV   Rn direct      4

Lcall addr16          6                         RET                 4

//--------------

JNZ                 3                         XRL                 2

SUBB               3

使用Delay10us(uchar Ms) 最多能延时21995.5us;

其中循环外函数调用与返回用的时间=(6+4)进入+退出(1+1+2+3+,4)=10+11=21/12=1.75us;

循环内函数时间 MS= Ms*(1+1+2+3,+2+4*I+3+3)/12=Ms*(15+4*I)/12 ;

所以如果延时60us时用【10US级延时函数】I的值为:

60=循环外时间+循环内时间=1.75us+ Ms*(15+4*I)/12;

则i=[(60-1.75)*12/6-15]/4=25.375≈26即如果Ms=6, i=26;

本算法中的12是STC12单片机与普通标准速率比。

技术资讯 技术方案 技术应用 技术新品 技术前沿 行业资讯 行业方案 行业应用 行业新品 行业前沿

分享到:

单片机c语言如何精确延时,单片机C语言精确延时值的计算相关推荐

  1. python分类预测降低准确率_【火炉炼AI】机器学习011-分类模型的评估:准确率,精确率,召回率,F1值...

    [火炉炼AI]机器学习011-分类模型的评估:准确率,精确率,召回率,F1值 (本文所使用的Python库和版本号: Python 3.5, Numpy 1.14, scikit-learn 0.19 ...

  2. 单片机定时器精准定时_用单片机C语言精确延时(定时)的方法

    最近在忙着单片机的项目,偶尔停下来小结了一下最近的收获,还是有不少可贵的收益的. 本人在闲暇的时候对单片机C语言下的各类延时程序做了下总结.由于单片机C语言下利用软件延时不容易做到精确的定时,所以很多 ...

  3. _nop_在c语言里什么作用,单片机c语言中nop函数的使用方法和延时计算

    原标题:单片机c语言中nop函数的使用方法和延时计算 标准的C语言中没有空语句.但在 的C语言编程中,经常需要用几个空指令产生短延时的效果. 这在汇编语言中很容易实现,写几个nop就行了. 在C51中 ...

  4. 单片机c语言小项目开发,单片机的一些开发技巧(一)

    很多朋友正在学习单片机开发技术,但开发中免不了要碰到这样.那样的问题,有些问题可能无碍大局,但有一些问题却直接影响到产品的成本.体积.性能.这里介绍笔者的几个技巧,希望对大家的工作有帮助. 一.C语言 ...

  5. avr-gcc与avr单片机c语言开发 pdf,AVR 单片机与GCC 编程使用方法

    原标题:AVR 单片机与GCC 编程使用方法 WIN 是一个ATMEL AVR 系列 的开发工具集,它包含GNU C 和C++编译器 . 1.1 一个简单的例子 为了先有一个感性的认识,我们首先看一下 ...

  6. java和c语言的区别_单片机为什么一直用C语言,不用其他编程语言?只有学过的知道...

    单片机为什么还在用C语言编程?答案是:C语言是最适合单片机编程的高级语言. 这个问题的意思应该是:现在有很多很好用的高级语言,如java,python,VC等等,为什么这些语言不能用来编写单片机程序呢 ...

  7. 单片机r6/r7c语言怎么用,关于单片机C51中c语言函数(-nop-())?

    实现延时通常有两种方法:一种是硬件延时,要用到定时器/计数器,这种方法可以提高CPU的工作效率,也能做到精确延时:另一种是软件延时,这种方法主要采用循环体进行. 1  使用定时器/计数器实现精确延时 ...

  8. 单片机六位抢答器c语言程序,八路电子抢答器(基于51单片机的8路抢答器设计C语言程序)...

    哥,你还有AT89C51单片机8路抢答器的资料吗 哥,你还有AT89C51单片机8路抢答器的资料吗 AT89C51单片机8路抢答器的资料 源程序如下 #include #define uchar un ...

  9. c语言时钟加秒表报告,51单片机秒表计时器课程设计报告(含C语言程序)-20210419061005.docx-原创力文档...

    XXXXXX学院 51单片机系统设计课程设计报告 题 目:秒表系统设计 专业.班级: 学生姓名: 学号: 指导教师: 分数: [摘要]本设计是一个秒表计时器,采用51单片机实现.电路包括以下儿部分:单 ...

  10. 51单片机c语言编程100,51单片机C语言编程100例.doc

    51单片机C语言编程100例.doc 目 录实例3用单片机控制第一个灯亮3实例4用单片机控制一个灯闪烁认识单片机的工作频率3实例5将 P1口状态分别送入P0.P2.P3口认识I/O口的引脚功能4实例6 ...

最新文章

  1. perl 对ENV环境变量的使用
  2. C++面试中string类的一种正确写法
  3. oracle 提示i386,新手请教:RAC安装时检测i386软件包未安装,这个怎么处理?
  4. C#基础篇三流程控制2
  5. 47.leetcode36_valid_suduko
  6. java解析xml中文字符乱码_Eclipse读取xml中文乱码问题解决
  7. 计算机考试internet应用好考吗,2015年职称计算机考试XP好考还是internet应用好考...
  8. elementUI响应式布局@media:基于断点的隐藏类
  9. 深度学习 《BiRNN》
  10. linux配置部署nginx
  11. php 返回josn 中文,php返回json数据中文显示不友好的问题的解决办法
  12. 视频监控市场发展潜力大 六个阻碍待突破
  13. 信息论里的信息熵到底是什么含义?互信息的定义
  14. ubuntu16.04系统安装nvidia显卡驱动
  15. 90%的人都不知道的Node.js 依赖关系管理(上)
  16. MIXLAB_NASA_TICKET生成
  17. air报错 Context3D not available. fd as3项目默认不开启gpu加速的问题
  18. html掷骰子游戏的代码,jquery实现掷骰子小游戏
  19. 自学python能干什么
  20. 北大教授王汉生论述数据治理(非常有思想,非常好理解)

热门文章

  1. 网易云音乐Android一面面经
  2. 概率图模型--马尔可夫随机场
  3. 信号完整性之传输线理论(三)
  4. 我的世界旅行者地图服务器不显示,我的世界旅行者地图怎么没有传送 | 手游网游页游攻略大全...
  5. 【Python】torrentParser1.01
  6. Python实现层次分析法
  7. Halcon教程-HALCON19.05Progress将于2019年5月31日正式发布
  8. 服务器极光推送消息怎么设置,服务器极光推送消息
  9. Android App的破解技术有哪些?如何防止反编译?
  10. PDF如何转Excel?学会这3个方法,1分钟就能实现转换