/******************************
对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); } }