-
C51 定时器
2018-05-01 21:19:22C51单片机 ZLG7289 代码包含 包含C8051f020和ZLG7289头文件 -
51定时器计算51定时器计算51定时器计算
2009-03-04 15:16:3151定时器计算51定时器计算51定时器计算51定时器计算 -
51 定时器
2018-07-22 16:18:39定时器0 void InitTimer0(void) { TMOD |= 0x01; /* 使用模式1,16位定时器 */ ET0 = 1; /* 允许定时器T0中断 */ EA = 1; ...定时器0
void InitTimer0(void) { TMOD |= 0x01; /* 使用模式1,16位定时器 */ ET0 = 1; /* 允许定时器T0中断 */ EA = 1; /* 开总中断 */ TR0 = 1; /* 开定时器T0 */ } void Timer0(void) interrupt 1 { TH0 = 0xFE; /* 频率,高8 */ TL0 = 0xFE; /* 频率,低8 */ }
定时器1
void InitTimer1(void) { TMOD |= 0x01; /* 工作方式1 */ ET1 = 1; //打开定时器1中断 EA = 1; //打开总中断 TR1 = 1; //打开定时器 } void Timer1(void) interrupt 3 { TH1 = 0xE; /* 赋值,高8 */ TL1 = 0xE; /* 频率,低8 */ }
-
51定时器
2017-07-29 14:23:52一、MCS-51单片机的定时器/计数器概念 单片机中的定时器和计数器其实是同一个物理的电子元件,只不过计数器记录的是单片机外部发生的事情(接受的是外部脉冲),而定时器则是由单片机自身提供的一个非常稳定的计数器,...转自:http://bbs.elecfans.com/jishu_216681_1_1.html一、MCS-51单片机的定时器/计数器概念
单片机中的定时器和计数器其实是同一个物理的电子元件,只不过计数器记录的是单片机外部发生的事情(接受的是外部脉冲),而定时器则是由单片机自身提供的一个非常稳定的计数器,这个稳定的计数器就是单片机上连接的晶振部件;MCS-51单片机的晶振经过12分频之后提供给单片机的只有1MHZ的稳定脉冲;晶振的频率是非常准确的,所以单片机的计数脉冲之间的时间间隔也是非常准确的,这个准确的时间间隔是1微秒;
MCS-51单片机外接的是12MHZ的晶振(实际上是11.0592MHZ),所以,MCS-51单片机内部的工作频率(时钟脉冲频率)是12MHZ/12=1MHZ=1000000次/秒=1000000条指令/秒=1000000次/1000000微秒=1次/微秒=1条指令/微秒;也就是说,晶振振荡一次,就会给单片机提供一个时钟脉冲,花费的时间是1微秒,此时,CPU会执行一条指令,经历一个机器周期;即:1个时钟脉冲=1个机器周期=1微秒=1条指令;
注:个人PC机上的CPU主频是晶振经过倍频之后的频率,这一点恰好与MCS-51单片机的相反,MCS-51单片机的主频是晶振经过分频之后的频率;
总之:MCS-51单片机中的时间概念就是通过计数脉冲的个数来测量出来的;1个脉冲=1微秒=1条指令=1个机器周期;
MCS-51单片机定时器/计数器的简单结构图:
8051系列单片机有两个定时器:T0和T1,分别称为定时器和定时器T1,这两个定时器都是16位的定时器/计数器;8052系列单片机增加了第三个定时器/计数器T2;它们都有定时或事件计数功能,常用于时间控制、延时、对外部时间计数和检测等场合;
二、定时器/计数器的结构
8051单片机的两个定时器T0和T1分别都由两个特殊功能寄存器组成;T0由特殊功能寄存器TH0和TL0构成,而T1则是由TH1和TL1构成;
作为定时器使用时,定时器计数8051单片机片内振荡器输出经过12分频后的脉冲个数,即:每个机器周期使定时器T0/T1的寄存器值自动累加1,直到溢出,溢出后继续从0开始循环计数;所以,定时器的分辨率是时钟振荡频率的1/12;
作为计数器使用时,通过引脚T0(P3.4)或T1(P3.5)对外部脉冲信号进行计数,当输入的外部脉冲信号发生从1到0的负跳变时,计数器的值就自动加1;计数器的最高频率一般是时钟振荡频率的1/24;
由此可知,不论是定时器还是计数器工作方式,定时器T0和T1均不占用CPU的时间,除非定时器/计数器T0和T1溢出,才可能引起CPU中断,转而去执行中断处理程序;所以说,定时器/计数器是单片机中效率高而工作灵活的部件;
三、定时器/计数器的工作模式
除了可选择定时器和计数器的这两种工作方式外,每个定时器/计数器都有4种工作模式;
在模式0、1和2时,T0和T1的工作模式相同;在模式3时,两个定时器/计数器的工作模式不同;
工作模式0:
由TL0的低5位和TH0的全部8位共同构成一个13位的定时器/计数器;定时器/计数器启动后,定时或计数脉冲个数加到TL0上,从预先设置的初值(时间常数)开始累加,不断递增1;当 TL0计满后,向TH0进位,直到13位寄存器计满溢出;溢出时,定时器/计数器硬件会自动地把13位的寄存器值清0,中断标记TF0置1;如果需要进一步定时/计数,需要使用相关指令重置时间常数,并把定时器/计数器的中断标记TF0置0;工作模式0的结构如下图:
工作模式1:
模式1与模式0几乎完全相同,唯一的区别就是,模式1中的寄存器TH0和TL0共同构成的是一个16位定时器/计数器来参与操作,因此比模式0中的定时/计数范围更大;工作模式1的结构如下图:
工作模式2:
这种模式又称为自动再装入预置数模式;当定时器/计数器的寄存器TH0/TL0的值溢出时,定时器/计数器硬件设备会自动把寄存器TH0/TL0的值清0,以重新开始操作;但是有时候,我们的定时/计数操作是需要多次重复定时/计数的,如果溢出时不做任何处理,那么,在第二轮定时/计数时就是从0开始定时/计数了,而这并不是我们想要的;所以,要保证每次溢出之后,在重新开始定时/计数的操作是我们想要的,那就要把预置数(时间常数)重新装入某个地方;而重新装入预置数的操作是硬件设备自动完成的,不需要人工干预所以,这种工作模式就叫自动再装入预置数方式;既然需要重新装入预置数,那么预置数就必须要存放在某个地方,才能保证重装操作成功;在工作模式2中,把自动重装入的预置数存放在定时器/计数器的寄存器的高8位中,也就是存放在TH0中,而只留下TL0参与定时/计数操作;显然,定时/计数的方位小了很多;
注:这个工作模式常用于波特率发生器(串口通讯),T1工作在串口模式2;用于这种方式时,定时器就是为了提供一个时间基准;计数溢出之后,不需要做太多的事情,只做一件事就可以,就是重新装入预置数,再开始重新计数,而且中间不需要任何延时;工作模式2的结构如下图:
工作模式3:
由于定时器/计数器T1没有工作模式3,如果把定时器/计数器T0设置为工作模式3,那么TL0和TH0将被分割成两个相互独立的8位定时器/计数器;工作模式3的结构如下图:
四、定时器/计数器的定时/计数范围
工作方式0——13位定时器 / 计数器 工作 模式,最多可计数2的13次方 次,即:8192次,[0,8191];
工作方式1——16位定时器/计数器 工作 模式,最多可计数2的16次方 次,即:65536次,[0,65535];
工作方式2——8位定时器/计数器工作模式,计算次数最多为2^8,即256,,[0,255];
工作方式3——8位定时器/计数器工作模式 ,计算次数最多为2^8,即256,,[0,255];
预置数的计算公式:预置数=最大值-需要计数的次数;
五、定时器/计数器的控制寄存器
8051单片机设计了两个8位的特殊功能寄存器来控制定时器/计数器的工作状态;这两个特殊功能寄存器分别是TMOD和TCON;它俩都在特殊功能寄存器区;1、工作模式控制寄存器TMOD(89h):
2、工作状态控制寄存器TCON(88H):
注:由于8051单片机的定时器/计数器使用的时钟脉冲是外部晶振(12MHZ)经过12分频(12MHZ/12=1MHZ)之后的频率,所以,一个时钟脉冲就是1微秒;所以,8192个脉冲=8192微秒=8.192毫秒; 65536个脉冲=65536微秒=65.536毫秒; 256个脉冲=256微秒=0.256毫秒;
1、设置定时器/计数器的工作模式TMOD(常用的是模式1:TMOD=0x01);
2、装入预置数到THx和TLx中(THx=TLx=MAX(8192/65536/256)-计数次数);
3、如果工作在中断方式,则需要开定时器/计数器的中断TCON中的标志位:TF0/TF1=0/1;
4、启动定时器/计数器:TR0/TR1=1; -
51定时器中断
2017-02-27 13:59:4351定时器中断 -
51定时器计算器
2019-02-22 11:07:5651定时器计算,C51单片机程序编程时使用,方便计算定时器的初值,对使用定时器计时的设计起很大的帮助,只要输入系统频率,定时器类型和需定时多少ms,就可以得到一个数值,直接代入就可以。 -
51定时器计算
2017-07-06 17:46:5251定时器计算 根据定时器,晶振频率,定时时长 计算出初值 -
c51定时器程序
2015-05-31 23:32:11C51定时器程序 , 此程序用c51编写,是菜鸟级入门要学习的 -
51定时器计算工具
2014-08-12 21:01:1051定时器计算工具,可用于51定时器计算,定时器自动计算 -
C51定时器计数器
2021-03-16 16:16:09目录C51定时器计数器电路图定时/计数器的结构和工作原理相关寄存器 C51定时器计数器 电路图 定时/计数器的结构和工作原理 定时/计数器的实质是加1计数器(16位),由高8位和低8位两个寄存器TH1,TH2组成 TMOD是...目录
C51定时器计数器
电路图
定时/计数器的结构和工作原理
1,定时/计数器的实质是加1计数器(16位),由高8位和低8位两个寄存器TH1,TH2组成
TH1+TL0的模是65536,可表达范围0~65535,65535+1时就会溢出产生相关中断
2,TMOD是定时/计数器的工作方式寄存器,确定工作方式和功能;
3,TCON是控制寄存器,控制T0、T1的启动和停止及设置溢出标志
定时计数器相关寄存器
TCON寄存器(中断的请求与外部中断的选择)
位 D7 D6 D5 D4 D3 D2 D1 D0 addr:88H TF1 TR1 TF0 TR0 IE1 IT1 IE0 IT0 中断源 T1 T1 T0 T0 INT1 INT1 INT0 INT0 -
IT0和IT1是设置外部中断的触发方式
当其为0时,为低电平触发方式
当其为1时,为负跳变触发方式 -
IE0和IE1是外部中断标志位
-
下面是定时/计数器的控制
TF0和TF1是定时器的中断标志
TR1和TR0是打开相应的定时器TF1:T1溢出中断请求标志位,T1计数溢出时由硬件自动置 TF1为1。CPU响应中断后TF1由硬件自动清0。T1工作时,CPU可随时 查询TF1的状态。所以,TF1可用作查询测试的标志。TF1也可以用软 件置1或清0,同硬件置1或清0的效果一样。 TR1:T1运行控制位。TR1置1时,T1开始工作;TR1置0时,T1停止工作。TR1由软件置1或清0。所以,用软件可控制定时/计数器的启动与停止。 TF0:T0溢出中断请求标志位,其功能与TF1同。TR0 TR0:T0运行控制位,其功能与TR1类同。
IE寄存器(开关)
位 D7 D6 D5 D4 D3 D2 D1 D0 addr:A8H EA ES ET1 EX1 ET0 EX0 中断源 串 T1 INT1 T0 INT0 - EX0外部中断0允许位;
- ET0定时/计数器T0中断允许位;
- EX1 外部中断0允许位;
- ET1 定时/计数器T1中断允许位;
- ES 串行口中断允许位;
- EA CPU中断允许(总允许)位;
计数存放寄存器
Mnemonic ADD NAME 7~0位 TL0 8Ah Timer / Counter 0 Low Byte TH0 8Ch Timer / Counter 0 High Byte TL1 8Bh Timer / Counter 0 High Byte TH1 8Dh Timer / Counter 1 High Byte
TMOD寄存器(寄存器工作方式)
位 7 6 5 4 3 2 1 0 addr:89H GATE C/T1 M1 M0 GATE C/T0 M1 M0 中断源 T1 T1 T1 T1 T0 T0 T0 T0 GATE:门控位。GATE=0时,只要用软件使TCON中的TR0或TR1为1,就可以启动定时/计数器工作;GATA=1时,要用软件使TR0或TR1为1,同时外部中断引脚或也为高电平时,才能启动定时/计数器工作
C/T :定时/计数模式选择位。 C/T =0为定时模式; C/T =1为计数模式。
M1M0:工作方式设置位。定时/计数器有四种工作方式,由M1M0进行设置。M1M0设置的工作方式
M1 M0 工作方式 功能简述 0 0 方式0 13位计数器,TLi只用低5位 0 1 方式1 16位计数器 1 0 方式2 8位自动重装计数器。仅TLi作为计数器,THi的值不变。TLi溢出, THi中的值自动装入TLi中. 1 1 方式3 T0分为两个独立的8位计数器
方式0
方式0为13位计数,由TL0的低5位(高3位未用)和TH0的8位组成。TL0的低5位溢出时向TH0进位,TH0溢出时,置位TCON中的TF0标志,向CPU发出中断请求
方式1
方式1的计数位数是16位,由TL0作为低8位、TH0作为高8位,组成了16位加1计数器
计数个数与计数初值的关系为: X=216-N
方式2
方式2为自动重装初值的8位计数方式
计数个数与计数初值的关系为: X=28-N
方式3
方式3只适用于定时/计数器T0,定时器T1处于方式3时相当于TR1=0,停止计数
工作方式3将T0分成为两个独立的8位计数器TL0和TH0 。
定时器操作步骤:
1,选择工作方式(设置M1,M0)
2,选择控制方式(设置GATE)
3,选择定时器还是计数器模式(设置C/T)
4,给定时/计数器赋初值(设置THx和TLx)
5,开启定时器中断(设置ET0或ET1)
6,开启总中断(设置EA)
7,打开计数器(设置TR1或TR0)
8,编写中断程序
周期晶振
1,晶振频率(frequency oscillate): 晶体振荡器的固有频率
2,时钟周期(Clock Cycle): 时钟周期是计算机中最基本的、最小的时间单位,为晶振频率12Mhz倒数
3,状态周期: CPU从一个状态转换到另一状态所需要的时间,一个状态周期S包含2个节拍,前一时钟周期称为P1节拍,后一时钟周期称为P2节拍
4,机器周期: 一个机器周期包含六个状态例如,取指令、存储器读、存储器写等。即机器周期等于6个状态周期,而一个状态周期是2个时钟周期,因此一个机器周期又等于12个时钟周期
5,指令周期: 取出并执行一条指令的时间
6,总线周期: 访问1次存储器和I/O端口操作所需要的时间
时间比较:时钟周期 < 状态周期 < 机器周期 < 指令周期 < 总线周期
初值计算
这里使用16位的定时器,那单片机定时器0的最大计数就是65536.晶振约为12MHZ(11.0592MHZ),那一个机器周期就是1us,定时器 0工作在方式1时最大定时65.536ms
1,计数值 = 定时时间 / (振荡周期 * 12)
2,初值 = 65536 - 计数值
3,定时时间 =(振荡周期 * 12) * (65536 - 初值)
例子
//第一个led灯以500ms一次的频率闪烁 void timer1_init()//初始化 { TMOD = 0x10; //定时器0选择工作方式1 TH1 = 0x4C; //设置初始值,定时50ms TL1 = 0x00; EA = 1; //打开总中断 ET1 = 1; //打开定时器0中断 TR1 = 1; //启动定时器0 } void main() { int i = 0; led = 1; timer1_init();//定时器1的初始化 while(1) { if(i==10) { led = ~led; i = 0; //注意i需要零 } } } void timer1() interrupt 3 //中断服务函数 { TH1 = 0x4C; //设置初始值,定时50ms,这里晶振用12 TL1 = 0x00; i++; }
…Thank you for reading…______________________Heisenberg_Poppings
-
-
51定时器初值
2021-02-03 21:24:2451定时器初值时钟周期机器周期指令周期初值计算 时钟周期 是指振荡源的周期,,定义为时钟脉冲的倒数 外部晶振12M 则时钟周期为 1s/12M = 1S/12 000 000 = 1/12us 外部晶振11.0592M 则时钟周期为 1s/11.0592M = 1S...时钟周期
是指振荡源的周期,,定义为时钟脉冲的倒数
外部晶振12M 则时钟周期为 1s/12M = 1S/12 000 000 = 1/12us 外部晶振11.0592M 则时钟周期为 1s/11.0592M = 1S/11 059 200 = 1/11.0592us 外部晶振24M 则时钟周期为 1s/24M = 1S/24 000 000 = 1/24us
机器周期
单片机执行一单位指令所需要的 时钟周期 个数
机器周期也称为CPU周期。
在计算机中,为了便于管理,常把一条指令的执行过程划分为若干个阶段(如取指、译码、执行等),每一阶段完成一个基本操作。完成一个基本操作所需要的时间称为机器周期。
一般情况下,一个机器周期由若干个时钟周期组成。 如 1T,就表示,需要 1个时钟周期; 12T 即为 12个时钟周期。 这些都只是
一单位指令的时间(如自增、自减等),多单位指令时间进行倍乘(如赋值语句需要2个机械周期,即乘以2倍),
传统的8051单片机就是12T的,即完成1个单位指令所需时间为12个时钟周期 。 1T的完成1个单位指令所需时间则为1个机器周期。1T 12Mhz的机器周期为1/12us 12T 12Mhz的机器周期为1us
1T的要比12T的速度更快
指令周期
CPU完成一条指令的时间叫指令周期
一般一条完整的指令包括:取指周期、间址周期、执行周期、中断周期。
初值计算
- 确定机器周期是多少,如1T,或6T,或12T
- 确定晶振频率,如11.0592Mhz,或24Mhz,12Mhz,8Mhz
- 确定定时时间,10ms,20ms,50ms等
/* 1T 12Mhz 1ms 0XFF FF - (1ms/1s)*(12 000 000*1) 值为53,536,0XD1 20 将其高八位填入TH,低八位填入TL */ TH1 = 0xD1; TL1 = 0X20; /* 12T 11.0592 50ms 0XFF FF - (50ms/1s)*(11 059 200/12) 值为19456,0X4C00 将其高八位填入TH,低八位填入TL */ TH0 = 0x4C; TL0 = 0x00;
即
0XFFFF-(初值/1s)*(晶振频率/?T)
unsigned char Return_TH(unsigned char S,unsigned MHz,unsigned char unsigned char Tim_us) { unsigned char TH; TH = (0XFFFF-((Tim/1 000 000)*((MHZ*1 000 000)/S))))&0XFF return TH; } unsigned char Return_TL(unsigned char S,unsigned MHz,unsigned char unsigned char Tim_us) { unsigned char TL; TL = (0XFFFF-((Tim/1 000 000)*((MHZ*1 000 000)/S))))>>8; return TL; } int main() { unsigned char a,b,c,TH1,TL1; printf("请输入---分频数S---晶振频率Mhz----定时时间us--"); scanf("%d%d%d",&a,&b,&c); TH1 = Return_TH(a,b,c); TL1 = Return_TL(a,b,c); }
差不多这样,毕竟有现成的工具可以用,HHH
-
51定时器时间计算
2011-12-07 17:23:0951定时器时间计算 -
4月15日C51定时器.docx
2020-04-18 20:38:06有关于c51定时器的个人理解,定时器的如何配备,如何能够计算定时器的时间,可以私聊我,TMOD工作方式寄存器,TCON控制寄存器的介绍。 -
51定时器程序
2018-11-28 21:03:2551单片机定时器控制LED灯闪烁程序,编译环境keil4,经下载到开发板上实验成功。 -
51定时器计算---
2010-05-11 13:59:1251定时器计算.rar 51定时器计算.rar 51定时器计算.rar 51定时器计算.rar -
51定时器设置计算软件
2012-01-08 12:59:0851定时器设置计算 计算定时器所需要配置的值 -
89C51定时器学习.doc
2011-12-10 16:56:2189C51定时器学习,心得记录。89C51定时器学习,心得记录 -
51定时器定时时间计算器
2008-11-25 13:25:5251定时器定时时间计算器,51定时器,定时时间计算,定时时间计算器 -
C51定时器和中断-详解
2012-10-16 11:29:33C51定时器和中断-详解.pdf -
超级好用的51定时器
2011-06-28 18:59:55很好用的51定时器 简单实用 很不错 各功能齐全 值得拥有 -
单片机 计数器 定时器计算软 51定时器计算.EXE
2009-06-18 15:08:01单片机 计数器 定时器计算软件 51定时器计算.EXE -
C51定时器课件
2011-11-26 10:12:35C51课件 定时器 详细介绍了C51中定时器的应用基础 -
51定时器处置计算软件
2009-07-18 11:25:2051定时器处置计算软件 准确计算定时器的时间 -
51定时器计算软件.RAR
2011-07-01 14:37:2851定时器计算软件.RAR ,是单片机计算定时器很方便的软件! -
51定时器 18B20
2018-01-06 12:25:0451单片机 定时器 18B20 亲测可用。。。。。。。。。。。。。。。。 -
51定时器计数初值的计算公式
2013-05-09 15:06:4851定时器计数初值的计算公式的小工具 希望对大家有用 -
C51定时器计算.exe
2008-01-28 21:25:08C51定时器计算.exe