定时器的使用
2016-04-01 19:39
260 查看
一、定时器的使用方法
(1)打开总中断 //EA, CPU中断允许(总允许)位。
(2)设置定时器工作方式
![](http://img.blog.csdn.net/20160401193258996)
M1M0工作方式控制位
![](http://img.blog.csdn.net/20160401193326980)
C/T定时器方式或计数器方式选择位
若C/T=1时, 为计数器方式; C/T = 0时, 为定时器方式。
GATE 定时器/计数器运行门控标志位
当GATE=1时, 只有INT0 (或INT1)引脚为高电平且TR0(或TR1 )置 1 时, 相应的定时器 /计数器才被选通工作, 这时可用于测量在INTx端出现的正脉冲的宽度。若GATE=0, 则只要 TR0 (或 TR1)置 1, 定时器 /计数器就被选通, 而不管 INT0 (或 INT1)的电平是高还是低。
2、机器周期=1/单片机的时钟频率。
3、51单片机内部时钟频率是外部时钟的12分频。也就是说当外部晶振的频率输入到单片机里面的时候要进行12分频。比如说你用的是12MHZ的晶振,那么单片机内部的时钟频率就是12/12MHZ,当你使用12MHZ的外部晶振的时候。机器周期=1/1M=1us。
4、单片机的晶振频率12M,震荡周期为 1/12us
单片机机器周期:12个震荡周期 = 1个机器周期,即加一次1us.
打开定时器中断
//ET0,定时/计数器T0中断允许位;ET1,定时/计数器T1中断允许位;
打开定时器(开始计数) // TR0 = 1 / TR1 = 1
写中断服务函数 //中断服务函数不能有参数和返回值
二、定时/计数器的工作原理
描述一:
定时/计数器实质上是一个加1计数器。它随着计数器的输入脉冲进行自加1,也就是每来一个脉冲,计数器就自动加1,当加到计数器为全1时,再输入一个脉冲就使计数器回零,且计数器的溢出使相应的中断标志位置1,向CPU发出中断请求(定时/计数器中断允许时)。如果定时/计数器工作于定时模式,则表示定时时间已到;如果工作于计数模式,则表示计数值已满。
可见,由溢出时计数器的值减去计数初值才是加1计数器的计数值。
描述二:
定时器中断服务程序的中断源是定时器,由晶振振荡产生内部计数功能,每次自加1。当计数器计数超过溢出值,TF0/TF1置位,产生溢出中断请求,CPU自动中断当前执行任务,把程序当前位置入栈,保护现场,然后跳到中断服务函数,执行中断服务函数后,TF0/TF1置0,恢复现场,回到主程序继续执行被中断的地方。
【注】课外拓展,学会定时器的控制寄存器中的其他bit位代表的含义
(1)打开总中断 //EA, CPU中断允许(总允许)位。
(2)设置定时器工作方式
M1M0工作方式控制位
C/T定时器方式或计数器方式选择位
若C/T=1时, 为计数器方式; C/T = 0时, 为定时器方式。
GATE 定时器/计数器运行门控标志位
当GATE=1时, 只有INT0 (或INT1)引脚为高电平且TR0(或TR1 )置 1 时, 相应的定时器 /计数器才被选通工作, 这时可用于测量在INTx端出现的正脉冲的宽度。若GATE=0, 则只要 TR0 (或 TR1)置 1, 定时器 /计数器就被选通, 而不管 INT0 (或 INT1)的电平是高还是低。
给定时器填初值
1、机器周期也就是CPU完成一个基本操作所需要的时间。2、机器周期=1/单片机的时钟频率。
3、51单片机内部时钟频率是外部时钟的12分频。也就是说当外部晶振的频率输入到单片机里面的时候要进行12分频。比如说你用的是12MHZ的晶振,那么单片机内部的时钟频率就是12/12MHZ,当你使用12MHZ的外部晶振的时候。机器周期=1/1M=1us。
4、单片机的晶振频率12M,震荡周期为 1/12us
单片机机器周期:12个震荡周期 = 1个机器周期,即加一次1us.
打开定时器中断
//ET0,定时/计数器T0中断允许位;ET1,定时/计数器T1中断允许位;
打开定时器(开始计数) // TR0 = 1 / TR1 = 1
写中断服务函数 //中断服务函数不能有参数和返回值
void ISR_Timer0( void ) interrupt 1(中断服务函数标志) { 1.重新赋初值 2.实现功能 }
中断服务函数标志:0 - 外部中断0;1 - 定时器中断0;2 - 外部中断1;3 - 定时器中断1;4 - 串行口中断
二、定时/计数器的工作原理
描述一:
定时/计数器实质上是一个加1计数器。它随着计数器的输入脉冲进行自加1,也就是每来一个脉冲,计数器就自动加1,当加到计数器为全1时,再输入一个脉冲就使计数器回零,且计数器的溢出使相应的中断标志位置1,向CPU发出中断请求(定时/计数器中断允许时)。如果定时/计数器工作于定时模式,则表示定时时间已到;如果工作于计数模式,则表示计数值已满。
可见,由溢出时计数器的值减去计数初值才是加1计数器的计数值。
描述二:
定时器中断服务程序的中断源是定时器,由晶振振荡产生内部计数功能,每次自加1。当计数器计数超过溢出值,TF0/TF1置位,产生溢出中断请求,CPU自动中断当前执行任务,把程序当前位置入栈,保护现场,然后跳到中断服务函数,执行中断服务函数后,TF0/TF1置0,恢复现场,回到主程序继续执行被中断的地方。
【注】课外拓展,学会定时器的控制寄存器中的其他bit位代表的含义
相关文章推荐
- hdu 2717 Catch That Cow bfs搜索 解题报告
- 2015-微软预科生计划-面试题-Swimming Plans
- C++第二次上机-作业
- vagrant使用三种网络配置
- HDOJ 1164 Eddy's research I(拆分成素数因子)
- Qt有限状态机简单介绍
- IOS - UIImage
- HDOJ 1164 Eddy's research I(拆分成素数因子)
- 改变codeblocks里面各种注释的颜色。
- Android实习生面试记录-蘑菇街、网易等
- VE设计#5 表现层delete界面
- [转载]python 爬虫总结
- ASP.NET网络编程学习第二步:简单理解ASP.NET
- Tomcat源码导入eclipse的步骤
- Git的环境搭建与安装
- cocos2dx 3.3 + lua 学习笔记(02)--- 游戏场景的基本搭建
- LeetCode Algorithms #66 <Remove Element>
- C# 调用c库
- redis技巧--IP地址查询对应城市
- 获取标签的属性