C语言中delay的用法

这篇具有很好参考价值的文章主要介绍了C语言中delay的用法。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

c语言延时函数delay延时一秒,c语言,单片机,开发语言

转自:微点阅读  https://www.weidianyuedu.com

  C语言作为一门新型高级编程语言,在计算机软件编程中具有较为广泛的应用和实现。下面微点阅读小编就跟你们详细介绍下c语言中delay的用法,希望对你们有用。

  c语言中delay的用法如下:

  假设一个延时函数如下:

  void delay()

  {

  uint i;

  for(i=0;i<20000;i++);

  }文章来源地址https://www.toymoban.com/news/detail-773516.html

  我们怎么来算呢,先将20000转成16进制,得到4E20,然后将高字节4E乘以6得到468D,再将468+2=470,然后将470D*20HEX(即32D)=15040;所心这个延时函数总共要执行15040个周期,假设所用的晶振为12MHZ,则该段函数总延时:15.04ms。

  有了这个公式我们如果想要设定指定的延时长度就可以用它的己知公式确定。即:总时间=[(6*i值的高8位)+2]*i的低8位。

  例如:设要延时125ms。

  我们将低字节先赋值200D*(即:C8),然后再算高低节的定值,由式中可知125ms=200*((i值的高字节*6)+2),又可推算出(高低节*6)+2的总延迟时间应等于625us,将625/6=104.1666,取整数得到104,将104转成16进制得到68H,再将高字节和低字节组合起来即得到了定值,即:68C8HEX,代入函数即如下:

  void delay()

  {

  uint i;

  for(i=0;i<0x68C8;i++);

  }

  如果写直进行就要将68C8转成10进制,即:26824,代入后得到:

  void delay()

  {

  uint i;

  for(i=0;i<0x26824;i++);

  在c语言中嵌入一段汇编的延时程序呀,你自己看看书,很简单的

  用在单片机里的可以C和汇编混合使用,因为用汇编编写延时要准确些,所以你不妨写一个汇编程序,然后再调用它好了,要用C来编精确的延时确实是比较难的哦.呵呵

  谁说C语言不能精确延时,用51单片机的定时/计数器一或者用定时/计数器2的工作方式2,自动再装入8位计数器,就可以精确延时,别说1MS了就是100um也能精确做到。

  其实很简单,采用定时器,将需要定时时间算好后写入单片机中断程序中即可,这种方法可以实现精确定时,最终的误差仅由晶振来确定了。

  不错,用定时器最准确。但是定时器数量有限,有时候不见得能够用。比如温度检测(尤其是变化比较大、快的),一个定时器就得一直不停检测。这个时候如果另外一个定时器有正好分配的其他任务,就只有用其他方法延时了。

  空循环就行了

  如while(i--);根据i的不同决定了延时长短

  不过C的延时不是非常准确,你得根据反汇编,看汇编语句的数量和指令周期来计算时间

  也可以是

  void mDelay(unsigned int Delay) //Delay = 1000 时间为1S

  {

  unsigned int i;

  for(;Delay>0;Delay--)

  {

  for(i=0;i<124;i++)

  {;}

  }

  }

到了这里,关于C语言中delay的用法的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • PIC单片机如何设计延时

    PIC单片机的延时基本有三种,第一种是自己设计的delay()函数,第二种是直接调用库自带的delay()函数,最后一种就是利用其自带的Time定时器。当然不管是自己设计的delay()函数还是库自带的delay()函数的精度都低于Time0定时器的精度,Time定时器是单片机内部的硬件寄存器模块,

    2024年02月14日
    浏览(42)
  • 51单片机定时器中断按键消抖(无延时)

    单片机入门学习记录(二) 在机械按键的触点闭合和断开时,都会产生抖动,为了保证系统能正确识别按键的开关,就必须对按键的抖动进行处理。按键的抖动对于人类来说是感觉不到的,但对单片机来说,则是完全可以感应到的,而且还是一个很“漫长”的过程,因为单片

    2024年02月14日
    浏览(61)
  • 单片机04__基本定时器__毫秒微秒延时

            STM32F40X芯片一共包含14个定时器,这14个定时器分为3大类: 通用定时器 10个 TIM9-TIM1和TIM2-TIM5 具有基本定时器功能, 还具有输入捕获,输出比较功能 高级定时器 2个 T IM1 和T IM8    具有通用定时器和基本定时器功能, 还具有死区刹车功能。 基本定时器 2个 T IM6 和

    2024年03月20日
    浏览(44)
  • Arduino 单片机程序中处理时间戳、时间溢出和延时问题

    这个话题对其他单片机也适用,就是用来计时的变量万一溢出了该怎么整,类似那个经典的千年虫问题。实际上这个问题在日常生活中也很常见,比如,时钟上的小时最大值为23,从0 开始,每过24 小时归零一次,只按时钟上的小时数来记录时间,最多只能计24 小时。时间超过

    2024年02月10日
    浏览(45)
  • 单片机中的 _nop_() 延时以及其相关的基础扩展

    最近还是继续做着项目,因为在某 8051 内核芯片上使用到了 I2C 通讯,又需要 _nop_() 函数来实现 us 延时,那么正好来写一篇由 _nop_() 函数引起的一系列基本概念 。 本文的内容包括:对 nop 的认识,单片机中的 nop 函数做延时的一些注意事项,以及单片机中基本的指令周期,机

    2024年02月05日
    浏览(50)
  • 51单片机_简易自动电容测量仪&简易延时万用表

     实物演示 https://www.bilibili.com/video/BV1vh4y1v7vV/?vd_source=6ff7cd03af95cd504b60511ef9373a1d 1、电容的测量就是通过555构成多谐振荡器,通过单片机的中断计数,最终实现电容的测量。 2、Lcd1602液晶显示电路里面的RV1,是调节液晶对比度的,仿真里面是没有效果的。 3、晶振电路属于内部时

    2024年01月20日
    浏览(52)
  • 学习笔记|基于Delay实现的LED闪烁|模块化编程|SOS求救灯光|STC32G单片机视频开发教程(冲哥)|第六集(下):实现LED闪烁

    在模块化编程里,函数使用分为如下三步: 返回值 函数名称( 入口参数 ) { 函数要执行的功能 } @返回值:没有返回值就是void @函数名称:避开(IDE中标蓝),不重复,非特殊字符随便取 @入口参数:类型+名称,多个参数“,”分开,空就写void 返回值 函数名称( 入口参

    2024年02月12日
    浏览(50)
  • 【GD32】从0开始学GD32单片机(10)—— TIMER基本定时器详解+1毫秒延时例程

    在GD32中定时器是非常重要的外设,它可以帮我们精准的控制程序的调度,就如之前讲过的SysTick就是一个定时器,我们可以通过设置这个定时器的寄存器实现延时函数。 GD32的定时器可大致分为3种—— 基本定时器、通用定时器、高级定时器 。 它们之间的区别如下图所示: 这

    2024年01月17日
    浏览(58)
  • 51单片机中断定时器1用法

    中断为使单片机具有对内部或外部随机发生的事件实时处理而设置的。 中断技术不仅解决了快速主机与I/O设备的数据传送问题,而且还有具有如下的优点: 1. 分时操作:CPU可以分时为多个I/O设备服务,提高了计算机的利用率。 2. 实时操作:CPU能够及时处理应用系统的随机事

    2024年02月06日
    浏览(61)
  • 【单片机基础】使用51单片机制作函数信号发生器(DAC0832使用仿真)

    单片机作为一个数字电路系统,当需要采集外界模拟量的使用需要进行AD转换,将模拟量转换成数字量,供单片机使用。51单片机需要外部配置一个AD转换芯片来进行模拟量的采集,如我之前写了一篇ADC0832的使用。高级的单片机如STC12和STM32已经集成了AD转换功能,只需简单配置

    2024年02月08日
    浏览(45)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包