单片机定时器TMOD与TCON
TMOD:定时器/计数器模式控制寄存器TMOD是一个逐位定义的8位寄存器,但只能使用字节寻址,其字节地址为89H。
D7 |
D6 |
D5 |
D4 |
D3 |
D2 |
D1 |
D0 |
GATE |
C/T |
M1 |
M0 |
GATE |
C/T |
M1 |
M0 |
D0~D3为T0定时/计数器的设置,D4~D7为T1定时/计数器的设置 。
GATE :为门控位,GATE=0时,只要在编写程序时,使TCON中的TRO或TR1为1,就可以启动定时器/计数器工作。
GATE=1时,不仅要在编写程序时,使TCON中的TRO或TR1为1,且需要外部引脚也为高电平,才能 工作。
C/T :定时/计数模式切换,C/T=0时为定时模式,C/T=1时为计数模式。
M1,M0:用来选择定时计/计数器的工作方式,一般使用都是采用16位的计时计数器。
M1 |
M0 |
工作模式 |
说明 |
0 |
0 |
0 |
13位计时计数器 (8192) |
0 |
1 |
1 |
16位计时计数器 (65536) |
1 |
0 |
2 |
8位计时计数器,可自动重新载入计数值 (256) |
1 |
1 |
3 |
当成两组独立的8位计时器(256,T0和T1不能同时用) |
TCON:控制寄存器,作用是控制定时器的启、停,标志定时器溢出和中断情况。
D7 |
D6 |
D5 |
D4 |
D3 |
D2 |
D1 |
D0 |
TF1 |
TR1 |
TF0 |
TR0 |
IE1 |
IT1 |
IE0 |
IT0 |
TF1 :TF1=1表示T1有中断产生。(Timer Flag,定时器标志位)
TR1 :TR1=1表示T1开始运行。(单片机中T0引脚,需要高低电平的驱动)
TF0 :TF0=1表示T0有中断产生。
TR0 :TR0=1表示T0开始运行。(单片机中T1引脚,需要高低电平的驱动)
IE1 :IE1=1表示INT1有中断产生。
IT1 :IT1=1表示INT1为下降沿触发,IT1=0表示INT1为低电平触发。
IE0 :IE0=1表示INT0有中断产生。
IT0 :IT0=1表示INT0为下降沿(负跳变)触发,IT0=0表示INT0为低电平触发。
中断允许寄存器 IE (A8H)
D7 |
D6 |
D5 |
D4 |
D3 |
D2 |
D1 |
D0 |
EA |
— |
ET2 |
ES |
ET1 |
EX1 |
ET0 |
EX0 |
EA :整体中断允许位;EA=1允许中断。
ET2 :T2中断允许位;ET2=1允许中断(S52才有)。
ES :串行中断允许位;ES=1允许中断。
ET1 :T1中断允许位;ET1=1允许中断。
EX1 :INT1中断允许位;EX1=1允许中断。
ET0 :T0中断允许位;ET0=1允许中断。
EX0 :INT0中断允许位;EX0=1允许中断。
在程序中,通过设订两个8位寄存器中TH与TL的值,来决定定时值和计数值。TH与TL的计算过程如下:
假设定时器的时间常数为X,定时器的位数为N
定时时间T=(2的N次方-X)12/单片机晶振频率 (例如11.0592MHZ的振荡器频率F=1/11.0592)
N为定时器的工作方式(关于定时/计数器的4中工作方式,以下会有具体介绍):
方式0时,N=13(此为TH为8位,TL为5位)
方式1时,N=16(此为TH为8位,TL为8位)
方式2时,N=8(此为TH为8位,TL为0位) 方式3时,N=8(此为TH为8位,TL为8位,只适用于T0,且T0被分成两个独立的8位计数器TH与TL)
根据定时时间和工作方式,通过公式:定时时间T=(2的N次方-X)12/单片机晶振频率,计算出时间常数X
把X转换成二进制数,高8位送给TH1,低8位送给TL1,就可以启动定时器开始定时了。
定时器的3种工作方式图解:
工作方式0:
工作方式1:
工作方式2:
工作方式3:
总结定时器的操作步骤如下:
1.选择工作方式(设置M0,M1的值)
2.选择控制方式GATE(为0是只要软件设定好参数即可,为1则需要软件设定参数,且定时器/计数器的中断引脚需要为高电平)
3.确定定时器的工作模式,是定时模式还是计数模式 C/T.
4.给定时器设初值(设置THX与TLX)
5.开启定时器中断(设置ET0或ET1)
6.开启总中断(设置EA的值)
7.定时器/计数器的选择T0/T1(设置TR1或TR0的值)
例:设置一个LED灯每500ms的评率闪烁
#include<reg52.h>sbit led = P1^0;
int i = 0;void timer1_init()
{TMOD = 0x10; //定时器0选择工作方式1TH1 = 0x4C; //设置初始值,定时50msTL1 = 0x00; EA = 1; //打开总中断ET1 = 1; //打开定时器0中断TR1 = 1; //启动定时器0
}void main()
{led = 1;timer1_init();//定时器1的初始化while(1){if(i==10){led = ~led;i = 0; //注意i需要零}}
}void timer1() interrupt 3
{TH1 = 0x4C; //设置初始值,定时50msTL1 = 0x00;i++;
}
¡定时器操作步骤:
选择工作方式(设
¡定时器操作步骤:
选择工作方式(设置M1,M0)
选择控制方式(设置GATE)
选择定时器还是计数器模式(设置C/T)
给定时/计数器赋初值(设置THx和TLx
开启定时器中断(设置ET0或ET1
开启总中断(设置EA)
打开计数器(设置TR1或TR0)
置M1,M0)
选择控制方式(设置GATE)
选择定时器还是计数器模式(设置C/T)
给定时/计数器赋初值(设置THx和TLx
开启定时器中断(设置ET0或ET1)
开启总中断(设置EA)
打开计数器(设置TR1或TR0)
¡定时器操作步骤
选择工作方式(设置M1,M0)
选择控制方式(设置GATE)
选择定时器还是计数器模式(设置C/
给定时/计数器赋初值(设置THx和TLx)
开启定时器中断(设置ET0或ET1
开启总中断(设置EA)
打开计数器(设置TR1或TR0)
由TL0的低5位(高3位未用)和TH0的8位组成。TL0的低5位溢出时向TH0进位,TH0溢出时,置位TCON中的TF0标志,向CPU发出中断请求。由TL0的低5位(高3位未用)和TH0的8位组成。TL0的低5位出时向TH0进位,TH0溢出时,置位TCON中的TF0标志,向CPU发出中断请求。,由TL0的低5位(高3位未用)和TH0的8位组成。TL0的低5位溢出时向TH0进位,TH0溢出时,置位TCON中的TF0
单片机定时器TMOD与TCON相关推荐
- 单片机定时器实验两位倒计时秒表_第5章 定时器与数码管基础
第5章 定时器与数码管基础 通过上节课的实验,大家会发现,我们逐渐进入比较实质性的学习了,需要记住的内容也更多了,个别地方可能会感觉吃力.但是大家不要担心,要有信心.这个跟小孩学走路一样,刚开始走得不 ...
- 单片机原理及其应用——单片机定时器中断实验(八段数码管依次显示0~9数字)
目录 一.实验要求 二.知识要点 (一)单片机定时器/计数器 (二)相关的特殊功能寄存器 1.工作方式寄存器TMOD 2.定时器/计数器控制寄存器TCON (三)定时器/计数器的工作方式 1.工作方式 ...
- 单片机定时器实验两位倒计时秒表_51单片机基础与应用8天速成(三)
在讲授中断这一概念时,人们总是喜欢举洗衣服烧水的例子: 话说,一天"你"独自在家,为了泡脚给自己烧上了一壶水,然后想着明天没有衣服穿了,就去阳台洗起了衣服.过了十几分钟," ...
- 单片机定时器_单片机定时器/计数器基本原理
目前常用的单片机中往往都配备了定时器/计数器.在AT89S52芯片内包含有三个16位的定时器/计数器:T0.T1和T2,其核心是加1计数器.我们主要要求掌握T0和T1的结构和功能.学习中要注意从电路结 ...
- C51单片机————定时器计数器
51单片机定时器/计数器 定时(定时控制.测量.延时...)和计数(对外部事件统计数目). Created with Raphaël 2.1.2张三张三李四李四嘿,四哥, 定时器和计数器有哪几种实现哦 ...
- c语言 定时器作用,单片机定时器的作用及使用方法详解
单片机定时器的作用及使用方法详解 单片机定时器在单片机的功能是很重要的,它一般被用作定时功能,来做定时检测.定时响应和定时控制,并且可以产生毫秒宽的脉冲信号来驱动步进电机.计时和计数的最终功能是通过计 ...
- 51单片机——定时器的原理和使用
定时器的原理 1.cpu时序的有关知识 震荡周期:为单片机提供定时信号的震荡源的周期(由外部的晶振) 状态周期:2个震荡周期,用s表示 机械周期 6个状态周期,12个震荡周期 (12MHz的晶振1us ...
- 51单片机-定时器中断
目录 1.定时器/计数器 1.1.工作原理 1.2.相关寄存器 1.3.工作模式(模式1) 2.中断系统 2.1.中断的概念 2.2.中断结构 2.3.中断源 2.4.相关寄存器 3.如何配置定时器中 ...
- 51单片机定时器的原理与使用
定时器是单片机的重要功能模块之一,在检测.控制领域有广泛应用.定时器常用作定时时钟,以实现定时检测,定时响应.定时控制,并且可以产生ms宽的脉冲信号,驱动步进电机.定时和计数的最终功能都是通过计数实现 ...
- 51单片机定时器(T0/T1)的使用与配置流程
第一步:配置工作方式寄存器-TMOD TMOD寄存器的字节地址为89H,不能位寻址.一般采用整体赋值的方式进行配置:如:TMOD=0x01 // 0000 0001 GATE=0,定时器仅受TCON寄 ...
最新文章
- PHP运算符种类很多 主要有,PHP运算符的类别概览
- android MIPI屏 导航栏丢失
- ansible-playbook jdk安装
- 【流量劫持】躲避 HSTS 的 HTTPS 劫持
- php mysql随机数不重复,js生成不重复的随机数
- 安卓应用自动化测试工具汇总
- Windows下安装BeautifulSoup
- 删除顺序表中指定值的所有元素(C++,vector)
- python列表count()函数
- JSK-61 二进制加法【大数】(废除!!!)
- 智能优化算法:花授粉算法-附代码
- Datalogic得利捷引领工业4.0时代 携SG4 FIELDBUS安全光幕亮相两大国际工业展
- 根据列表内车牌号,统计各省市车牌占有量
- 计算机快捷键大全列表6,快捷键大全excel
- Gentoo 安装笔记 2021/8
- 《Web API 的设计与开发》读书笔记
- 模拟信号到数字信号转化_从模拟到数字再返回
- 矩阵理论——线性空间
- 周鸿祎产品秘笈:小版本成就大产品
- 淘宝天猫京东拼多多抖音苏宁1688等平台关键词监控价格API接口(店铺商品价格监控API接口调用展示)
热门文章
- IT成长中的龟兔赛跑
- ie11 java8 nc_用命令卸载Win8 IE9/IE10/IE11浏览器
- [Python从零到壹] 十八.可视化分析之Basemap地图包入门详解
- 提取地图中道路_准确度93%!人工智能如何完成高精度的地图特征推测?丨城市数据派...
- logo语言编程介绍
- 百度搜索无法显示搜索结果
- 怎样在html中加入动态图片背景,怎样在网页中插入透明flash背景 添加透明flash背景方法介绍(图文)...
- 游戏十五大基本游戏类型介绍
- windows电脑快捷键大全 - 高手总是很酷的
- [转载]在安装win7系统时如何不产生100M的系统保留分区