随着微电脑的广泛应用,以MCS-51单片机为核心的微机测控系统已随处可见。为满足用户要求,这些系统通常都具有数码显示时钟的功能。由于MCS-51内部包含2个定时计数器,将其中一个定时计数器用于软时钟设计的方法,可以大大节省硬件开销。本文提出了如何提高软时钟的定时精度,以及在软时钟存在的情况下,如何提高以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作为定时器。
通过设置定时计数器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和方法1的程序结构是完全相同的,只是在对秒以下时间的处理上有所不同。将方法1的中断服务程序中“O.1 s单元增加1”程序段改为:
通过对照容易看出,虽然两个“O.1 s单元增加1”程序段所用指令不同,但效果是完全一样的,可以互相替代。改动后的程序将对0.1 s中断周期的计数,变成了对O.1 s中断周期的累加,由此引申,对任何小于秒的中断周期都可以进行累加,当最高位有进位时实施秒增1,同样可以达到时钟定时的目的。MCS-51单片机内部定时器选择工作方式1时为16位计数器,在上述假定条件下,当初值为0时,T0的定时中断周期T=0.131 072 s,131072定义为中断周期常数,在中断服务程序中对其进行累加。以下是采用方法2设计的时钟程序。
方法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时,可以调整中断周期常数,以及必要时通过增加秒以下时间单元缓冲区的字节数,使中断周期常数准确到所需精度。
实现延时通常有两种方法:一种是硬件延时,要用到定时器/计数器,这种方法可以提高CPU的工作效率,也能做到精确延时;另一种是软件延时,这种方法主要采用循环体进行。 1 使用定时器/计数器实现精确延时 单片机系统一般常选用11.059 2 MHz、12 MHz或6 MHz晶振。第一种更容易产生各种标准的波特率,后两种的一个机器周期分别为1 μs和2 μs,便于精确延时。本程序中假设使用频率为12 MHz的晶振。最长的延时时间可达216=65 536 μs。若定时器工作在方式2,则可实现极短时间的精确延时;如使用其他定时方式,则要考虑重装定时初值的时间(重装定时器初值占用2个机器周期)。 在实际应用中,定时常采用中断方式,如进行适
本实践以单片机为基础,实现了全自动洗衣机控制系统设计。系统包含单片机、LCD显示屏、水位传感器、温度传感器等。全自动洗衣机包含的功能有:标准洗衣、经济洗衣、单独洗衣以及排水四种洗衣方式,有强洗、弱洗及运行/暂停、显示及报警功能,有自动烘干功能等。 仿真原理图如下 单片机源程序如下: #include reg51.h //定义头文件 #define uint unsigned int //定义字符uint #define uchar unsigned char //定义字符uchar #define TIME0H 0xff /
全自动洗衣机控制系统 /
1.前言 PIC16F876的模数转换器 (A/D) 模块有多达 8 个模拟输入通道。如果选择8位A/D 转换器,那么芯片可以将能将一个模拟输入信号转换成相应的 8 位数字信号。采样保持输出是转换器的输入,A/D 转换器采用逐次逼近法产生转换结果。通过软件设置,模拟参考电压可以选择为器件的正向电源电压 (VDD) 或 VREF 引脚上的电平。 A/D 转换器具备可在休眠状态下工作的独特特性。 2.AD控制原理 与A/D 转换器相关连得有 3 个寄存器,它们分别是: • A/D 结果寄存器 (ADRES) • A/D 控制寄存器 0 (ADCON0) 控制 A/D 模块的操作 • A/D 控制寄存器 1 (ADCON1
概述 近年来,随着空调市场的不断扩大,竞争也日趋激烈;从而对空调生产成本控制提出了更高的要求,空调生产过程中测试成本占据了生产成本相当大的比重。同时,生产测试的方便性、准确性和有效性都影响着产品质量,从而最终影响空调品牌的信誉。 国内空调生产厂家对空调主板的测试大多数仍停留在手工检测阶段,为提高生产测试中的自动化程度,我们设计了空调主板自动测试系统;自行研制的主板测试数据的实时监测电路是该自动测试系统的一个重要组成部分。该监测电路是以Philips增强型单片机P89C51RD2为核心,实时监视空调主板内的单片机与显示驱动芯片之间的同步串行数据,确保对空调主板检测的准确有效;同时根据工控机软件定义的检测流程,将计算机发出的控制信
同样我们使用的仍然是STC的8051单片机,这段代码是用来做一个计时器,通过数码管实时显示出来,因为板子上数码管有6个,所以可以设置小时,分钟,秒三个单位,在Proteus上也是可以模拟的,计时结束可以用蜂鸣器,或者继电器接口连接 一个闹铃,闹铃用电磁式的就可以,当然简单来说蜂鸣器就是一个不错的选择。 程序中没有设置小时单位,想要加上的小伙伴可以用显示分钟,秒的方法同样显示出来,但添加后要注意延时的时间,时间设置不当可能会出现显示不清楚,数字抖动,或者未选中的数码管也隐隐发光(“鬼影”)。具体大小可以自己调试着来,也是很简单的。下边是源代码: #include reg52.h #define uint unsigne
2023 年 10 月 23 日 – 提供超丰富半导体和电子元器件™的业界知名新品引入 (NPI) 代理商贸泽电子 贸泽开售英飞凌MOTIX™ TLE989x MCU: 配备CAN (FD) 接口的单芯片功率IC,更适合汽车/BLDC电机控制 (Mouser Electronics) 即日起开售英飞凌MOTIX™ TLE989x微 (MCU)。 TLE989x系列微扩展了其全面且经过验证的MOTIX™ MCU嵌入式功率IC产品组合,并采用CAN (FD) 作为通信接口。与TLE987x产品系列相比,此系列的处理能力提高了约60%,同时还拥有额外的功能安全和网络安全功能,如安全启动和密钥
: 单芯片功率I。
400-677-3888