8051单片机定时器溢出中断误差补偿示例

发布者:RadiantGaze最新更新时间:2014-01-21 来源: dqjsw关键字:单片机  定时器溢出  中断误差补偿 手机看文章 扫描二维码
随时随地手机看文章

  1 前言

  单片机内部一般有若干个定时器。如8051单片机内部有定时器0和定时器1。在定时器计数溢出时,便向CPU发出中断请求。当CPU正在执行某指令或某中断服务程序时,它响应定时器溢出中断往往延迟一段时间。这种延时虽对单片机低频控制系统影响甚微,但对单片机高频控制系统的实时控制精度却有较大的影响,有时还可能造成控制事故。为扩大单片机的应用范围,本文介绍它的定时器溢出中断与CPU响应中断的时间误差、补偿误差的方法和实例。

  2 误差原因、大小及特点

  产生单片机定时器溢出中断与CPU响应中断的时间误差有两个原因。一是定时器溢出中断信号时,CPU正在执行某指令;二是定时器溢出中断信号时,CPU正在执行某中断服务程序。

  2.1. CPU正在执行某指令时的误差及大小

  由于CPU正在执行某指令,因此它不能及时响应定时器的溢出中断。当CPU执行此指令后再响应中断所延迟的最长时间为该指令的指令周期,即误差的最大值为执行该指令所需的时间。由于各指令都有对应的指令周期,因此这种误差将因CPU正在执行指令的不同而不同。如定时器溢出中断时,CPU正在执行指令MOV A, Rn,其最大误差为1个机器周期。而执行指令MOV Rn, direct时,其最大误差为2个机器周期。当CPU正在执行乘法或除法指令时,最大时间误差可达4个机器周期。在8051单片机指令系统中,多数指令的指令周期为1~2个机器周期,因此最大时间误差一般为1~2个机器周期。若振荡器振荡频率为fosc,CPU正在执行指令的机器周期数为Ci,则最大时间误差为Δtmax1=12/fosc×Ci(us)。例如fosc=12MHZ,CPU正在执行乘法指令(Ci=4),此时的最大时间误差为:

  Δtmax1=12/fosc×Ci=12/(12×106)×4=4×10-6(s)=4(μs)

  2.2 CPU正在执行某中断服务的程序时的误差及大小

  定时器溢出中断信号时,若CPU正在执行同级或高优先级中断服务程序,则它仍需继续执行这些程序,不能及时响应定时器的溢出中断请求,其延迟时间由中断转移指令周期T1、中断服务程序执行时间T2、中断返回指令的指令周期T3及中断返回原断点后执行下一条指令周期T4(如乘法指令)组成。中断转移指令和中断返回指令的指令周期都分别为2个机器周期。中断服务程序的执行时间为该程序所含指令的指令周期的总和。因此,最大时间误差Δtmax2为:

  Δtmax2=(T1+T2+T3+T4)12/fosc=(2+T2+2+4)12/ fosc=12(T2+8)/ fosc

  若设fosc=12MHZ,则最大时间误差为:

  Δtmax2=12(T2+8)/ fosc =12(T2+8)/12×106=(T2+8)×10-6(s)=T2+8(μs)。

  由于上式中T2一般大于8,因此,这种时间误差一般取决于正在执行的中断服务程序。当CPU正在执行中断返回指令RETI、或正在读写IE或IP指令时,这种误差在5个机器周期内。

  2.3 误差非固定性特点

  定时器溢出中断与CPU响应中断的时间误差具有非固定性特点。即这种误差因CPU正在执行指令的不同而有相当大的差异。如CPU正在执行某中断服务程序,这种误差将远远大于执行一条指令时的误差。后者误差可能是前者误差的几倍、几十倍、甚至更大。如同样只执行一条指令,这种误差也有较大的差别。如执行乘法指令MUL AB 比执行MOV A, Rn指令的时间误差增加了3个机器周期。这种误差的非固定不仅给误差分析带来不便,同时也给误差补偿带来困难。

  3 误差补偿方法

  由于定时器产生溢出中断与CPU响应中断请求的时间误差具有非固定性,因此,这种误差很难用常规方法补偿。为此,本文介绍一种新方法。现介绍该方法的基本思路、定时器新初值及应用情况。[page]

  3.1 基本思路

  为使定时器溢出中断与CPU响应中断实现同步,该方法针对中断响应与中断请求的时间误差,对定时器原有的计数初值进行修改,以延长定时器计数时间,从而补偿误差。在该方法中,当定时器溢出中断得到响应后,即停止定时器的计数,并读出计数值。该计数值是定时器溢出后,重新从OOH开始每个机器周期继续加1所计的值。然后,将这个值与定时器的停止计数时间求和。若在定时器原计数初值中减去这个和形成新计数初值,则定时器能在新计数初值下使溢出中断与CPU响应中断实现同步,从而达到误差的补偿要求。
 

  3.2 定时器新计数初值

  若定时器为计数方式,操作方式为1,则计数器初值X0=216-t0×fosc/12。式中fosc为振荡器的振荡频率。t0为需要定时的时间,也为中断的间隔时间。X0为定时器原计数初值。在对定时器溢出中断与CPU响应中断时间误差进行补偿时,定时器的新计数初值X1为:

  X1=216-t3× fosc/12

  t3=t0+t1+t2

  式中t0为中断间隔时间。t1为定时器停止计数时间,该时间为定时器停止计数到重新启动计数之间所有程序指令周期数的总和。t2为定时器溢出中断后,重新从OOH开始直至计数器停止时计的值。在误差补偿中,若将定时器计数初值X1取代X0,则可使定时器下次的溢出中断与CPU响应中断实现同步。

  3.3 实例

  要求补偿定时器每1ms产生一次溢出中断时的中断响应延迟的误差。若振荡器振荡频率fosc=12MHZ,定时器工作在计数方式,工作模式为1,则补偿中断响应时间误差时的定时器新初值X1为:

  X1=216-t3× fosc/12=216-(t0+ t1)- t2=216-(1000+ 13)- t2

  误差补偿程序为:

  ……

  0 CLR EA ;关CPU中断

  1 CLR TRi ;停止定时器计数

  2 MOV R0, #OOH ;R0清零

  3 MOV R0, #LOW(216) ;定时器最大计数值的低8位送R0

  4 MOV A, R0

  5 SUBB A, #LOW(1000+13) ;216的低8位减去( t0+ t1)的低8位送累加器A

  6 SUBB A, TLi ;216的低8位减去( t0+ t1+ t2)的低8位送TLi

  7 MOV TLi, A

  8 MOV R0, #OOH ;R0清零

  9 MOV R0, #HIGH(216) ;216 的高8位送R0

  10 MOV A, R0

  11 SUBB A, #HIGH(1000+13) ;216的高8位减去( t0+ t1)的高8位送A

  12 SUBB A, THi ;216的高8位减去( t0+ t1 +t2)的高8位送A

  13 MOV THi, A

  14 SETB TRi ;重新启动定时器

  ……

  在上式和上段程序中,由于fosc=12MHZ,中断间隔时间为1ms,因此t0的机器周期数为1000。由于第1条指令到第14条指令的指令周期的机器周期数之和为13,因此,t1为13个机器周期。CPU虽在执行第一条指令CLR TRi后停止定时器计数,但在TLi、THi中分别保存了t2的低位数据和高位数据。

  4 结束语

  由于本文介绍的误差补偿方法能对定时器溢出中断与CPU响应中断的非固定性时间误差进行有效补偿,因此,该方法对于提高高频控制系统实时控制精度和扩大单片机应用范围都有较高的实用价值。

