專注電子技術(shù)學(xué)習(xí)與研究
當(dāng)前位置:單片機(jī)教程網(wǎng) >> MCU設(shè)計(jì)實(shí)例 >> 瀏覽文章

測(cè)速度與路程

作者:佚名   來(lái)源:本站原創(chuàng)   點(diǎn)擊數(shù):  更新時(shí)間:2011年03月16日   【字體:

/******************************
對(duì)P3.2口輸入的脈沖測(cè)量周期,從而求出脈沖的頻率
T0設(shè)置為工作于方式1的定時(shí)器,用來(lái)計(jì)內(nèi)部時(shí)鐘脈沖,再乘以單個(gè)時(shí)鐘周期,得到T
INT0在脈沖的下降沿讀數(shù),其中第1次計(jì)數(shù)是不準(zhǔn)確的

***************************/
//==============================

#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為邊沿觸發(fā)
TH0=0;        //計(jì)數(shù)值清0
TL0=0;
IP=0x01;       //置相應(yīng)優(yōu)先級(jí)
IE=0x81;       //開(kāi)中斷
TR0=1;        //啟動(dòng)T0
}
void int_0(void) interrupt 0 using 1 //INT0中斷
{
TR0=0;      
period=period+2;     //車輪每圈周長(zhǎng)是2米
count=TL0+TH0*256;     //求計(jì)數(shù)值
rflag=1;
TH0=0;
TL0=0;
TR0=1;
}
void main()
{
control();       //初始化
while(rflag==0);     //關(guān)顯示,省電
while(1)
 {
 if(p37==0)      //選擇顯示項(xiàng)目
 display(count);
 else
 display(period);
 }
}
關(guān)閉窗口

相關(guān)文章