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