以MCS-51单片机为核心的测控系统软时钟优化设计

发布者:SparklingSun最新更新时间:2023-08-15 来源: elecfans关键字:MCS-51  单片机  测控系统  软时钟 手机看文章 扫描二维码
随时随地手机看文章

随着微电脑的广泛应用,以MCS-51单片机为核心的微机测控系统已随处可见。为满足用户要求,这些系统通常都具有数码显示时钟的功能。由于MCS-51内部包含2个定时计数器,将其中一个定时计数器用于软时钟设计的方法,可以大大节省硬件开销。本文提出了如何提高软时钟的定时精度,以及在软时钟存在的情况下,如何提高以MCS-51单片机为核心的测控系统的设计质量的方法。


一、 MCS-51单片机内部定时计数器的概述

MCS-51单片机内部包含2个定时计数器T0和T1,它们都是16位的加法计数器,既可用于定时,也可用于计数,在用于定时的情况下,计数脉冲由内部提供,因此计数速率固定为CPU振荡频率的1/12;在用于计数的情况下,计数脉冲来自外部,外部计数脉冲通过MCS-51的引脚T0(第14脚)或T1(第15脚)输入,在发生从1到0的跳变时计数加1。每个定时计数器又有4种工作方式可供选择:方式O构成13位定时计数器,高3位未用;方式1构成16位定时计数器;方式2构成8位定时计数器,低位字节用于计数,高位字节存放初值;方式3只适合于T0,构成两个独立的8位定时计数器。在方式O、方式1及方式3时,初值不能自动装入,当定时时间已到或计数次数已满时,若要进行下一次定时计数,必须利用软件装入初值,否则,系统会按上限自动定时或计数,即以O初值进行定时或计数;而在方式2时,初值可自动装入,只需向高位字节写入一次初值,则当低位字节定时时间到(或计数满)时,高位字节的初值会自动装入低位字节,且高位字节的值保持不变。当系统需用MCS-51单片机的串行接口进行串行通信时,定时计数器T1被固定为波特率发生器,因此,在软时钟设计中,总是选择T0作为定时器。


二、软时钟程序设计方法1—0.1 s计数法

0.1 s计数法的基本原理如下:

通过设置定时计数器0每经过0.1 s请求一次中断,中断处理程序会令软时钟的基准0.1 s单元增加1,而该单元每增加10次,再令软时钟的秒单元增加1,以此类推,按照时间进位令分、时、日、月直至年单元增加1。设CPU所接晶体振荡器的振荡频率为6 MHz,则1个机器周期为2μs,当T0作为定时器工作时,定时器溢出,即中断周期:T=2×TC×10-6 s,式中TC为时间常数。令中断周期T=O.1 s,可得:TC=0.1/(2×10-6)=50 000=0C350H,此时间常数决定了T0必须为16位定时器,故设置为工作方式1。由于是加法计数器,初值IC应为时间常数TC的补码,所以IC=216-TC=10000H-0C350H=3CBOH,修正以后,取IC=3CB4H,有关程序段具体设计如下。


由上述程序可知,作为16位定时器使用时,T0不能自动装入初值,每次进入中断服务程序后,首先必须用程序装入初值,下一次定时实际上是从装入初值低位字节后开始的,所以在设定T0中断为高优先级以及CPU对T0中断请求的响应无等待延时的理想情况下,1个中断周期所包含的实际时间t=初值到计数满所需时间+入口引导时间+装入初值低位字节时间。


由于入口引导与装入初值低位字节共占4个机器周期,所以为了使中断周期等于O.1s基准时间,上文对按理论推算出来的初值进行了加4修正。尽管如此,按照方法1设计的时钟程序与测控系统的其他程序有机联接在一起运行时,要实现准确定时也是十分困难的,因为在实用工业测控系统中常常不止1个中断源,而是含有多个中断源,存在着中断优先权的管理问题。要使上述软时钟能够准确定时,T0中断必须设置为高优先级,这样CPU对T0的定时中断才有可能不受影响,确保每隔0.1 s执行一次定时中断服务程序。如果T0定时中断被设置为低优先级,那么CPU对T0定时中断的响应就要受到影响。当CPU正在执行某一高优先级中断源的中断服务程序时,T0计数满会产生中断请求,CPU必须等到当前正在执行的中断服务程序执行完毕之后,才能响应T0中断,这必将延长中断间隔,使初值不能如期装入,破坏定时的准确性。由此可见,采用方法1设计的时钟程序限制了系统设置中断优先级的灵活性,降低了设计效率。例如,某些以数码管作为显示器的测控系统,为了节省硬件开销,通常采用对数码管进行巡回扫描的方法进行显示输出,为使显示稳定,且无抖动现象,必须将数码管显示中断设置为高优先级,以便保证扫描程序的执行周期固定不变,这便与时钟定时中断对优先级的要求发生了矛盾。为克服方法1的缺陷,在实际工程中,通过采用如下所述的方法2来设计时钟程序,可获得较好的效果。


三、 软时钟程序设计方法2—中断周期累加法

方法2和方法1的程序结构是完全相同的,只是在对秒以下时间的处理上有所不同。将方法1的中断服务程序中“O.1 s单元增加1”程序段改为:

