51单片机定时/计数器的功能实现
来源:互联网 发布:淘宝美工怎么自学 编辑:程序博客网 时间:2024/05/27 20:50
8051单片机内部有两个16位的定时/计数器:T0和T1
定时器用途:延时和脉宽测量
读取方式:软件读取和中断
公式:
T(初值)=2^N-定时时间/机器周期时间
机器周期时间=12/fosc
N:代表几位定时器,有13 16 8位定时器
定时时间:希望设定时间,例如希望设定时间是65.535,初值就是0
fosc:晶振频率,一般用的多的晶振频率是12
四种工作方式,在TMOD中设置:
M1 M0=0X00,方式0,13位计数器
M1 M0=0X01,方式1,16位计数器,用的最多
M1 M0=0X10,方式2,8位计数器
M1 M0=0X11,方式3,8位计数器
例如:
如果我们希望定时0.2ms,定时单位用的us
65536-200/1=65336=FF38H;
初值放在TH0 TL0中,分别是高八位和低八位
TH0=0XFF;TL0=0X38;
当我们写程序的时候也可以不用计算,直接使用公式代入,例如:
TH0= -设置的定时时间/256;
TL0= -设置的定时时间%256;
定时器的实现过程:
1.给定时器设置初值(TH0 TL0的初始化)
2.打开定时器中断:ET0 =1 或 ET1=1;
3.启动定时器:TR0 =1 或 TR1=1;
4.打开全局中断:EA=1;
5.配置定时器工作方式:TMOD=0x01;
如果定时器到了TF0=1 或 TF1=1;
一旦定时器到了就会触发中断,进入中断函数中执行函数中语句。
注:一旦进入中断,定时器的初值又会从0开始,所以在中断函数中必须重新将TH0和TL0赋初值。
简单的定时器中断的实现:
#include <reg51.h>sbit LED= P0^0;void main(){P0 = 0xff;EA = 1;//允许所有中断ET0 = 1;//定时器中断0TMOD |= 0x01;//设置初值TH0 = 0x3c;//设置了初值就会不断的加1,加到溢出TL0 = 0xb0;//TH0 = 65536-50000/256;//TL0 = 65536-50000%256TR0 = 1;//定时器0开始工作while(1);//不让程序结束出去,一旦发生中断就会跳到中断}void intersrv1(void) interrupt 1 //定时器中断,遇到定时器溢出//了就会触发中断{TH0 = 0x3c;//又要重新赋初值TL0 = 0xb0;LED = !LED;//和原来的状态相反,定时精确到0.001ms}
0 0
- 51单片机定时/计数器的功能实现
- 51单片机的定时/计数器
- 单片机的定时/计数器
- 51单片机定时计数器
- 单片机定时功能的实现
- 51单片机的中断与定时计数器尝试
- 学习笔记之-51单片机定时计数器
- 单片机之定时/计数器
- 单片机定时/计数器
- 51单片机的定时器/计数器
- 基于proteus的51单片机仿真实例七十七、使用555实现定时功能应用实例
- 基于proteus的51单片机仿真实例五十七、定时器/计数器T0的定时实例
- 基于proteus的51单片机仿真实例五十八、定时器/计数器T1的定时实例
- 【51单片机学习过程记录】8 中断 之定时计数器0的使用
- 【51单片机学习过程记录】9 中断之定时计数器0的使用2
- 【51单片机学习过程记录】10 中断之定时计数器1的应用
- 单片机定时/计数器的四种工作方式
- 52单片机中定时/计数器2的研究
- Java解决URL中文乱码问题的文章
- JNI学习积累之一 ---- 常用函数大全
- 为 GridLayout 的 RecyclerView 设置 item 间距,实现所有 Item 靠边对齐,中间留白的效果
- zabbix监控cpu参数信息
- caffe多GPU上手
- 51单片机定时/计数器的功能实现
- 二分查找
- 进程学习(1)
- 【Linux】文件描述符和FILE结构体
- Android 通过包名启动另一个应用(APP)
- mysql数据库sql语句的一些常用优化方法
- instanceof的使用
- 三、SCM 数码管&FPGA 数码管
- C++学习笔记-虚函数及虚函数表