单片机定时器TMOD与TCON详解! |
您所在的位置:网站首页 › 单片机con是什么 › 单片机定时器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 sbit led = P1^0; int i = 0; void timer1_init() { TMOD = 0x10; //定时器0选择工作方式1 TH1 = 0x4C; //设置初始值,定时50ms TL1 = 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; //设置初始值,定时50ms TL1 = 0x00; i++; }
c51单片机中断程序中的interrupt1,2,3是由什么决定的? interruput X 语句 X是中断标号 计算公式是 :(地址-3)/8=中断标号,其中“地址”*/ 指的是 中断服务程序 的入口地址,比如: 外部中断0,入口地址为0003H,对应的中断标号为0 外部中断1,入口地址为0013H(十进制为19),对应中断标号为2 定时器0中断,入口地址为000BH(十进制为11),对应中断标号为1 定时器1中断,入口地址为001BH(十进制为27),对应标号为3 串口中断,入口地址为0023H(十进制为35),对应中断标号4 入口地址在数据手册里有 https://zhidao.baidu.com/question/365087067.html
¡定时器操作步骤: 选择工作方式(设 ¡定时器操作步骤: 选择工作方式(设置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
http://www.21ic.com/jichuzhishi/mcu/timer/2018-04-23/758372.html
6.STC89C52RC单片机定时器示例代码2: 问:在中断函数里为什么要重新赋初值呢?TH0 = XX,TL0 =XX? 因为进入中断,其值减为0,如果不重装初值,下次计数值就是65535,而不TH0 |
今日新闻 |
点击排行 |
|
推荐新闻 |
图片新闻 |
|
专题文章 |
CopyRight 2018-2019 实验室设备网 版权所有 win10的实时保护怎么永久关闭 |