以MCS-51单片机为核心的测控系统软时钟优化设计

通过对照容易看出,虽然两个“O.1 s单元增加1”程序段所用指令不同,但效果是完全一样的,可以互相替代。改动后的程序将对0.1 s中断周期的计数,变成了对O.1 s中断周期的累加,由此引申,对任何小于秒的中断周期都可以进行累加,当最高位有进位时实施秒增1,同样可以达到时钟定时的目的。MCS-51单片机内部定时器选择工作方式1时为16位计数器,在上述假定条件下,当初值为0时,T0的定时中断周期T=0.131 072 s,131072定义为中断周期常数,在中断服务程序中对其进行累加。以下是采用方法2设计的时钟程序。


定义中断周期常数:

C*T: DB 00H,13H,10H,72H

初始化程序:

以MCS-51单片机为核心的测控系统软时钟优化设计

方法2采用对中断周期进行累加的方法,令定时器满量程计数,初值为O,计数满后,自动重新从0开始计数,不需用程序装入初值,从根本上摆脱了装入初值的困扰,当然也就避免了对初值进行修正的繁琐过程。由于不需要装入初值,CPU可在中断周期的任意时刻,响应定时器的中断请求,只需保证下一次中断请求到来之前将中断服务程序执行完毕即可,从而使定时器大大降低了对中断优先级的要求。因此方法2将定时器中断设置为低优先级,而方法1则将其设置为高优先级。显然,采用方法2不仅便于程序设计,而且提高了程序设计的效率。


方法2中,当定时器满量程计数时,中断周期不再是标准的0.1 s,因此中断周期在累加过程中向秒单元的进位,大多数发生在非整秒时刻,而且进位间隔也不尽相同,具体来讲,假设秒以下时间单元从0开始累加,那么向秒单元进位第一次是在1.048 576 s时刻,第二次是在2.097 152 s时刻,第三次是在3.014 656 s时刻,…,第一次与第二次间隔为1.048 576 s,第二次与第三次间隔为0.917 504 s,……,进位间隔有时候大于1s,有时候小于1 s,然而,对分、时、日、月这些长期时间过程来说,积累误差可以认为等于O,从这个意义上说,方法2大大提高了定时精度。


四、结语

本文提出了采用MCS-5l内部定时计数器作为软时钟设计的方法。这种方法不仅节省了硬件开销,而且提高软时钟的定时精度,具有广泛的实际应用价值。在实际测试中,当晶体振荡器的振荡频率不是标准6MHz时,可以调整中断周期常数,以及必要时通过增加秒以下时间单元缓冲区的字节数,使中断周期常数准确到所需精度。


关键字:MCS-51  单片机  测控系统  软时钟 引用地址:以MCS-51单片机为核心的测控系统软时钟优化设计

上一篇:C51单片机延时时间的计算方法解析
下一篇:使用单片机实现数字频率计数器的设计说明

推荐阅读最新更新时间:2024-11-05 12:27

