"); //-->
摘要:利用MCS-5l系列单片机内部定时/计数器控制灵活的特点,设计出了一个只用其内部一个定时/计数器测量脉冲周期连续变化的脉冲信号的方法.该方法没有额外的硬件开销,只是将脉冲信号直接引入单片机的一外部中断口;软件设计简单.其对脉冲周期测量误差不大于2us,测量脉冲周期范围广,可直接用于光电等产品的开发。
脉冲信号是工程中一类较常见的信号,如光电位移、速度、转速等传感器输出的信号,而脉冲宽度和脉冲周期是其基本参数,往往需对它们进行测量。对等周期的脉冲信号的测量比较容易,只需测量任一脉冲宽度或周期就可以了,近年来已有许多MCS-51用户利用测量脉冲信号的基本参数而开发新产品,如山东大学的“ZBCY―I型智能标枪速度测试仪”就是利用测量一个脉冲宽度来获得标枪在某一飞行距离内的平均速度。对连续变周期的脉冲信号周期的测量则相对困难些,许多测量人员都首先对这类信号进行二分频后一路反相,然后用两个定时/计数器分别测出两路脉冲信号的正脉冲宽度得到周期,这种方法硬件开销较大,软件设计也较复杂。本文将介绍了一种用MCS-51单片机内部一个定时/计数器直接测量连续变周期脉冲信号周期的实用方法。
用803l内部定时器来测连续变周期的脉冲信号的周期时,关键是如何控制定时/计数器的启动、停止。以定时器T1为例,当其工作于方式1时,则按16位计数器工作,由两个特殊功能寄存器THl作为高8位和TLl作为低8位构成,其控制逻辑如图1。
图1定时,计数器方式1的控制逻辑
当定时/计数器方式控制寄存器TMOD门控位GATE=0时,计数器的启动、停止只受TR1控制,只要TR1置位。计数器就被选通,而不管INT1电平高低。因此,在主程序中先置位IE中位EA,将信号引入INT1,在INT1中断服务程序中使TCON中位TR1复位和置位来实现计数器的停止、数据读
取、计数器赋初值和启动。其工作过程如图2。
图2 定时,计数器测脉冲周期简图
其中:t1-中断服务程序执行时间
t2-计数器计数时间
则:第i个脉冲周期ti=t1+t2(i=1,2,3,…)。
可以看出,仅用8031内部的一个定时/计数器,就可测出一路变周期脉冲信号的每个周期。
定时器T1中断服务程序流程框图如图3所示。
定时器Tl中断服务程序清单如下:
INT1:CLR TR1 ;关计数器1
PUSH ACC;ACC入栈
PUSH 00H;R0入栈
CLR C ;清零进位标志
MOV A,TL1 ;计数值低8位→累加器
ADD A,#23H ;计数器值+中断执行时间32us(12MHz晶振)+
;最小中断响应时间3-脉冲周期
MOV R0,A ;低8位暂存R0
MOV A,TH1
ADDC A,#00H
MOVX @DPTR,A ;脉冲周期高8位→@DPTR指向的RAM单元
INC DPTR ;指向下一RAM单元
MOV A,R0
MOVX @DPTR,A ;脉冲周期低8位→DPTR指向的RAM单元
INC DPTR
INC R1 ;脉冲周期个数加一
MOV TH1,#00H ;清零计数器1
MOV TL1,#00H
POP 00H
POP ACC
SETB TR1 ;重新启动计数
RETI ;中断返回
该中断服务程序能采样的最小脉冲周期为32us,若去掉该程序中的现场保护和将计数值变为脉冲周期放在采样后进行,则可进一步减小能采样的脉冲周期。能采样的最大脉冲周期为65535us(12MHz晶振时),若大于该值,则用户对程序稍加修改即可,因此,实际上对最大周期可不加限制。设对脉冲信号采样100个周期,采样值存于50H开始的外部RAM中,则主程序如下:
MAIN:
PUSH TMOD ;专用寄存器TMOD TCON IE入栈
PUSH TCON
PUSH IE
MOV THI,#00H ;清零计数器
MOV TL1,#00H
MOV TMOD.10H;计数器1工作方式1
SETB EA ;允许中断
SETB EX1 ;外部中断1
SETB IT1 ;INT1负跳变触发中断
MOV DPTR,#50H;存脉冲周期的RAM首地址
MOV R1,#00H ;R1一控制采样周期个散
SETB TR1 ;计数器1开始计时
CJNE R1,#64H,$;等待100个周期采样结束
CLR TR1 ;关计数器
POP IE
POP TCON
POP TMOD
以上采样的第一脉冲周期不准,应在数据处理时丢掉,也可在中断服务程序中加判断语句自动丢掉。由以上可以看出,该方法无额外硬件,软件简明,能测量的脉冲周期范围大,但不能测得脉冲信号的第一个周期。
*博客内容为网友个人发布,仅代表博主个人观点,如有侵权请联系工作人员删除。