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