首页 | 新闻 | 新品 | 文库 | 方案 | 视频 | 下载 | 商城 | 开发板 | 数据中心 | 座谈新版 | 培训 | 工具 | 博客 | 论坛 | 百科 | GEC | 活动 | 主题月 | 电子展
返回列表 回复 发帖

51单片机测变周期脉冲信号的简便方法

51单片机测变周期脉冲信号的简便方法

摘要:利用MCS-5l系列单片机内部定时/计数器控制灵活的特点,设计出了一个只用其内部一个定时/计数器测量脉冲周期连续变化的脉冲信号的方法.该方法没有额外的硬件开销,只是将脉冲信号直接引入单片机的一外部中断口;软件设计简单.其对脉冲周期测量误差不大于2us,测量脉冲周期范围广,可直接用于光电等产品的开发。,Z\Fs Si&x2DB0
JN!|_2l0qE7B \,}uJ0 电子园51单片机学习网 Px/Mo,D
电子园51单片机学习网X+P'd#t5_"b4P%CZRA
    脉冲信号是工程中一类较常见的信号,如光电位移、速度、转速等传感器输出的信号,而脉冲宽度和脉冲周期是其基本参数,往往需对它们进行测量。对等周期的脉冲信号的测量比较容易,只需测量任一脉冲宽度或周期就可以了,近年来已有许多MCS-51用户利用测量脉冲信号的基本参数而开发新产品,如山东大学的“ZBCY—I型智能标枪速度测试仪”就是利用测量一个脉冲宽度来获得标枪在某一飞行距离内的平均速度。对连续变周期的脉冲信号周期的测量则相对困难些,许多测量人员都首先对这类信号进行二分频后一路反相,然后用两个定时/计数器分别测出两路脉冲信号的正脉冲宽度得到周期,这种方法硬件开销较大,软件设计也较复杂。本文将介绍了一种用MCS-51单片机内部一个定时/计数器直接测量连续变周期脉冲信号周期的实用方法。电子园51单片机学习网/{NjHSP0h"Z
电子园51单片机学习网8IT%D:WLg\:f Ggk
电子园51单片机学习网4AEt7t p i d Bc oB
电子园51单片机学习网'g.FA*IU)u6znI4F/m
    用803l内部定时器来测连续变周期的脉冲信号的周期时,关键是如何控制定时/计数器的启动、停止。以定时器T1为例,当其工作于方式1时,则按16位计数器工作,由两个特殊功能寄存器THl作为高8位和TLl作为低8位构成,其控制逻辑如图1。电子园51单片机学习网c8n8h8wOj2W w1s?#u

M K v3a(j1}3z^ p0电子园51单片机学习网TuPnBc$Y.^X
电子园51单片机学习网*I7}4^,H4zr;C~
    图1定时,计数器方式1的控制逻辑
mm%M Ick^0
r@\lYWo0
d&u1Ar7u0    当定时/计数器方式控制寄存器TMOD门控位GATE=0时,计数器的启动、停止只受TR1控制,只要TR1置位。计数器就被选通,而不管INT1电平高低。因此,在主程序中先置位IE中位EA,将信号引入INT1,在INT1中断服务程序中使TCON中位TR1复位和置位来实现计数器的停止、数据读电子园51单片机学习网8A\Oc~n
取、计数器赋初值和启动。其工作过程如图2。电子园51单片机学习网L f_*e];z3j)t

w;jWpU-Y?0电子园51单片机学习网$aE6L7?/MU@ dvm0wN