关键字:单片机  定时器溢出  中断误差补偿 引用地址:8051单片机定时器溢出中断误差补偿示例

上一篇:基于Proteus软件的单片机仿真与PCB设计
下一篇:单片机与PC机串行通信的实现的设计原理

推荐阅读最新更新时间:2024-03-16 13:34

51单片机-模拟倒车雷达报警
1.题目要求 我们在第九章第3讲的例程基础上,实现用超声波模块模拟倒车雷达报警的功能,当障碍物距离超声波模块小于等于10cm左右我们就用蜂鸣器鸣叫产生报警,大于10cm就不报警。代码上添加的程序量比较少,我们只是把定时时间改为200微秒好使蜂鸣器鸣叫的比较尖锐。 2.main.c测试代码 #include reg52.h #include function.h //详见第六章第8讲 #include timer.h //详见第八章第11讲 #include intrins.h sbit TRIG = P2^0; sbit ECHO = P2^1; u8 FLAG=0,BEEP_FLAG=0; void d
[单片机]
PIC单片机AD转化器编程方法
要使用好ADC模块首先要对ADC模块进行初始化设置,这些设置需要包括以下内容: 1、设置ADC模块端口和数据格式 通过设置控制寄存器ADCON1设置引脚功能为输入信道,参考电压接入方式,通过数字IO引脚和设置转换结果的存放格式。 2、设置ADC模块工作方式 通过控制寄存器ADCON0选中某一条模拟输入信道,设置AD转换时钟源以及开启AD转换功能。 3、如果需要中断功能,应该设置AD中断使能位 清除ADC模块中断标志位ADIF,设置ADC模块中断使能位ADIE=1,设置中断使能位PEIE=1和全局中断使能位GIE=1. 4、等待所需要的采样时间 采样时间大约是10~20us,影响采样时间的主要因素之一是模拟信号源内阻,信
[单片机]
AVR和PIC单片机学习心得总结
一、两种单片机工程文件编译成功的关键是工程文件名和存储目录必须是英文字母,绝对不能是汉字目录! 否则就会出现编译错误。我就是使用了汉字目录“我的文档”在工程文件编译文件过程产生错误,百思不得其解,浪费了许多时间。 二、学AVR单片机感觉还是用AVR STUDIO自带的GCC比较爽。一是因为AVR STUDIO 自带(不过还要自己安装WinAVR);二是因为 WinAVR是自由软件不需要破解;三是现在用起来比以前要爽多了,以前还要自己编写makefile文件,现在只需在project的configuration中设置一下单片机使用晶振频率 ,剩下的就交给编译器;四是GCC 函数库比较丰富,拿来直接用省的自己编写代码了。 三、
[单片机]
基于凌阳单片机的语音信号实时采集
摘要:语音信号采集是语音信号处理的基础。本文利用凌阳公司16位单片机——SPCE061A所具有的数字信号处理(DSP)功能及其所提供的音频压缩函数库来实现语音信号的实时采样与压缩;通过RS232接口,将采集到的语音信号实时上传到PC机中存储。 关键词:语音信号处理 RS232 串口通信 语音采样 语音压缩 引言 随着单片机集成化程度的不断提高,现代单片机已经具备了数字信号处理功能,使语音信号处理用单片机实现成为可能。台湾凌阳科技公司(SunPlus)推出的一款SPCE061A就是这样的产品。SPCE061A是以μ"nSP TM16位微控制器及信号处理器芯片为内核的16位单片机,采用模块式集成结构,片内集成了2KB RAM、3
[单片机]
#51单片机#PWM
PWM,全称Pulse Width Modulation,译为脉冲宽度调制。 功能:改变脉冲宽度,实现不同效果。可用数字信号达到模拟信号的效果 PWM在单片机中应用广泛,不同的应用场合意义不尽相同。 先看一张图: 这是一个周期为10ms,频率为100Hz的波形。每个周期内的高低电平脉冲宽度各不相同,这就是PWM的本质。这里需要记住一个概念——占空比。占空比是指,高电平的时间在整个周期中所占的比例。比如第一部分波形的占空比是40%,第二部分是60%,第三部分是80%,这就是PWM的解释。 演示代码: #include reg52.h sbit PWMOUT = P0^0; unsigned char
[单片机]
#51<font color='red'>单片机</font>#PWM
51单片机多机通信电路图及C语言程序
多机通信电路图 此处,U1作为主机,U2为从机1,U3为从机2。 多机通信C语言程序 (1)主机程序 #include #include #define _SUCC_ 0x0f//数据传送成功 #define _ERR_ 0xf0//数据传送失败 unsigned charTable ={0x31,0x32,0x33,0x34,0x35,0x36,0x37,0x38,0x39}; unsigned char Buff ; //数据缓冲区 unsigned char temp=0xff; sbit KEY1=P1^6; sbit KEY2=P1^7; //unsigned char addr; //延时1ms函数 void de
[单片机]
51<font color='red'>单片机</font>多机通信电路图及C语言程序
51单片机--键盘识别
单片机的键盘由于介入了人为操作,并不都是机器按流程跑,所以必须考虑到人的操作时长远大于机器周期,所以对于键盘状态的检测必须是写在while中,进行循环检测,这些需要实时检测的状态是:从没有按下到按下,和从已经按下到松手。而为了可以使while中的循环可以跳出,进入while的判断语句中的变量要在while循环中再次赋值,而这个赋值必须是与新状态相关的。 P3=0xfe; temp=P3; temp=temp&0xf0; while(temp!=0xf0) { delay(5); temp=P3; temp=temp&0xf0; while(temp!=0xf0) { tem
[单片机]
汽车微控制器介绍
随着智能汽车的发展,用户对汽车的安全性、稳定性、智能化不断提出更新的要求。车载各项功能的实现都需要复杂的芯片组和算法的稳定支持,MCU将发挥更大的作用。 什么是汽车微控制器? 汽车微控制器又称MCU,是汽车电气控制系统的核心部件。MCU必须具备良好的高温性能和稳定性,才能控制车内所有电子系统,包括多媒体、音响、导航、悬架等。与普通MCU相比,汽车MCU对品质要求更高,在复杂环境下不易损坏汽车的。一般来说,最重要的是可靠性和温度范围,民用级为0-70℃,工业级为20-85℃,汽车级为40-85℃。 MCU将成为“汽车大脑”的重要组成部分,是汽车的智能大脑,发挥着“思考、计算、控制”的核心功能。随着汽车电子电气架构向集中式
[嵌入式]
小广播
添点儿料...
无论热点新闻、行业分析、技术干货……
设计资源 培训 开发板 精华推荐

最新单片机文章
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

换一换 更多 相关热搜器件
电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved