基于MCS51单片机定时误差分析及纠正

合集下载

MCS-51单片机串行通讯波特率设置的误差分析

MCS-51单片机串行通讯波特率设置的误差分析
范 围为小 于5 % ;当工作 在方式3 ,发送 帧位数为 I,波特率误 . 0 时 l 差 的允许 范围则 为4s . %。单片机 串行 u工作 在方 式l 和方式 3 下波 特率 的设置比较灵活 ,故在 MC 一 1 S 5 中单 片机的串行 通汛中通常采 用这 两种方式 ,但在 殴置波特率时应注 意是台在溟差允许范围内
丽s l 2  ̄ 十 l 南 a
L - 『 =,c + - J * x 譬
岫 ㈩ l
f O) 、l
山以上的误差推导可知 ,工作方 式【 l 和方式2 的波特率 误差与系 统晶振频率误差有关 ;而工作方式 l 和方式3 的波特率误差除 了与系 统 晶振频 率{差有关外 , 与定时 器T 1 ; { 还 H 的预置值 x 的 差有关。 系统 晶振一般在 出厂前要经过严格 的检测 ,其频率准确性比较高 , 误差可以忽略不 汁,故方式0 和方式 2 的误差可忽略。由于系统晶振
自 动重载方式 ),可 以避免通过程序反复装入 初值所 引起的定时 溟 差 ,使波特率更加稳定。设x H 的预置值 则 为T 1
方 l方 3波 率 . x}; 式和 式的 特 ,兰 一 ;
() 4
在实际应用 中,对 串行通 讯波特 率的精度有一定的要求 ,不能 超过 一定范围 。文献表明 :串行通 讯 中发送和接收双方的允许 溪差 与帧的位数有关 ,发送帧 的位数越 多 ,波特 率的精度要求就越高, 当串行口工作在方式 l ,发送帧 的位数 为l ,波特率误 差的允许 时 O
可根据给定的波特率和 系统 晶振频 率在不同的波特 率选择位情 况 综 上所述 ,串行接 口在不 同的 工作方式 下决定波特率的参数也 不同。单片机 各参数对波特率 误差影响 的程度 不同。在 通讯中,为 了避 免太多误码或数据丢失 的发生 , 须深入研 究各工作方式 下的 必 误差来源 只有在弄清 误差来源 的前提 下有的放 矢地 设置波特 率, 方可保证通讯 中误差小于规定的值 。

软件解决51单片机由中断延时引起的计时误差

软件解决51单片机由中断延时引起的计时误差

利用软件解决51单片机由中断延时引起的定时误差引言MCS-51单片机的中断响应延迟时间,取决于其它中断服务程序是否在进行,或取决于正在执行的是什么样的指令。

单中断系统中的中断响应时间为3~8个机器周期[1]。

无论是哪一种原因引起的误差,在精确定时的应用场合,必须考虑它们的影响,以确保精确的定时控制。

根据定时中断的不同应用情况,应选择不同的精确定时编程方法文中以定时器T1工作在定时方式1为例,晶振频率为12MHz 。

1 方法1在定时器溢出中断得到响应时,停止定时器计数,读出计数值(反映了中断响应的延迟时间),根据此计数值算出到下一次中断时,需多长时间,由此来重装载和启动定时器。

例如定时周期为1ms,则通常定时器重装载值为-1000(0FC18H)。

下面的程序在计算每个定时周期的精确重装载值时,考虑了由停止计数(CLR TR1)到重新启动计数(SETB TR1)之间的7个机器周期时间。

程序中#LOW(-1000+7)和#HIGH(-1000+7)是汇编符号,分别表示-1000+7=0FC1FH这个立即数的低位字节(1FH)和高位字节(0FCH)。

......CLR EA ;禁止所有中断CLR TR1 ;停止定时器T1MOV A,#LOW(-1000+7) ;期望数的低位字节ADD A,TL1 ;进行修正MOV TL1,A ;重装载低位字节MOV A,#HIGH(-1000+7) ;对高位字节处理ADDC A,TH1MOV TH1,ASETB TR1 ;重启动定时器SETB EA ;重开中断......适用范围:此方法适用于各种原因造成的定时误差的情况,为通用方法。

2 方法2假如定时周期为10ms,通常定时器重装载值为0D8F0H,中断子程序如下[2]:ORL TL1,#0F0HMOV TH1,#0D8H......适用范围:这里用ORL TL1,#0F0H代替MOV TL1,#0F0H 可提高定时精度。

单片机定时器的应用与误差纠正(精)

单片机定时器的应用与误差纠正(精)

单片机定时器的应用与误差纠正单片机定时器的应用与误差纠正王暄(陕西师范大学物理学与信息技术学院,陕西西安710062)摘要:对MCS-51单片机定时器的原理与使用中的几个关键问题进行了讨论,给出定时器的使用方法与误差补偿方法,并给出了实现程序。

1前言定时器是MCS-51单片机非常重要的组成部分,由于其应用与单片机的其他硬件相关,存在着一定的复杂性[1]。

而定时器是单片机应用中解决某类复杂问题的最有为效的方法,应用非常广泛。

随着定时要求的提高,在定时处理过程中所带来的误差需要校正[2],本文就MCS-51单片机的使用方法与误差校正方法进行了讨论,并给出通用算法与程序。

2定时器工作方式与方式设置MCS-51单片机有两路独立的定时器,每路定时器有4种工作方式(0~3),方式0是13位计数结构,计数器由TH全部8位与TL的低5位构成;方式1是16位计数结构,计数器由TH与TL全部8位共16位组成;方式2是8位计数结构方式,计数器由TL8位组成,与其他方式不同的是,当定时溢出时,硬件自动将TH的值装入TL中,有自动加载功能。