教你如何高效编程之头文件书写
在网上查了很长时间关于头文件的资料,但是发现很难找到适合我的。学单片机的朋友知道,很多程序经常要调用相同的函数,如果每写一个程序都把这些函数重新写一遍或者复制过来,那是很浪费时间的,现在我通过学习总结以及别人的经验,跟大家分享,欢迎大家转载学习。 写程序最好是结构化编程,因为这样的程序看起来就不那么长了,一目了然,可以很快就知道这个程序实现什么功能,而且排错也非常简单。把常用的函数声明、自定义类型、外部变量的声明等写进头文件,与之配对的扩展名为.c的文件就写常用的函数,main.c最好就写一个主函数。之前学的51单片机,现在玩430单片机,就以430单片机为例,其他编程软件道理与这个相同。在IAR下新建工程,包含了main.c、
[单片机]
基于AT89C2051单片机的智能化快速充电系统设计
1.前 言   自1859年法国物理学家普兰特(Plante)发明了铅酸蓄电池至今已有140年的历史。铅酸蓄电池有着成本低,适用性宽,可逆性好,大电流放电性能良好,单体电池电压高,并可制成密封免维护结构等优点,而被广泛地应用于车辆启动、邮电、电力、铁路、矿山、采掘、计算机UPS等各个领域中。蓄电池也是国民经济以及国防建设的重要能源,在许多行业的发展中,也迫切需要容量大、循环寿命长、充电时间短、价格低的蓄电池。而快速充电技术也成为了其中的关键技术,它对电池的使用有着非常重要的影响。目前,国内外都在不断地研究这一技术,而在快速充电技术中引入计算机控制,是非常有效的,且有着非常明显的经济效益。而单片机又以其低廉的成本,灵活的控制方式
[单片机]
基于AT89C2051<font color='red'>单片机</font>的智能化快速充电系统设计
PIC8位单片机引脚符号的功能
笔者读了本版有关PIC 8位单片机的产品性能和相应的封装引脚介绍后,认为对初学者而言还需了解各引脚符号的意义,才能进一步学习和使用它。笔者为此作相关的说明,以便和初学者共同提高。   一、关于I/O口符号 PIC单片机系列封装引脚最少的是8引脚(如PIC12C5XX和PIC12C6XX),多的可达84引脚(如PIC17C76X),其中I/O(输入/输出)口线按PIC单片机产品型号不同,其口线数量也不相同。8脚封装的I/O口线是6根线,而84脚封装的I/O线多达66根线。这些口线符号分别按英文字母顺序排列编号,简称A口、B口、C口、D口、E口、F口……,每个口是8位的,但不一定占满8位。这些口在封装引脚图的标注上均在各口之前
[单片机]
解决AVR单片机烧写过程中弄错熔丝位而造成无法读写的问题
在AVR单片机烧写的过程中,难免有弄错熔丝位的时候,结果是AVR单片机无法读写了!这时我们该怎么办呢,将昂贵的芯片丢掉,再用一块新的。其实这一般是没有必要的,写错熔丝位而导致单片机不能读写,一般不外乎(个人愚见)设设置错了时钟模式,比如说本来是用内部晶振的,结果弄成了外部晶振,而单片机的外部有没有接晶振,这时单片机没有了时钟信号,当然就没有办法在读写了,估计大家也猜到了怎么办了吧,是的,就是由外部提供时钟源。 有第一张图的时钟选择,我们就知道我们得准备多种时钟源: 高频石英/陶瓷晶振,这个直接接在 单片机 晶振位置就可以了,注意频率不要太高,4~5M的就可以了,不放心的话,接两个20P~30P的电容也行! 低频晶振,和
[单片机]
解决AVR<font color='red'>单片机</font>烧写过程中弄错熔丝位而造成无法读写的问题
八位微控制器有哪些可以节约代码空间的代码优化技巧?
本文将介绍一些优化技术,帮助设计人员节约多达 10% 的代码空间,从而让容量有限的程序存储器支持更多新特性和补丁。 良好的操作方法 许多程序员在 32 位处理器上学习编写软件,如 Intel 的 Pentium 处理器或某种 ARM 平台。不过,嵌入式领域的软件编写需要不同的思路。在 32 位 CPU 上,存储比特位的最佳方法通常是使用 32 位变量。对 8 位处理器而言,最好的办法就是采用单字节。像增强型 8051s 等某些处理器可能提供特殊的 1 位变量。 嵌入式处理器通常会超出标准的哈佛架构将存储器分散到不同的存储器空间中,有的相互重叠,有的又是相互分离。例如,8051 中常见的存储器空间包括 CODE、XDATA、DA
[单片机]
八位<font color='red'>微控制器</font>有哪些可以节约代码空间的代码优化技巧?
51单片机C51毫秒级(ms)精确延时
如下程序能实现ms毫秒级的比较精确的延时 void Delayms(unsigned int n) { unsigned int i,j; for(j=n;j 0;j--) for(i=112;i 0;i--); } 用keil可以看出这个延时的时间,我们先延时1ms(Delayms(1))。 进入Delayms前,sec=0.00042209s 延时后,sec=0.00142253s 可以知道Delayms(1)实际延时0.00142253s—0.00042209s=0.00100044s≈1ms 同样如果想延时15ms的话,用Delayms(15),实际延时0.01480903s≈15m
[单片机]
单片机 4*4 矩阵键盘应用
在单片机按键使用过程中,当键盘中按键数量较多时 为了减少端口的占用通常将按键排列成矩阵 形式如下图所示,在矩阵式键盘中 每条水平线和垂直线在交叉处不直接连通而是通过一个按键加以连接,到底这样做是出意何种目的呢? 大家看下面电路图,单片机的整一个8位端口可以构成 4*4=16 个矩阵式按键 ,相比独立式按键接法多出了一倍,而且线数越多区别就越明显,假如再多加一条线就可以构成 20个按键的键盘,但是独立式按键接法只能多出1个按键。由此可见,在需要的按键数量比较多时,采用矩阵法来连接键盘是非常合理的,矩阵式结构的键盘显然比独立式键盘复杂一些,单片机对其进行识别也要复杂一些。确定矩阵式键盘上任何一个键被按下通常采用行扫描法。行扫描法又称为逐
[单片机]
瑞萨新一代“RX系列”微控制器
· 快速、高性能 CPU—— 新型架构可实现 200MHz 的高速运行,每个时钟周期可以同时处理更多的指令: Dhrystone v2.1 基准测得的结果为 1.25MIPS/MHz 。 该新型 CPU 采用了哈佛( Harvard )架构,可以提供独立的地址和数据通道,有助于实现一个周期内的指令执行和数据存取。这种单周期能力已通过现场使用瑞萨 MCU 进行了测试和验证。为了确保尽可能高的性能,瑞萨对该架构进行了严谨的设计和广泛的测试工作。因此,新型架构通过对寄存器、指令和地址模式的有效利用而进行了充分的优化。此外,它还有 16 个 32 位通用寄存器,有助于 CPU 处理所有可用寄存器的数据和地址。
[新品]
小广播
设计资源 培训 开发板 精华推荐

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

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

换一换 更多 相关热搜器件
更多往期活动
随便看看

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

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