基于单片机的车轮测速系统

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

【实例68】基于单片机的车轮测速系统

具体程序如下:

/*---------------

文件名称: speed.C

功能:脉冲方式车轮测速

说明:系统主时钟为6MHz,定时间隔为512um

----------------*/

#include

unsigned char K=100; //相邻两个红外线探测器之间的圆弧长度,这里预设为100mm

unsigned int t0_num=0; //t0定时器中断次数计数

unsigned int speed; //用来存储计算出的速度,单位为km/h

unsigned char int0_flag=0; //int0的中断标志位

unsigned char t0_max=65000; //定时器0的最大中断次数,防止当车轮不转时,数据溢出。

//主函数

void main()

{

//初始化中断,下降沿有效

EA=0;

IT0=1;

EX0=1;

//初始化定时器T0,方式2,8位自动重载方式。在6MHz主频时,定时间隔为512us

TMOD=0x02;

TL0=0xff;

TH0=0xff;

//开启中断

EA=1;

while(1)

{

if(int0_flag==2) // 连续中断两次,则进行速度计算

{

speed=(K*3600)/(t0_num*512); //计算速度

disp(speed,0); //显示速度,详见第四章4.6 七段数码管显示实例

t0_num=0;

int0_flag=0;

EA=1;

}

}

}

/********************************

函数名称: void int0_fun() interrupt 0

功能:int0中断处理函数

说明:设置int0_flag的值,并根据int0_flag 启动或关闭定时器T0

入口参数:无

返回值:无

********************************/

void int0_fun() interrupt 0

{

if(int0_flag==0)

{

TR0=1;

}

int0_flag++;

if(int0_flag==2)

{

TR0=0;

EA=0;

}

}

/********************************

函数名称: void t0_fun() interrupt 1

功能:定时器/计数器0溢出中断的中断服务程序

说明:对t0_num进行递增,并判断是否到达最大值入口参数:无

返回值:无

********************************/

void t0_fun() interrupt 1

{

t0_num++;

if(T0==t0_max)

{

int0_flag=2;

TR0=0;

EA=0;

}

}

相关文档
最新文档