8051定时器应用
2011-04-29 20:51
134 查看
8051系列单片机中的定时器如何用来测量外部脉冲的周期。
有看到过相关资料谈及使用定时器来测量外部脉冲的周期,但不够详细,这次在试验的过程中遇到一个类似的问题,
在教科书上只是简单提及,究竟怎么样使用,没有详细说明,
使用方法也不难,要使用定时器来测量外部脉冲的周期,首先对定时器初始化,方式选择依据你的实际要求选择方式1或2;然后GATE位置1,表示由外部中断引脚INT0的高低电平控制定时器0的启动和停止,INT0为高电平启动定时器计数,INT0为低电平时停止计数;C/T还是设为0,即作定时器使用,TH0,TL0的初值设为0;并允许中断,初始化函数如下:
void init_time0()
{
TMOD = 0x9;
TH0 = TL0 = 0;
EA = ET0 = TR0 = 1;
}
定时器选择方式1,最大计时时间为65.536ms。如果脉冲周期超过这个时间则要注意溢出的情况。出现溢出的时候,就产生中断:
void int_time0() interrupt 1
{
bOverflow = 1;
over_times++; // 溢出次数统计
}
当外部脉冲有高电平变化为低电平时,产生外部中断0,在外部中断0中结束计算计时时间
void int_ext0() interrupt 0
{
long x = TH0*256 + TL0;
if(bOverflow)
{
bOverflow = 0;
x += over_times * 65536;
}
}
要使用外部中断0,还要对它初始化操作
void init_Ext0()
{
EX0 = 1;
IT0 = 1; // 下降沿触发方式
}
有看到过相关资料谈及使用定时器来测量外部脉冲的周期,但不够详细,这次在试验的过程中遇到一个类似的问题,
在教科书上只是简单提及,究竟怎么样使用,没有详细说明,
使用方法也不难,要使用定时器来测量外部脉冲的周期,首先对定时器初始化,方式选择依据你的实际要求选择方式1或2;然后GATE位置1,表示由外部中断引脚INT0的高低电平控制定时器0的启动和停止,INT0为高电平启动定时器计数,INT0为低电平时停止计数;C/T还是设为0,即作定时器使用,TH0,TL0的初值设为0;并允许中断,初始化函数如下:
void init_time0()
{
TMOD = 0x9;
TH0 = TL0 = 0;
EA = ET0 = TR0 = 1;
}
定时器选择方式1,最大计时时间为65.536ms。如果脉冲周期超过这个时间则要注意溢出的情况。出现溢出的时候,就产生中断:
void int_time0() interrupt 1
{
bOverflow = 1;
over_times++; // 溢出次数统计
}
当外部脉冲有高电平变化为低电平时,产生外部中断0,在外部中断0中结束计算计时时间
void int_ext0() interrupt 0
{
long x = TH0*256 + TL0;
if(bOverflow)
{
bOverflow = 0;
x += over_times * 65536;
}
}
要使用外部中断0,还要对它初始化操作
void init_Ext0()
{
EX0 = 1;
IT0 = 1; // 下降沿触发方式
}
相关文章推荐
- 5.4 定时器的应用
- 定时器系列—定时器应用(时钟、倒计时、秒表和闹钟)
- 多线程02_张孝祥-传统定时器Timer的创建和应用
- STM32 SysTick定时器应用【worldsing笔记】
- Spring 在web应用中的定时器
- libevent简单应用:设置定时器
- 线程高级应用-心得1-传统线程和定时器讲解及案例分析
- STM32学习及应用笔记一:SysTick定时器学习及应用
- Linux应用层的定时器Timer使用详解
- Javascript基础——定时器的使用及简单小应用(简易时钟1、延时提示框)
- VC中定时器的应用
- 简单定时器及中断的应用(9999倒计数)
- 内核定时器的简单应用
- web监听器、定时器的应用
- DSP 2812: 使用C++封装定时器及应用举例
- JAVA WEB应用下监听与定时器的配合使用
- Linux时间子系统之七:定时器的应用--msleep(),hrtimer_nanosleep()
- 多线程并发库高级应用 之 传统定时器、互斥、同步通信技术
- libevent简单应用_1_时间定时器
- js 定时器应用