/******************************
对P3.2口输入的脉冲测量周期,从而求出脉冲的频率
T0设置为工作于方式1的定时器,用来计内部时钟脉冲,再乘以单个时钟周期,得到T
INT0在脉冲的下降沿读数,其中第1次计数是不准确的
***************************/
//==============================
#include <reg52.h>
#include <absacc.h>
#include "display.c"
#define uchar unsigned char
#define uint unsigned int
#define ulong unsigned long
uint count="0";
ulong period="0";
bit bdata rflag="0";
bit bdata rflag1=0;
sbit p32=P3^2;
sbit p37=P3^7;
void control (void)
{
TMOD=0x09; //T0方式1且GATE位为1
IT0=1; //INT0为边沿触发
TH0=0; //计数值清0
TL0=0;
IP=0x01; //置相应优先级
IE=0x81; //开中断
TR0=1; //启动T0
}
void int_0(void) interrupt 0 using 1 //INT0中断
{
TR0=0;
period=period+2; //车轮每圈周长是2米
count=TL0+TH0*256; //求计数值
rflag=1;
TH0=0;
TL0=0;
TR0=1;
}
void main()
{
control(); //初始化
while(rflag==0); //关显示,省电
while(1)
{
if(p37==0) //选择显示项目
display(count);
else
display(period);
}
}
文章评论(0条评论)
登录后参与讨论