前三种工作方式,两路定时器的设置与使用完全相同,但在工作方式3下,两路定时器有很大差别,只有0路定时器可以工作在方式3下,1路定时器只能工作在方式0~2下,在工作方式3下,0路定时器被拆分成两个独立的8位计数器TL0与TH1,其中0路定时器的各控制位和引脚信号全归TL0使用,因此TH0只能做简单的定时器使用,其控制位占用了1路定时器的控制位,如果0路定时器工作在方式3下,1路定时器由于让出了所属控制位,通常作为串行口波特率发生器[3]。

定时器的工作方式选择主要依靠设置TMOD寄存器的值,其各位定义如下:位序 B7 B6 B5 B4 B3 B2 B1 B0 位符号 GATE C/T M1 M0 GATE C/T M1 M0其中,B0~B3用来控制0路定时器,B4~B7用来控制1路定时器。

单片机定时器中断时间误差的分析及补偿(精)

单片机定时器中断时间误差的分析及补偿(精)

单片机定时器中断时间误差的分析及补偿作者冰晓日期 2009-1-8 8:09:00推荐摘要:本文分析了单片机定时器溢出中断与CPU响应中断的时间误差,并给出了补偿误差的方法和实例。

关键词:单片机; 定时器; 中断; 误差1前言单片机内部一般有若干个定时器。

如8051单片机内部有定时器0和定时器1。

在定时器计数溢出时,便向CPU发出中断请求。

当CPU正在执行某指令或某中断服务程序时,它响应定时器溢出中断往往延迟一段时间。

这种延时虽对单片机低频控制系统影响甚微,但对单片机高频控制系统的实时控制精度却有较大的影响,有时还可能造成控制事故。

为扩大单片机的应用范围,本文介绍它的定时器溢出中断与CPU响应中断的时间误差、补偿误差的方法和实例。

2误差原因、大小及特点产生单片机定时器溢出中断与CPU响应中断的时间误差有两个原因。

一是定时器溢出中断信号时,CPU正在执行某指令;二是定时器溢出中断信号时,CPU正在执行某中断服务程序。

2.1.CPU正在执行某指令时的误差及大小由于CPU正在执行某指令,因此它不能及时响应定时器的溢出中断。

当CPU执行此指令后再响应中断所延迟的最长时间为该指令的指令周期,即误差的最大值为执行该指令所需的时间。

由于各指令都有对应的指令周期,因此这种误差将因CPU正在执行指令的不同而不同。

如定时器溢出中断时,CPU正在执行指令MOVA,Rn,其最大误差为1个机器周期。

而执行指令MOVRn, 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.2CPU正在执行某中断服务的程序时的误差及大小定时器溢出中断信号时,若CPU正在执行同级或高优先级中断服务程序,则它仍需继续执行这些程序,不能及时响应定时器的溢出中断请求,其延迟时间由中断转移指令周期T1、中断服务程序执行时间T2、中断返回指令的指令周期T3及中断返回原断点后执行下一条指令周期T4(如乘法指令)组成。

浅谈MCS 51单片机定时误差原因

浅谈MCS 51单片机定时误差原因

智能制造数码世界 P .275浅谈MCS 51 单片机定时误差原因谢琪林 攀枝花学院摘要:随着MCS 51 单片机在工业上的实际应用,精确定时的要求越来越高。

但是由于时钟周期考虑不全和硬件自身等的原因引起定时误差,文中从软硬方面分析了误差原因, 并针对误差非固定性的特点合理考虑各种指令执行周期、设置计数器初值、利用计数器溢出值、适时开关中断的角度出发给出了纠正方法。

关键词:单片机;误差;定时在MCS 51 单片机的控制系统中, 常常要求有些定时或者延时控制。

定时或者延时控制一般有如下2 种方法: 软件延时,即让CPU 循环执行一段时间, 以实现延时和硬件定时, 即利用MCS 51 系列单片机硬件集成的2 个16 位可编程定时/计数器。

但采用上述这两种方法来实现时间控制时却容易产生误差, 对于一般低频率的应用中对时间控制精度要求低的场合来说没有太大的问题, 而在高频实时控制应用中对时间控制精度要求高的场合来讲问题就凸现出来, 必须加以纠正和补偿。

1 软件延时误差的产生及纠正软件延时原理: 利用CPU 内部定时机构, 使每执行一条指令需要若干个指令周期的原理, 运用软件编程, 让机器循环执行一段程序, 而得到一个固定的时间段, 就将这段时间作为定时时间。

软件定时的时间长短完全取决于指令的执行时间, 此方法主要用于短时间定时。

例, 采用软件方法设置一个502μs 的定时时间, 设晶体振荡频率为12MHz。

可编制如下的子程序段用于软件定时。

DELAY : MOV R2, #64H ; 1 个时钟周期DL1: NOP ; 1 个时钟周期NOP ;DJNZ R2, DL1 ; 2 个时钟周期RET ; 1 个时钟周期在该程序段中, 采用减1 指令计数, 计数初值100( 64H) 预先设置在寄存器R2 中, 各指令的执行时间如程序段中的注释所示。

软件定时的时间可由各指令的执行时间以及循环次数100( 64H) 所确定, 计算如下:1μs+(1μs+1μs+1μs +2μs)×100+1μs=502μs但在很多情况下, 只考虑了循环体的执行时间, 没有考虑本例中的MOV 、RET 指令, 即在设计延时500μs 时也采用了本程序, 这样就有一个误差, 误差率是0.4%, 这个误差非常大。

嵌入式智能控制系统中的误差分析和校正研究

嵌入式智能控制系统中的误差分析和校正研究

嵌入式智能控制系统中的误差分析和校正研究随着科技的高速发展,人们对于计算机和控制技术的应用越来越广泛和深入,嵌入式智能控制系统成为了现代工业生产和科研的必备工具。

然而,这些系统在实际应用中难免会因为外部环境的干扰和内部组件的耗损等原因发生一定程度的误差,如何对这些误差进行分析和校正,以提高系统的精度和可靠性,成为了当前嵌入式智能控制领域的研究热点之一。

一、误差分析的基本概念对于嵌入式智能控制系统而言,误差分析是指通过对系统的输入和输出数据进行分析,得出系统的误差来源和误差大小等信息的过程。

在实际应用中,误差分析可以对控制系统的性能进行评估和改进,同时也是校正误差的重要基础。

误差分析主要包括以下几个方面:1、量测误差分析:量测误差是指由于检测器、传感器等量测设备本身的精度限制或环境因素干扰所产生的误差。

对于嵌入式智能控制系统而言,量测误差是影响系统精度的一个主要因素,因此必须认真进行分析和消除。

2、处理误差分析:处理误差是指由于系统软硬件部件的响应速度、算法精度等方面的限制所引起的误差。

在误差分析中,处理误差通常是难以避免的,但可以通过合理的系统设计和参数优化等方式来减小误差的影响。

3、噪声误差分析:噪声误差是指由于外部环境噪声、电磁干扰等对控制信号和数据的干扰所引起的误差。

在实际应用中,噪声误差也是影响系统稳定性和精度的一个主要因素,需要进行有效的分析和抑制。

二、误差校正的方法误差校正是指通过对误差进行定位和量化,采取相应的校正措施,使得控制系统的精度得到进一步提高和稳定。

基于误差分析得到的信息,通常有以下几种误差校正方法:1、传感器校正:传感器是控制系统中常见的量测设备,其精度的高低直接影响系统的控制精度。

因此,在系统运行前或者运行中,需要对传感器进行定期的校准和检验。

传感器校准的方法包括零点校准、满量程校准和非线性校准等。

2、系统参数校正:系统参数校正是指对于嵌入式智能控制系统中涉及到的关键参数进行校正,如调节增益、滤波器带宽、控制周期等。

51单片机定时器实验内容

51单片机定时器实验内容

51单片机定时器实验内容
51单片机定时器实验的内容可以根据不同的需求和目的进行调整,以下是
一些可能的实验内容:
1. 定时器初始化实验:实验目标是了解如何初始化51单片机的定时器,包括设置定时器的工作模式、计数值、初始值等。

实验中可以编写代码,让定时器在初始化后自动开始计时,并在达到指定时间后产生中断或输出信号。

2. 定时器中断实验:实验目标是了解如何使用51单片机的定时器中断功能,实现定时器在达到指定时间后自动触发中断,并在中断服务程序中执行特定的操作。

实验中可以编写代码,让定时器在达到指定时间后自动进入中断服务程序,并在其中执行特定的操作,如点亮LED灯等。

3. 定时器PWM输出实验:实验目标是了解如何使用51单片机的定时器PWM输出功能,实现定时器输出PWM波形。

实验中可以编写代码,让定时器输出不同占空比的PWM波形,并通过调整占空比来控制LED灯的亮
度等。

4. 定时器与外部事件同步实验:实验目标是了解如何使用51单片机的定时器与外部事件同步,实现定时器在外部事件发生时自动开始计时或停止计时。

实验中可以编写代码,让定时器在外部事件发生时自动开始计时或停止计时,并在达到指定时间后执行特定的操作。

以上是一些常见的51单片机定时器实验内容,通过这些实验可以深入了解51单片机的定时器工作原理和用法,并提高编程技能和硬件控制能力。

基于51单片机的多功能电子时钟时间校对功能的设计

基于51单片机的多功能电子时钟时间校对功能的设计
行点对点的通信 。红外遥控 技术利 用波长 为 0.76um一1.5um之间 的 近红外线来传递控制信号 ,它具备 以下特点 :①对环境 的影响很小 。② 有很强的保密性和隐蔽性。③有很好 的中远距离操控能力 ,便于各个方 面 的使用 。④红外线遥控设备结构 简单 、易 于制作 、造价低廉 、抗干扰 能力强 、可靠性高。⑤工作电压低 ,功耗小 ,外 围电路简单等优 点,也 使其广泛应用于 日常生活中。
王 红
摘 要 :单片机开发板 主要 由 STC89C52RC单 片机 、DS1302时钟芯片 、LCD1602字符液晶显示器等部件 构成 。本文主要研 究了单 片机 对 DS1302的 读 写操 作 以及 对 1602液 晶 的控 制 。 最 终 , 可 实现 4 x4矩 阵按 键 和 红 外 两 种 方 式 实现 时 间 和 日期 的调 整 。
做一个 系统设计 ,假如需 要多个按 键就会 占用 大量 10口,就要用 到矩 阵按键 。在独立按键 中需要掌握如何编写一个独立按键 的程序 。
(三 ) 按 键 消 抖 通常按键所用 的开关都 是机械 弹性开关 ,当机械触 电断开 闭合 时, 由于机械触点 的弹性作用 ,一个按 键 开关在 闭合 时不 会马 上就稳 定接 通 ,此时就会引起一 连 串的抖动 。抖 动 时间是 由按 键 的机械 特性 决定 的 ,一般会在 lOr es以内。为了确保程 序对按键 的一次 闭合或者 一次断 开只响应一次 ,必须进行按键 的消抖处理 。 按键消抖可分为硬件消抖和软件消抖 。硬件消抖是在按 键上并联一 个 电容 。利用 电容 的充放 电特性对抖动过程 中产生 的电压 毛刺进行平滑 处 理 .但 这 种 方 式 在 实 际 应 用 中增 加 了 成 本 和 电路 复 杂 度 ,所 以 当 检 测 到按键状态变化后 ,先等待 10ms左 右的延时 时间 ,让 抖动消失 后再进 行一次按键状态检测 ,如果与刚才测试到的状态相 同,就可 以确认按键 已经稳定动作 了,利用 肖抖程序 消抖 。所 以本 文 采用 了软件 消抖 的方 法 。 当 CPU检 测 到按 键 状 态 发 生 变 化 后 ,延 时 lOres后 再 对 改 按 键 状 态