@3Ok'v-H-u,E0px0
7Zc@Rv0@0
kT W{Q0    图2  定时,计数器测脉冲周期简图电子园51单片机学习网oK{f]-eEa*v

Wq9F/\:e0bE6K`0
6]5B"i;B@x,T)av0其中:t1-中断服务程序执行时间
4CR8p3Oq8?"_0    t2-计数器计数时间电子园51单片机学习网j6?7Bh1C`N#j }`y
    则:第i个脉冲周期ti=t1+t2(i=1,2,3,…)。
a mB6zB["K0    可以看出,仅用8031内部的一个定时/计数器,就可测出一路变周期脉冲信号的每个周期。
(e9g:_.n O!u-g5T2^ fc0    定时器T1中断服务程序流程框图如图3所示。电子园51单片机学习网?N~P1Z ^5{ m
电子园51单片机学习网UPxO'C:d
电子园51单片机学习网0Uj _u6Nz9@

Q"kS*E%E0
5Nk,Dn5R&d9{2`0电子园51单片机学习网 ^t!G/j0v~
    定时器Tl中断服务程序清单如下:电子园51单片机学习网5r5OD TWJ5f^

4lwS ]$?Ee+`0电子园51单片机学习网7x6m8a }I8~$sb0K ez
INT1:CLR  TR1  ;关计数器1
oX3c.Q,]]/Q OF0PUSH ACC;ACC入栈
y'de&o"To;O0PUSH 00H;R0入栈电子园51单片机学习网z'_zN|
CLR  C  ;清零进位标志
y.a.m:K6H0MOV  A,TL1 ;计数值低8位→累加器
-[F:yDQD0ADD  A,#23H ;计数器值+中断执行时间32us(12MHz晶振)+
%R"HBux&o|H:I0  ;最小中断响应时间3-脉冲周期
%SI7gD P0MOV R0,A  ;低8位暂存R0
JP7hmIR&vb1t1q0MOV  A,TH1电子园51单片机学习网 Z?;ZJs
ADDC A,#00H
&r!s0ac)@ R;[0MOVX @DPTR,A ;脉冲周期高8位→@DPTR指向的RAM单元
J'I3^zt)S`0INC DPTR ;指向下一RAM单元
5DE$}e d^0MOV A,R0
j/_0K|;xr0MOVX @DPTR,A ;脉冲周期低8位→DPTR指向的RAM单元电子园51单片机学习网I"] W? ?I/{0u!o6O3^y
INC DPTR  电子园51单片机学习网f M5tf-T*pv/S
INC R1  ;脉冲周期个数加一
!a4y)Y?2US0MOV TH1,#00H ;清零计数器1电子园51单片机学习网p VI6W(`Cu!F
MOV TL1,#00H
Rn}{x1z6Bl-\0POP 00H
U a4l0iU0POP ACC电子园51单片机学习网K0yu!D/_D
SETB TR1 ;重新启动计数
:z'm#K:t7a Y0RETI  ;中断返回电子园51单片机学习网,tuXv[r?

x pPnD0
{{rf]P&U$q-l)i0
I+@:z}7~UH0    该中断服务程序能采样的最小脉冲周期为32us,若去掉该程序中的现场保护和将计数值变为脉冲周期放在采样后进行,则可进一步减小能采样的脉冲周期。能采样的最大脉冲周期为65535us(12MHz晶振时),若大于该值,则用户对程序稍加修改即可,因此,实际上对最大周期可不加限制。设对脉冲信号采样100个周期,采样值存于50H开始的外部RAM中,则主程序如下:
5V%G)Ep!Q8Z+R H0 电子园51单片机学习网aWcj0B6Nsn9| B dL

)]s~r4Y&s2y'Z2^,K0电子园51单片机学习网g9]/y n A6W+n+Q
MAIN:电子园51单片机学习网l8O"Kds4tD~
    PUSH TMOD    ;专用寄存器TMOD TCON IE入栈   
Mz+BV ^,sg0    PUSH TCON
6k2s0|y| f0}0    PUSH IE
*~8DA7_R6X2Q0    MOV THI,#00H  ;清零计数器电子园51单片机学习网P/Sh7Cn!O7i
    MOV TL1,#00H
X4k+?"q*P6Wrwt0    MOV TMOD.10H;计数器1工作方式1电子园51单片机学习网{4BHh4JB-{"TL;Gi
    SETB EA    ;允许中断电子园51单片机学习网*c w!S4e9a
    SETB EX1    ;外部中断1
.{G"{6[~0    SETB  IT1    ;INT1负跳变触发中断
,|R1z9ySD0    MOV DPTR,#50H;存脉冲周期的RAM首地址
Or*ww?bY/gP S0    MOV  R1,#00H  ;R1一控制采样周期个散
(Iz}+Y/S8W F3?w)IW4n0    SETB TR1    ;计数器1开始计时
&^%FQ6G/Zmy7wb0    CJNE  R1,#64H,$;等待100个周期采样结束
zH9f;\"Yc0    CLR  TR1    ;关计数器
H as xGv,o0    POP  IE
*~ab-C2q7r0    POP TCON电子园51单片机学习网BZ4`7xa`J+`4M?0g
    POP TMOD
U N [-D%tG4q;p;f n&i0
~,\2eD9w(s ~u4}0电子园51单片机学习网%H!b^yn [(r] }
电子园51单片机学习网8]odz`/F BA
    以上采样的第一脉冲周期不准,应在数据处理时丢掉,也可在中断服务程序中加判断语句自动丢掉。由以上可以看出,该方法无额外硬件,软件简明,能测量的脉冲周期范围大,但不能测得脉冲信号的第一个周期。
返回列表