单片机定时器精准定时_PIC单片机的定时器精准计时的计算
关于PIC单片机的定时器精准计时的计算
在此用了16C711单片机的TMR0做定时中断,希望实现精准计时,在程序中,TMR0用了晶振的32分频,初值#0FCH,因此POPBEAR兄弟计算出每个定时中断的计时时间为(256-X)*32*4/32768=0.015625秒。注意,问题就在这里!实际上这个时间是TMR0的初值被置入后两个指令周期后(见PIC单片机定时器/计数器资料)到下一次中断发生时的时间。如果要用到定时器的精准定时,必须理解这一概念!
如采用32768Hz的晶振,每个指令周期为122us,在中断处理程序中,到TMR0的初值被置入,共有7条指令,加上TMR0的初值被置入后两个指令周期,如果中断处理程序不直接放在0004H地址而采用GOTO指令的两个周期,一共为11个指令周期。也就是说,每个定时中断发生的间隔为0.015625秒+11*122us。程序中64次中断为1秒,那么1秒误差为64*11*122us=85.9375ms,1分钟的误差为5.156s。
那么怎样得到精准计时呢?这就要在对定时器的初值赋值上和中断处理程序中做文章。
关于如何产生一个大致比较精准的时间中断
使用TMR0的时候,如果仅TMR0一个中断,显然,使用 TMR0=TMR0+OFFSET的方式就能够产生一个比较精准的时间中断。特别是不用考虑从中断到TMR0的赋值中间间隔了多少时间的延时。
但是使用TMR1时,就产生了问题,因为TMR1是16位的,所以TMR1L=TMR1L+OFFSET_L时,就得考虑TMR1H得进位问题。
使用C内欠套汇编如下(如用赋值而不是增量方式,C中就得中断到赋值得时间了),且TMR1_Revalue_H得值不会为0xFF。
[cpp] view plaincopyprint? #asm
movf _TMR1_Revalue_L & 0x7F,W
addwf _TMR1L,F
btfss _STATUS,0
movf _TMR1_Revalue_H & 0x7F,W
btfsc _STATUS,0
incf _TMR1_Revalue_H & 0x7F,W
addwf _TMR1H
#endasm
方法两种
1)利用CCP模块在Compare模式下特殊事件触发功能实现精确的TMR1定时中断。
2)普通模式下在重装定时初值前TMR1暂停计数,设定完毕后再开启。注意补偿中间置初值的延时时间。
单片机定时器精准定时_PIC单片机的定时器精准计时的计算相关推荐
- 单片机定时器精准定时_8051单片机(STC89C52)定时器实现10ms精准定时
8051内部集成了2个16bits的计数器, 可以根据需要将其作为定时器使用. 这时, 定时器的计数频率为系统CLK/12. 如果CPU的晶振频率为12MHz, 那么定时器信号源的频率固定为12MHz ...
- 单片机定时器精准定时_单片机入门-C51语言采用定时器查询方法获取1秒精准定时...
原标题:单片机入门-C51语言采用定时器查询方法获取1秒精准定时 视频如下: 51系列单片机含有专用的 定时器/计数器,定时器/计数器是一个二进制的加1寄存器,当启动后就开始从所设 定的计数初始值开始 ...
- 单片机定时器精准定时_单片机定时器,如何追求极致的精度?
1.晶振频率的误差 假设你用的是这种常用的无源晶振 它的误差±20PPM可以理解为百万分之20,12Mh晶振的标称的误差±240hz,频率范围在11.9976Mhz--12.00024Mhz范围.软件 ...
- 单片机定时器精准定时_单片机很好玩6,制作一个精确的“定时器”,为什么这么重要?...
单片机常被称作 MCU,MCU 的全称是 Micro Control Unit,就是微型控制器的意思.顾名思义,单片机常被用于控制一些器件工作,因此物联网的终端,或者其他一些智能机器,都是离不开单片机 ...
- pic单片机低电压检测_pic单片机汇编语言讲解(上)
pic 单片机为最常用单片机之一,许多程序均基于 pic 单片机进行开发.因此,熟练 pic 单片机编程尤为重要.为保证大家能准确.熟练掌握 pic 单片机的使用,本文特带来 pic 单片机的各种汇编 ...
- 设定pic单片机端口为输入_PIC单片机IO端口的软件/硬件可靠性使用方法讨论
本帖最后由 dingzy_2002 于 2016-3-19 11:51 编辑 一.PIC的IO端口设置在普通的高低电平情况下 1.有普通的H/L电平下,硬件设计要注意的是外围输出其最大驱动电流(拉出/ ...
- 两个单片机iic通讯程序_PIC单片机之DS1302时钟
大家好,通过前一期的学习,我们已经对ICD2 仿真烧写器和增强型PIC 实验板的使用方法及学习方式有所了解与熟悉,学会了如何用单片机来控制发光管.继电器.蜂鸣器.按键.数码管.RS232串口.步进电机 ...
- 设定pic单片机端口为输入_PIC单片机的输入输出端口
在学习这个部门的时候,曾经碰到过一些题目.PIC单片机的引脚未几,大多都是复用引脚,例如AD.IO.比较器.外接晶振等等,所以在配置端口的时候,一定要知道每个功能怎样设置才能实现的,在这一小节中,我要 ...
- 设定pic单片机端口为输入_PIC单片机的模块和功用
PIC16F616是一款14引脚.8位的CMOS单片机.选用精简指令集,仅有35条指令,因为选用了数据总线和指令总线别离的哈佛总线构造,使得除少数指令不是单周期以外,大有些的指令都是单周期指令.这么有 ...
最新文章
- PHP从数据库获取的下拉树
- 用C#使用HttpWebRequest Post数据时如何保持Session
- Java中书写要注意的地方
- java.lang.ExceptionInInitializerError
- update-rc.d 更新 Linux 系统启动项 命令 用法详解
- java 昵称1到32位字符_Java期末考试编程题复习
- ERROR: Cannot unpack file C:\Users\admin\AppData\Local\Temp\pip-unpack-yo8pmupp\simple.htm (download
- TensorFlow入门--实现多层感知机
- 关于LabVIEW视觉ROI的读取与存储
- 为什么家里pm25比外面高_你绝对不会相信在家用卷发棒烫发竟然比在外面烫发更伤发?...
- 【网络原理】数据链路层
- 中文版-动手学深度学习
- 彻底解决电脑空闲时,Win音频设备图形隔离(系统进程)占用CPU的问题
- python爬取本地文本中的成语_Python爬取成语:从3字到12字
- C/C++ 内存对齐原则及作用
- 浅析中国综艺的营销策略
- “穿搭速递”首页制作
- 王者荣耀最低战力查询-王者战区修改
- 雷柏V500s和V500的win键无效
- 卷积神经网络论文学习(Lecun1998)