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