不用定时器和汇编语言只用C语言实现精确无误的延时

2019-01-05 17:29

不用定时器和汇编语言只用C语言实现精确无误的延时



  读故事写评语喽~ 踩过坑的你是否期待更贴心智能的客户支持,KeysightCare邀您抢楼赢礼!

  对于51定时器,却是有点少,有时候不经意间就被用完了,而实现定时又TM神坑了!一般的解决方案有直接上汇编,一条语句的执行时间就是一个机器周期,所以多写几个就实现了完美的定时功能。可是可是……..又有多少学51的会汇编呢?呵呵哒

  所以来分享一个神好用的方法,C语言的while和nop结合使用实现精确延时

  本网站转载的所有的文章、图片、音频视频文件等资料的版权归版权所有人所有,本站采用的非本站原创文章及图片等内容无法一一联系确认版权者。如果本网所选内容的文章作者及编辑认为其作品不宜公开自由传播,或不应无偿使用,请及时通过电子邮件或电话通知我们,以迅速采取适当措施,避免给双方造成不必要的经济损失。

  KST-STM32学习之PWM实现的各种途径(软件硬件+通用高级定时器)

  一、STM32的通用定时器介绍STM32F103ZE 拥有 TIM2、TIM3、TIM4 和 TIM5 共 4 个通用定时器。STM32F103C8拥有TIM2/TIM3/TIM4这三个通用定时器通用定时器除了具备基本定时器的向上计数器功能外,还可以向下、向上/向下计数。此外还具备独立通道,能够实现输入捕获、输出比较、PWM 输出、单脉冲输出的功能。二、输出比较产生PWM1、产生PWM的几种方式①、硬件实现。比如STM32 自带的 PWM 输出功能。注意了,硬件实现的时候,外部接线需要接到通用定时器的外部通道上!②、通用定时器的输出比较实现软件的PWM,这个软件产生的PWM要比定时器模拟产生的PWM精确许多。③、单纯的定时器

  TIM_IT,FunctionalState NewState);TIMx 的 x 为 1~8,表示使用哪个定时器;TIM_IT 表示中断源类型,NewState 为中断是否使能STM32 的定时器有 6 种中断源类型,这 6 个中断源不仅都可以触发中断,每种类型还可以单独设置中断使能。(基本定时器重点关注TIM_IT_Update)TIM_IT_Update:表示更新事件中断,比如计数器向上溢出/向下溢出,计数器初始化等都可以导致定时器的标志位更新,基本定时器通常都是用这个中断源!TIM_IT_CC1~4:都是捕获/比较中断,即外部信号输入捕获、输出比较,高级和通用寄存器有这个功能,基本定时器没有这个功能!(学习可类比51中

  TIM6Init(10000, 7200); //初始化定时器 6,预装载值为 10000,预分频值为 7200,定时时间 10000/(72000000/7200)=1s那这篇是想介绍另外一种,假如我定时10ms已经确定,我想做到计每个数用的时间是39(us),那么对应的重装载数值及分频值如何确定呢?(感想来源于通用定时器比较输出256级PWM…)总共10ms,每个数计39us,那么需要计10ms/39us=255个数。此时对应的重装载值就是255了,然后对应的分频值为72*39-1。(72的含义是系统时钟,-1是C语言从0开始的)

  随着学习的深入对51的认识也越来越深,尤其对中断的重要性更是深深体会!如果你是和我一样的初学者,请一定要学好中断!今天来分享一下有关定时器定时补偿的冷知识。不知道你是否做过这样的实验,就是当你用定时器来定时1ms来实现数码管的自动加1。随着时间的推移,会发现和真正的时间略有偏差。于是就引出了接下来所要讲的。到底这些值差在哪里呢?主要在三个方面:进入中断前要进行压栈,即是进行数据保护,这里要耗费几个机器周期进出中断这个过程也要耗费一定的机器周期进入中断后的重新赋值也要耗费一定的机器周期所以累计误差就这么慢慢增加了。如何补偿呢?其实思路很简单就是进入debug,看两次中断相差的时间间隔和我们真正的定时相差

  对于51定时器,却是有点少,有时候不经意间就被用完了,而实现定时又TM神坑了!一般的解决方案有直接上汇编,一条语句的执行时间就是一个机器周期,所以多写几个就实现了完美的定时功能。可是可是……..又有多少学51的会汇编呢?呵呵哒所以来分享一个神好用的方法,C语言的while和nop结合使用实现精确延时上调试代码:#include reg52.h#include intrins.h//声明_nop_()函数#define TIME 164//此处是需要不断调节的改变时间的数值//164是少4个机器周期,165是多了

  定时器计数频率 * 周期时长(需要产生频率的分之一) = 计数值,看下面这段关键程序!void ConfigPWM(u16 fr, u8 dc)//具体用的时候最好再估算一下是否线 tmp, high, low; tmp = 11059200/12/fr; high = (tmp * dc)/100; low = tmp - high; high = 65536 - high; low = 65536 - low; HighRH

  SoftTimer.h 利用定时器T2模拟多个软件定时器特点: 只占用一个硬件定时器T2

  读故事写评语喽~ 踩过坑的你是否期待更贴心智能的客户支持,KeysightCare邀您抢楼赢礼!

  你们想要的XMC4800 Relax EtherCAT Kit来了,速度来申请!

  下载、答题赢好礼:使用Mentor的Xpedition Layout高效设计PCB

  Maxim 利用nanoPower创新技术,致力于降低系统的静态功耗 看视频答题赢好礼! 还有免费开发板等你拿

  SimpleLink CC26x2CC13x2 可支持多重协议的无线微控制器

  基于 TI MSP430 Scan Interface 技术的流量表解决方案

不用定时器和汇编语言只用C语言实现精确无误的延时

  站点相关:综合资讯51单片机PIC单片机AVR单片机ARM单片机嵌入式系统汽车电子消费电子数据处理视频教程电子百科其他技术STM32MSP430C2000单片机论坛单片机资源下载单片机习题与教程