51单片机测量脉冲周期

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/little_white__/article/details/73732674

要求:测量脉冲的周期
思想:用定时器和外部中断(下降沿触发中断),当第一个下降沿时,触发外部中断,此时开始计时。当第二个下降沿时,此时停止计时,此时的时间就是脉冲的周期。
程序:

#include <reg51.h>
#include <intrins.h>

#define uLint unsigned long int

uLint cycle_t = 0 ;//脉冲周期时间
sbit in = P3^2 ;
bit start = 0 ;
void Int0 (void) interrupt 0
{ 
    if(start == 0)//第一次下降沿开始计时
    {
        cycle_t = 0 ;
        TL0 = 0 ;   
    }
    if(start == 1)       //第二次下降沿结束计时
    {
         cycle_t += TL0 ;
         TL0 = 0 ;
    }
    start = ~start ;
}

void Time0(void) interrupt 1
{
    cycle_t += 256 ;
}

int main()
{
    //初始化
    TMOD = 0x2 ; //定时器0,模式2
    TH0 = 0 ;
    TL0 = 0 ;
    TR0 = 1 ;
    ET0 = 1 ;

    IT0 = 1 ;
    EX0 = 1 ;
    EA = 1 ;

    while(1)
    {

    }       
}

信号函数:


signal void test() 
{
    int i ;
    for(i = 0 ; i < 10 ; i++)
    {
        port3 &= ~(0x1<<2)  ;
        swatch(0.5) ;
        port3 |= (0x1<<2) ; 
        swatch(0.7) ;
        port3 &= ~(0x1<<2)  ;
    }

    _break_ = 1 ;

}

这里写图片描述
这里写图片描述

猜你喜欢

转载自blog.csdn.net/little_white__/article/details/73732674