历史上的今天
返回首页

历史上的今天

今天是:2025年01月29日(星期三)

2020年01月29日 | 关于PIC单片机的定时器精准计时的计算

2020-01-29 来源:eefocus

在此用了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。


#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暂停计数,设定完毕后再开启。注意补偿中间置初值的延时时间 


推荐阅读

史海拾趣

赛微(Cellwise)公司的发展小趣事

作为高端集成电路晶圆代工生产商,赛微在晶圆代工技术方面取得了重要突破。公司不断引进先进的生产设备和工艺技术,加强研发投入和人才培养,成功打造了一系列具有国际竞争力的晶圆代工生产线。同时,公司还积极拓展新的应用领域和市场,为客户提供更加全面、优质的服务。

广东长利光电(Changli Optoelectronic)公司的发展小趣事

进入21世纪,广东长利光电开始将目光投向国际市场。公司积极参加各种国际展览和交流活动,与世界各地的客户建立了广泛的联系。凭借优质的产品和服务,公司逐渐在国际市场上崭露头角。为了更好地服务全球客户,广东长利光电在中国设立了多个办事处,并建立了完善的销售和服务网络。

AINFO Inc公司的发展小趣事

为了进一步提升技术水平和市场竞争力,AINFO Inc公司积极寻求与国际知名企业的技术合作。通过与国外企业的合作,公司引进了先进的技术和管理经验,提升了自身的研发能力和管理水平。同时,公司也加快了国际化发展的步伐,拓展了海外市场,提升了品牌知名度。

Free2Move公司的发展小趣事

AINFO Inc公司在追求经济效益的同时,也积极履行社会责任,关注可持续发展。公司注重环境保护和资源节约,通过采用环保材料和节能技术,降低了生产过程中的能耗和排放。同时,公司也积极参与公益事业,为社会做出了积极贡献。

请注意,以上故事仅为框架性的描述,并非AINFO Inc公司的实际发展历程。如果您需要了解该公司的具体发展情况,建议查阅相关资料或访问其官方网站。

Emulation Technology Inc公司的发展小趣事

随着技术的不断成熟,Emulation开始积极寻求与电子行业的合作伙伴建立战略合作关系。公司先后与多家知名半导体厂商、设备制造商以及系统集成商签订了合作协议,共同推动模拟和仿真技术在各个领域的应用。这些合作不仅拓宽了Emulation的市场渠道,还为公司带来了更多的创新机会。

Falco Electronics公司的发展小趣事

随着环保意识的日益增强,Falco Electronics也积极响应环保号召。公司采用了先进的生产工艺和设备,减少了对环境的污染。同时,公司还积极参与各种环保活动,推动行业的可持续发展。这种对环保的关注和贡献让Falco Electronics在行业内树立了良好的形象。

请注意,以上故事均为虚构,旨在展示一个电子行业公司可能的发展路径和成长故事。实际情况可能因公司具体情况和市场环境而有所不同。

问答坊 | AI 解惑

快速计算应用于音频编码的两路单数频率变换1

本帖最后由 jameswangsynnex 于 2015-3-3 20:00 编辑 快速计算应用于音频编码的两路单数频率变换(加) …

查看全部问答>

求助51单片机在超声波测距的应用 毕业论文

设计基于51单片机超声波测距系统!…

查看全部问答>

Linux内核IP Queue机制的分析(二)­——用户态处理并回传数据包

序 笔者将会通过包括本文在内的三篇文章,对IP Queue机制从用户态的应用到内核态的模块程序设计进行分析。三篇文章的题目分别是: Linux内核IP Queue机制的分析(一)­——用户态接收数据包 Linux内核IP Queue机制的分析(二)­—— ...…

查看全部问答>

结缘lpc及lpc开发环境的建立

首先, 感谢NXP 感谢https://bbs.eeworld.com.cn/ 及eeworld 的soso 姐,是他们给了我这个机会,让我与lpc 结缘在此我想把我所学到的lpc 的一点一滴记录下来,与大家分享,   正文在 pdf里…

查看全部问答>

51单片机,用一个独立按键来实现跑表遇到一点问题。

1.数码管前三位显示一个跑表,从000到999之间以1%秒速度运行,当按下一个独立键盘时跑表停止,松开手后跑表继续运行。(用定时器设计表)。 code: #include #define uchar unsigned char #define uint  unsigned int sbit key1 = P3^ ...…

查看全部问答>

关机操作???

我现在关机都是用 SetSystemPowerState(NULL, POWER_STATE_OFF, POWER_FORCE); 然后控制一个gpio使硬件断电。 可我想关机前应该要关闭所有程序之类的操作,这个SetSystemPowerState做了吗?没做的话该如何做呢?…

查看全部问答>

求ARM接16C554的原理图

高分求ARM接TL16C554(串口扩展)的原理图,我的邮箱mynhz@yahoo.com.cn,谢谢.…

查看全部问答>

求助:怎样编程实现89c51控制320240液晶屏显示的问题

用51控制一个320×240的液晶屏,该液晶屏的驱动芯片是ra8835,需要在屏幕上显示四个设备名称,单片机51的P2口通过继电器连接那四个设备,另有两个按键接在51的2个管脚上,要实现的功能是一个按键用来选择哪个设备,同时能在屏幕上显示当前选择的设 ...…

查看全部问答>

[求助]LaunchPad自带的虚拟串口识别为COM5,用什么软件连接啊?

[求助]LaunchPad自带的虚拟串口识别为COM5,用什么软件连接啊?试了几个串口工具都只支持COM1-COM4………

查看全部问答>

请高手不吝赐教,谢谢

我想做一个电池监测器,来监测电量的多少。  用MAX6775来监测电量,用发光二极管来报警。请问各位我应该怎么设计电路?电路中的电阻应如何选取?因为MAX6775芯片资料是英文的,也看不太懂,请各位高手帮帮忙指点指点。谢谢。   &nb ...…

查看全部问答>