定时器时间误差的消除方法

定时器时间误差的消除方法

定时器时间误差的消除方法
定时器作为各种系统和程序控制的关键,在计算机、机器控制中起着重要的作用。

但是由于定时器本身的误差特性,很容易导致它记录的时间和实际时间不符,而这种误差可能会影响系统的性能和安全性。

因此,有必要研究定时器时间误差消除方法,以提高系统和程序控制的性能。

定时器时间误差消除方法主要分为两种:设计上的改进和调试上的改进。

首先是设计上的改进,主要体现在定时器硬件和软件设计上,以消除定时器误差的影响。

在硬件设计上,可以采用更精确的时钟源,例如采用定时器的外部时钟输入,以提高定时器的稳定性;另外可以采用多级定时器设计,以提高定时器的精度;此外,可以采用多种定时器,如分中断定时器、软件定时器等,以增加定时器的功能。

在软件设计上,主要是通过调整定时器的初始计数值,以减少定时器的误差。

这种技术叫做定时器矫正技术,它的基本原理是,定时器在计数值到达指定值时发出中断,计算机在收到中断信号后,把定时器的实际计数值和指定的计数值比较,判断定时器的误差值,然后由系统软件根据误差值调整下一次定时器的实际计数值,从而消除定时器时间误差。

另外还有一种调试上的改进方法,就是通过定时器模拟软件调试工具,以调节定时器的误差,像定时器模拟器、定时器校准仪等模拟设备可以用来检测定时器的误差,并且可以用来调节定时器的精度,
以消除定时器时间误差。

通过以上讨论,可以总结出定时器时间误差消除方法主要可以分为设计上的改进和调试上的改进。

因此,为了提高定时器的精度,消除定时器时间误差,应在定时器硬件和软件设计上作出相应的改进,并使用定时器模拟软件调试工具,以便在调试过程中准确消除定时器误差。

以上讨论的内容,可以为改善定时器时间误差提供参考和借鉴。

单片机定时器中断时间误差的分析及补偿

单片机定时器中断时间误差的分析及补偿

关 键 词 : 片 机 ; 时 器 ; 断 ; 差 单 定 中 误 中 图 分 类 号 : P 9 . T 3 17 文献标 识码 : A
A na y e n o p ns tng o i e e r l s s a d c m e a i ftm r orSCM i e n e r r tm ri r o
文 章编号 :0 (—9 3 ( 0 2)3—0 8 103 8 3 2 0 0 0 5—0 2
单 片 机 定 时 器 中 断 时 间 误 差 的分 析 及 补 偿
岳 伟 彬 ,张 元 瞍2 ,韦德 成3
( . 国民航黑 龙 江管理 局 设 备动力 部 , 1中 哈尔 滨
公司, 龙江 阿城 黑 100 5 3 0)
单 片 机 内部 一 般 有 若 干 个 定 时 器 。 如 8 5 0 1单 片 机 内部 有 定 时 器 0和定 时 器 1 。在 定 时 器 计 数 溢 出时 , 向 C U 发 出 中 断 请 求 。 当 C U 正 在 执 行 便 P P 某 指 令 或 某 中 断 服 务 程 序 时 , 响 应 定 时 器 溢 出 中 它 断 往 往 延 迟 一 段 时 间 。这 种 延 时 虽 对 单 片机 低频 控 制 系 统 影 响 甚 微 , 对 单 片 机 高 频 控 制 系 统 的 实 时 但 控 制 精 度 却 有 较 大 的 影 响 , 时 还 可 能 造 成 控 制 事 有 故 。为 扩 大 单 片 机 的 应 用 范 围 , 文 分 析 了 定 时 器 本 溢 出 中 断与 CP 响 应 中 断 的 时 间误 差 、 U 补偿 误 差 并 给 出 了实 例 。
1 0 7 ;2 哈 尔滨 市交 通局 附加 费办公室 , 50 9 . 黑龙 江 哈尔滨

mcs_51单片机定时器的应用与误差纠正

mcs_51单片机定时器的应用与误差纠正

中断方式处理程序如下:
or9
0000BH
UMP bl
bl: CLR EA
MOV TL0.拍11
MOV TH0.缃12
定时处理语句段 reti 其中,0路定时器为000B,如果为l路定时器为OOIB。如 果定时器工作在方式2,则不需要给1"I-10、1"1-11重新赋值。 查询方式处理程序如下: L1:JBC TF0.L01 SJMP L1 L01:MOV TL0.撑n1 MOV THO.#n2 定时处理语句段 SJMP L1
1定时器工作方式与方式设置 MCS一51单片机有两路独立的定时器,每路定时器有4种
工作方式(o一3):方式0是13位计数结构,计数器由TH全部8 位与TL的低5位构成;方式l是16位计数结构,计数器由TH 与TL各8位共16位组成;方式2是8位计数结构方式,计数 器由TL的8位组成,与其它方式不同的是,当定时溢出时,硬 件自动将TH的值装入TL中,有自动加载功能。前三种工作方 式,两路定时器的设置与使用完全相同,但在工作方式3下,两 路定时器有很大差别,只有0路定时器可以工作在方式3下,l 路定时器只能工作在方式0-2下。在工作方式3下,0路定时器 被拆分成两个独立的8位计数器TL0与TH0,其中0路定时器 的各控制位和引脚信号全归TL0使用,因此TH0只能做简单 的定时器使用,其控制位占用了1路定时器的控制位。如果0 路定时器工作在方式3下,l路定时器由于让出了所属控制位, 通常作为串行口波特率发生器131。
MOV TL0.A
MOV A.#n2
SUBB MOV
A,THO TH0.A
SETB TR0 定时处理语句段
RETI
由于从指令CLR TR0(停止计数)执行到指令SETB TRO

探讨采用单片机通讯时信息差错的自检与校正

探讨采用单片机通讯时信息差错的自检与校正

探讨采用单片机通讯时信息差错的自检与校正【摘要】MCS-51单片机为用户提供了一个全双工的串行接口,可以应用于各种情况的串行数据传送。

尤以使用异步串行通讯更为普遍。

异步串行通讯虽然速度较慢,但是经济实用,传送和接收又不需要严格保持同步,因此,异步串行通讯现已大量地应用于计算机接口技术之中。

【关键词】单片机;串行通讯;检验;纠错引言在控制工程和其他应用电子系统中,单片机得到了广泛应用,它为用户提供了一个全双工的串行接口,尤以异步串行通讯更占优势,虽然异步串行通讯速度较慢,由于在数据的发送和接收过程中不需要保持严格同步,现已大量地应用于计算机接口技术之中。

但是,异步串行通讯由于距离长,以及单片机在电气、结构、环境及干扰等方面的原因,常会使传送的数码信息发生差错,要保证单片机系统的正确、可靠,必须对这些传送的数码信息进行自动的检错与纠错。

我们常用的通讯一般是串口,常用的串口通讯有三种,一种是TTL,一种是232,一种是485,这三个是用得最多的,其他的通讯五花八门,基本那些大公司,像飞利浦,三菱,都有自己的一套,而且还是不透明的,使用他们的还得交费用。

TTL和232是电平编码,TTL的1就是5V,0就是0V,而232电平1是负电压,0是正电压。

串口上每次只能发送一位数据,一个字节有八位,一般发送还有起始位和结束位,还可以选择校验位,我们只要把数据一位一位的送到总线上就可以了,一位的数据要在总线上保持多长时间,这个就是波特率控制了。

接收方按相同的波特率,就可以收到相同数据了。

这个就是一帧数据。

1海明校验原理这是由Richard Hamming于1950年提出、目前还被广泛采用的一种很有效的校验方法,是只要增加少数几个校验位,就能检测出二位同时出错、亦能检测出一位出错并能自动恢复该出错位的正确值的有效手段,后者被称为自动纠错。

它的实现原理,是在k个数据位之外加上r个校验位,从而形成一个k+r位的新的码字,使新的码字的码距比较均匀地拉大。

51单片机内部时钟误差

51单片机内部时钟误差

51单片机内部时钟误差
(实用版)
目录
1.51 单片机内部时钟概述
2.误差原因分析
3.解决方法
4.总结
正文
【51 单片机内部时钟概述】
51 单片机是一种常见的微控制器,广泛应用于各种嵌入式系统中。

它内部有一个高增益的反相放大器,构成了振荡电路和时钟电路。

51 单片机的时钟精度误差问题是一个常见的问题,会影响到基于该单片机的电子时钟和定时控制系统的准确性。

【误差原因分析】
51 单片机内部时钟误差的主要原因有以下几点:
1.晶振频率误差:51 单片机的内部时钟是通过外部晶振的频率经过12 分频后提供的,晶振频率的精确度直接影响电子钟计时的准确性。

2.中断处理时间:51 单片机的定时中断是通过内部定时计数器溢出产生的,但是从中断请求到响应中断,需要 38 个机器周期。

这会导致电子时钟计时的不准。

【解决方法】
针对上述的误差原因,可以采取以下解决方法:
1.采用高精度晶振:虽然高精度晶振可以稍微提高电子钟计时的精确度,但是晶振并不是导致电子钟计时不准的主要因素,而且高精度的晶振
价格较高,所以不必采用此方案。

2.动态同步修正:在程序中,采用动态同步修正方法给定时计数器赋初值。

动态同步修正方法如下:由于定时计数器溢出后,又会从 0 开始自动加数,故在给定时计数器再次赋值前,先将定时计数器低位(TLO)中的值和初始值相加,然后送入定时计数器中,此时定时计数器的值才是准确的。

【总结】
虽然 51 单片机的内部时钟存在误差,但是通过采用动态同步修正方法,可以有效地提高电子时钟的精度。

基于误差优化的单片机程序设计研究

基于误差优化的单片机程序设计研究

基于误差优化的单片机程序设计研究随着物联网、智能家居等技术的发展,单片机在嵌入式系统中的应用越来越广泛。

而在单片机程序设计中,误差优化是一项非常重要的工作。

下面我们来探讨一下基于误差优化的单片机程序设计研究。

一、误差优化的概念误差优化,就是通过调整参数,使得系统的误差最小化的过程。

在单片机程序设计中,误差通常指的是系统输出与期望输出之间的差值。

优化这个误差,可以使得系统的输出更接近期望值,从而提高系统的性能。

二、误差优化的方法在单片机程序设计中,误差优化有多种方法。

下面我们介绍一些常用的方法。

1. PID控制PID控制是一种经典的误差优化方法。

PID控制器包括比例控制部分、积分控制部分和微分控制部分。

通过调节这三个控制部分的系数,可以使得PID控制器的输出更加接近期望值。

2. 神经网络神经网络是一种模仿人脑运算过程的算法。

在单片机程序设计中,可以利用神经网络来优化误差。

神经网络可以通过学习输入和输出之间的映射关系,从而使得系统误差最小化。

3. 遗传算法遗传算法是一种求解最优解的方法。

在单片机程序设计中,可以使用遗传算法来优化误差。

遗传算法通过模拟自然界中的进化过程,不断改进求解过程,最终获得最优解。

三、误差优化在单片机程序中的应用在单片机程序设计中,误差优化非常重要。

下面我们介绍一些误差优化在单片机程序中的应用。

1. 温度控制温度控制是单片机程序设计中常见的应用之一。

通过优化误差,可以使得温度控制更加准确。

具体来说,可以利用PID控制器来控制温度,调整PID控制器的系数,使得温度误差最小化。

2. 机器人控制机器人控制是单片机程序设计中的另一个重要应用。

通过优化误差,可以使得机器人的运动更加准确、稳定。

具体来说,可以利用神经网络来优化机器人的姿态控制,或者利用遗传算法来优化机器人的路径规划。

3. 智能家居智能家居是单片机程序设计中的一个新兴应用。

通过优化误差,可以使得智能家居系统更加智能。

具体来说,可以利用神经网络来优化环境控制,或者利用遗传算法来优化电力管理等。

关于51单片机电子时钟精度的问题

关于51单片机电子时钟精度的问题

关于51单片机电子时钟精度的问题前几天用STC89C52 单片机制作了一个电子时钟,经过一段时间的实验,发现时间精度存在误差,一分钟慢4 秒左右。

这可了不得,十分钟就要慢40秒,一天下来不得慢半96 分钟!!!这个单片机晶振频率为11.0592mhz,和大部分时钟的晶振频率相同,应该没有问题。

后天考虑到源代码:在定时器中断函数里:void t0(void) interrupt 1 using 0 {tcount++;if(tcount==4000){tcount=0;second++;if(second==60){second=0;minute+ +;if(minute==60){minute=0;hour++;if(hour==24){hour=0;}}}P1=~P1;}}interrupt后面的数字简单的说就是中断服务函数的代号0 代表外中断01 代表定时计数器0 中断2 代表外中断13 代表定时计数器1 中断4 代表串行口中断所以interrupt 1 代表定时计数器产生中断后就转到这个函数里面执行。

代码其实还挺简单,每中断4000 下将产生1 秒。

等等...每4000 下的中断为1 秒,那么原因很有可能在这里。

试着将tcount==3600,和秒表对比发现竟然每一分钟快了1 秒左右。

bingo!问题的确出在tcount 的取值上面,将tcount 的数值改为3700,和秒表对比发现,秒数没有误差,有误差的应该就是毫秒级吧。

void t0(void) interrupt 1 using 0 {tcount++;if(tcount==3700){tcount=0;second++;if(second==60){second=0;minute+ +;if(minute==60){minute=0;hour++;if(hour==24){hour=0;}}}P1=~P1;}}这样就解。

MCS-51软件消除定时中断误差

MCS-51软件消除定时中断误差

MCS-51软件消除定时中断误差单片机内部一般有若干个定时器,如8051单片机内部有T0和T1两个16位定时器。

每个定时器都是由两个8位的特殊功能寄存器THi和TLi组成,因此,T0和T1都可以通过字节传送指令为它们赋初值,以获得不同定时时间所需要的计数值。

T0和T1在初始值的基础上,每隔12个时钟周期(一个机器周期),作一次加1运算,当计数器从全1变为全0时自动产生定时器溢出中断请求。

MCS-51 每个定时器有4种工作方式:方式0是13位计数结构,计数器由THi的8位与TLi的低5位构成;方式1是16位计数结构,计数器由THi的8位与TLi的8位组成;方式2是8 位计数结构,计数器由TLi的8位组成,当定时器溢时,THi的值能自动装入TLi 中,并在此值基础上自动计数,这与其它的方式不同;在方式3下,也是8位的计数器,并且T0的各控制位和引脚归TL0使用,TH0借用T1 的各控制位和引脚信号,T1只能按不需要中断的方式2工作。

定时器的溢出率在不同的工作方式下不同:工作在方式0时:溢出率=fosc/(12*(213-Z+NR))Z为定时器初值,NR为定时器溢出恢复初值的周期数。

恢复初值周期数为从定时器溢出到定时器初值重新装入的时间。

该段时间和CPU响应中断以及程序中何时重新装入初值有关。

工作在方式1时:溢出率=fosc/(12*(216-Z+NR))方式1为16位计数器其初值由THi和TLi中的数值确定。

工作在方式2时:溢出率=fosc/(12*(28-Z))由于方式2为自动恢复初值的8位计数器,初值由THi确定;由于方式2是自动重装初值,所以NR=0即不存在重装初值的延时。

特殊功能寄存器TMOD 控制定时寄存器的工作方式,TCON 则用于控制定时器T0 和T1 的启动和停止计数,同时管理定时器T0和T1的溢出标志等。

当设置了定时器的工作方式并启动定时器后,定时器就按照被设定的工作方式工作,不需要CPU的干预。

基于MCS 51单片机定时误差分析及纠正

基于MCS 51单片机定时误差分析及纠正

基于MCS 51单片机定时误差分析及纠正
杨洪亮
【期刊名称】《福建电脑》
【年(卷),期】2006(000)012
【摘要】随着MCS 51单片机在工业上的实际应用,精确定时的要求越来越高.但是由于时钟周期考虑不全和硬件自身等的原因引起定时误差,文中从软硬方面分析了误差原因,并针对误差非固定性的特点合理考虑各种指令执行周期、设置计数器初值、利用计数器溢出值、适时开关中断的角度出发给出了纠正方法.
【总页数】2页(P145-146)
【作者】杨洪亮
【作者单位】临沂师范学院信息学院,山东,临沂,276005
【正文语种】中文
【中图分类】TP3
【相关文献】
1.MCS—51单片机与MC6840可编程定时器PTM的接口设计 [J], 吴保芳
2.基于MCS-51单片机的数字式定时器设计 [J], 关智泳
3.基于MCS-51单片机定时精确控制的研究 [J], 朱蓉;郑建华
4.基于MCS-51单片机的多点定时器设计 [J], 董军堂;邵婷婷;常艳玲
5.MCS_51单片机定时器的应用与误差纠正 [J], 冯川放
因版权原因,仅展示原文概要,查看原文内容请购买。

单片机定时器中断时间误差的分析及补偿

单片机定时器中断时间误差的分析及补偿

单片机定时器中断时间误差的分析及补偿单片机内部一般有若干个定时器。

如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(如乘法指令)组成。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

时, 针对不同情况应采用灵活的修正方法同时也应注意一些事
MOV POP POP RETI
TL0, # 9BH ; (2 TS) PSW ACC
项, 例如不能采用定时器工作模式 2 自动重装初值的方式,否则 误 差 会 更 大 ,并 且 得 不 到 控 制 。另 外 硬 件 方 面 的 因 素 也 应 值 得 注 意,比 如 应 考 虑 晶 体 自 身 的 精 度 、晶 体 的 频 率 漂 移 误 差 , 尽 量 选 用振荡频率高的时钟以减少误差。
ΔTMAX1=12/FOSC×CI=12/(12×106)×4=4×10- 6(s)=4(μs) 2. 3 CPU 正在执行某中断服务程序时的误差
定时器溢出中断信号时, 若 CPU 正在执行同级或高优先级 中断服务程序,则它仍需继续执行这些程序,不能及时响应定时 器的溢出中断请求,其延迟时间由中断转移指令周期 T1、中断服 务程序执行时间 T2、中断返回指令的指令周期 T3 及中断返回 原断点后执行下一条指令周期 T4 (如乘法指令)组成。中断转移 指令和中断返回指令的指令周期都分别为 2 个机器周期。中断 服务程序的执行时间为该程序所含指令的指令周期的总和。因
进入服务程序时关中断, 并且从前面的分析也可知, 定时器到下
X1=216- T3×FOSC/12 T3=T0+T1+T2 式中 T0 为中断间隔时间, T1 为定时器停止计数时间,该时间为定 时器停止计数到重新启动计数之间所有程序指令周期数的总
一次装初值前的一刻其计数值应为各种累积误差值, 因此利用 此计数值来修正下一次计数初值, 以达到提高精度的目的。可编 写如下程序:
但在很多情况下, 只考虑了循环体的执行时间, 没有考虑本
例中的 MOV、RET 指令, 即在设计延时 500μs 时也采用了本程
序, 这样就有一个误差, 误差率是 0.4%, 这个误差非常 大 。 另 外
在使用软件定时过程中, 程序也容易被其他程序或事件打断( 如
中断服务程序) , 这样也会引起来较大的定时误差, 因此必须防
止程序被其他程序或事件打断。同时, 这种以 牺 牲 CPU 的 时 间
获取延时的方法随 CPU 工作频率不同而发生变化 , 即 定 时 程 序
的通用性差。
2. 硬件定时误差的产生及纠正
硬 件 定 时 原 理 就 是 利 用 51 单 片 机 片 内 二 个 16 位 定 时 器/
计数器,即定时器 T0 和定时器 T1, 设置为定时工作方式,定时器
定时的时间,也为中断的间隔时间。X0 为定时器原计数初值。在 能及时响应定时器的溢出中断请求。显然发生这种情况时前面
对定时器溢出中断与 CPU 响应中断时间误差进行补偿时, 定时 所 给 出 的 误 差 消 除 方 法 均 不 能 起 到 有 效 的 作 用, 故 可 以 采 用 在
器的新计数初值 X1 为:
在 该 程 序 段 中 , 采 用 减 1 指 令 计 数 , 计 数 初 值 100( 64H) 预
先设置在寄存器 R2 中, 各指令的执行时间如程序段中的注释所
示。软件定时的时间可由各指令 的 执 行 时 间 以 及 循 环 次 数 100
( 64H) 所确定, 计算如下:
1μs+(1μs+1μs+1μs +2μs)×100+1μs=502μs
低8位 8位
ADD A , TL0 ; 进行修正 MOV TL0, A ; 重装载低位字节 MOV A , #HIGH(216- 100+7); 对高位字节处理,HIGH 表示取该数的高
序: ; (进入) Enter Interrup t ORG 000Bh LJMP INT; INT: PUSH ACC ;
【关键词】: 单片机; 误差; 定时
在 MCS 51 单 片 机 的 控 制 系 统 中, 常 常 要 求 有 些 定 时 或 者
延时控制。定时或者延时控制一般有如下 2 种方法: 软件延时,
即让 CPU 循环执行一段时间, 以实现延时和硬件定时, 即利用
MCS 51 系列单片机硬 件 集 成 的 2 个 16 位 可 编 程 定 时/计 数 器 。
ORG 000Bh
LJMP INT

INT:CLR EA ; 禁止所有中断
CLR TR0 ; 停止定时器 T0
MOV A , #LOW(216- 100+7) ; 期望数的低位字节,LOW 表示取该数的
时 100μs, 则装入时间常数理论计算如下: N = 65535- 100=65435, 则 TH0=0FFH TL0=9BH 当 T0 产生中断后, 首先进入中 断 入 口 000BH, 执 行 以 下 程
2006 年第 12 期
福建电脑
145
基于 MCS 51 单片机定时误差分析及纠正
杨洪亮
( 临沂师范学院信息学院 山东 临沂 276005)
【摘 要】: 随着 MCS 51 单片机在工业上的实际应用,精确定时的要求越来越高。但是由于时钟周期考虑不全和硬件自 身等的原因引起定时误差,文中从软硬方面分析了误差 原 因 , 并 针 对 误 差 非 固 定 性 的 特 点 合 理 考 虑 各 种 指 令 执 行 周 期 、设 置 计 数 器 初 值 、利 用 计 数 器 溢 出 值 、适 时 开 关 中 断 的 角 度 出 发 给 出 了 纠 正 方 法 。
但采用上述这两种方法来实现时间控制时却容易产生误差, 对
于一般低频率的应用中对时间控制精度要求低的场合来说没有
太大的问题, 而在高频实时控制应用中对时间控制精度要求高
的场合来讲问题就凸现出来, 必须加以纠正和补偿。另外, 还有
一些硬件方面的因素, 如晶体自身的精度、晶体的频率漂移误差
也会引起定时误差, 也必须加以纠正。
; (3~5 TS)
(2 TS) (2 TS)
ADDC A , TH0 MOV TH0, A SETB TR0 ; 重启动定时器 SETB EA ; 重开中断 RETI
结束语
PUSH PSW ; (2 TS)
使用上述的各种修正方法后基本能得到一个比较精确额定
MOV TH0, # 0FFH ; (2 TS)
由以上程序可以看出, 当定时器 T0 每一次中断后, 在完成语句:
MOV TH0, #0FFH MOV TL0, #9BH
参考文献: 1. 李 华, 孙 晓 明, 李 红 青 等.MCS 51 系 列 单 片 机 实 用 接 口 技 术 [M ].北
从重新装入时间常数开始计时起, 产生的时间延迟最少为: 京: 北京航空航天大学出版社, 2003
计数 8051 片内振荡器输出经 12 分 频 后 的 脉 冲, 即 每 个 机 器 周
期使定时器的数值加 1 直至计满溢出, 然后中断 CPU 的当前操
作, 执行相应的中断服务程序。但在这个过程中很容易产生单片
机定时器溢出中断的时间误差, 产生时间误差有三个原因: 一是
中断响应时间; 二是定时 器 溢 出 中 断 信 号 时, CPU 正 在 执 行 某
中断响应的一个前提是当前指令执行完毕, 若定时器的溢 出中断时, CPU 正在执行某指令,因此它不能及时响应。当 CPU 执行此指令后再响应中断所延迟的最长时间为该指令的指令周
期 ,即 误 差 的 最 大 值 为 执 行 该 指 令 所 需 的 时 间 。由 于 各 指 令 都 有 对应的指令周期, 因此这种误差将因 CPU 正在执行指令的不同 而不同。在 8051 单片机指令系统中,多数指令的指令周期为 1~2 个机器周期,因此最大时间误差一般为 1~2 个机器周期。若振荡 器 振 荡 频 率 为 FOSC , CPU 正 在 执 行 指 令 的 机 器 周 期 数 为 CI , 则 最 大 时 间 误 差 为 ΔTMAX1=12/FOSC×CI (us)。 例 如 FOSC = 12MHZ , CPU 正在执行乘法指令 (CI=4) , 此时的最大时间误差 为:
指令;三是定时器溢出中断信。
2.1 中断响应时间的误差 MCS 51 单片机的最短中断响应时间为 3 个机器周期, 其中
中断请求标志位查询占 1 个机器周期, 而这个机器周期又恰好 是执行指令的最后一个机器周期,在这个机器周期结束后,中断 即被响应,产生 LCALL 指令,而执行这条长调指令需要 2 个机器 周期, 这样中断响应共经历了 3 个机器周期。而在这些时间中定 时器继续从 0 开始计数,因此产生了 3 个机器周期的误差。 2. 2 CPU 正在执行某指令时的误差
146
福建电脑
2006 年第 12 期
到误差的补偿要求。
TH0=0FFH
TL0=0A9H
若 定 时 器 为 计 数 方 式, 操 作 方 式 为 1, 则 计 数 器 初 值 X0 =
当定时器溢出发出中断请求时, 若 CPU 正在执行同级或者
216- T0×FOSC/12。式中 FOSC 为振荡器的振荡频率。T0 为需要 更高优先级的中断服务程序, 则他能需继续执行这些程序,而 不
; (进入) Enter Interrupt
和, T2 为定时器溢出中断后, 重新从 OOH 开始直至计数器停止 时计的值。在误差补偿中,若将定时器计数初值 X1 取代 X0 ,则可 使定时器下次的溢出中断与 CPU 响应中断实现同步。
例: 8051 时钟: 12MHz, 设定 T0 为方式 1, 16 位定时器。定
4TS+2TS+2TS+2TS+2TS+2TS=4TS (注: 实 际 应 用 中,可 取 进 入 中 2. 蹇兴亮. 单片机定时中断的精确定时编程方法种种[J]. 单片机与嵌入
断为 4TS 或 5TS ,也可测试后调整,本例取 4TS。)由 于 定 时 溢 出 到中断响应时间的延迟造成了定时的误差, 而经过上面程序的 计算已经初步知道了这个误差值, 因此可以采用更改计数初值 的方式来修正, 则实际装入的时间常数计算如下:
相关文档
最新文档