51单片机的定时器问题
假设要求50ms中断,求定时器初值。
晶振11.0592M,每个机器周期时间为:t=12×(1/11.0592M) 单位:us
50ms所需机器周期为:50×1000÷t=46080
那么需要初值为:
0xFFFF-46080=65535-46080=19456=0x4C00
因此,置初值为TH=0x4c,TL=0x00,经过46080个指令周期,计数器将产生50ms定时中断。
如果需要1秒
则连续20次上述中断即可达到
51单片机定时器,晶振是12MHZ、12分频,理论上最短定时时间1微秒,
但是,CPU 运行指令 需要时间,只要中断服务程序 的运行时间 不超过定时器 定时时间,
并且 有些余量,则就不成问题,如果没有余量,则中断结束 又进入 中断,
如果 超过定时器 定时时间,则来不及 处理 定时也就不准确了。
用 C 语言编程,有可能 定时时间 过短 会有问题,有不好 计算中断用去多少时间。
如果用 汇编语言 编程,晶振是12MHZ、12分频,只是产生一个方波信号,30KHz 频率没有问题。
当然你要检测 准确性 加入计数程序后 会占用时间,
一般编程时, 在中断 服务程序中 尽量少占用时间,能不在中断服务程序中处理的 事尽量 不在
中断服务程序中 处理。
2、在我们使用定时器模式1进行定时,TH0和TL0有三种情况会发生变化:
a、直接对TH0和TL0进行写入数值操作。
b、定时器正在启动计数,TH0和TL0中的值会不断的自加。
c、当TH0和TL0计数发生溢出,即计数到0xffff时,则下一次计数会变成0x0000,并且会使中断标志位TF0置1。
1·关闭定时器是TR0=0;还是ET0=0?
--是TR0=0。
--关闭中断是ET0=0。
2`怎么关闭定时器做到不清除TH0和TL0的值?
--为什么这样问?
--楼主认为什么是清除?
--TH0和TL0的值,永远都会存在。
--任何时刻,它都有数值。
--值的范围就是00H~FFH。
什么情况下清除?
--你说呢?
--谁能清除得了?
--任何人,都清除不了它的内容。
--也别说,你砸碎它,也许就清除了。
TRn是启动/停止定时器的控制位。
ETn是使能/禁止定时器中断的控制位。
只要TRn = 0,如果软件不去改变TH和TL的值,那么TH和TL的值是不会改变的
请教51单片机前辈们一个关于定时器的问题,中断程序响应以后定时器不是...
中断响应后,定时器的值不会清零的,只有中断标志会自动清零。定时器的清零发生在定时器溢出,这时候产生中断请求(如果中断允许),从定时器溢出到MCU调用中断程序,需要一定的时间,自这期间,定时器继续运行,因此TL0的值不为0,需要在中断程序里手动清零。
有关单片机定时器的使用和定时器的介绍
1. 定时器的结构 定时器由两个寄存器组成:一个用于确定计数器的工作形式和功能,另一个用于控制单片机的启动和停止,同时也是设置溢出的标志。2. 计数过程 每次脉冲到来,计数器加1。当计数器达到全1(即FFFFH)时,再输入一个脉冲将使计数器回零,并且计数器的溢出将使TCON中的TF0或TF1置1,向CPU...
【 单片机定时器中断问题】
进入中断后,首先是系统硬件自动将TF标志位清零,如果TR没关,定时器继续工作,当再次溢出时,当然TF被硬件置1了,如果你的上次中断函数没有结束,就没法再进入本次中断处理,TF不能被置0,TR即使继续工作也,即使再溢出,也没有用了,因为TF还是1,只能等待cpu处理完上次中断内容,然后进入本次中断处理.一旦进入...
51单片机定时器初始值的问题
16位的定时器,但只能用单片机是8位的,所以,就拆分成了两个字节,高八位和低八位。TH0表示定时器0的高八位,THL0表示低八位。 组合起来就是16位。TH0和TL0的值满了(即,两个定时器寄存器的值二进制代码都为 1111 1111)时,再计一个数,即再来一个脉冲,加一个数,就形成了溢出,溢出时,...
1.单片机定时器中知道溢出时间,知道取值范围,知道时间间隔,怎么算TH...
首先应该知道一个脉冲周期是多少 ?24MHZ时,输给定时器的脉冲频率是2MHZ,一个脉冲周期是0.5US因此,此时定时 器可以最长定时65536*0.5=32.768MS 0.2秒一次不能完成,需多次累积,如一次定时20ms,累积10次,定时20MS需要计数的脉冲个数是40000个初值可以直接这么写 初值=65536-40000 且初值=...
单片机定时ET0=1什么意思?
单片机定时 ET0=1的意思是51单片机的定时器0允许中断。ET0是51系列单片机定时器0的中断允许开关,定时器中断是为了满足定时或计数溢出处理的需要而设置的,当发生计数溢出时,表示定时时间已到或者计数值已满,接着就以计数溢出信号作为中断请求去置位一个溢出标志位。这种中断请求是在单片机芯片内部发生的...
单片机定时器\/计数器有哪几种工作方式?
1. 8051单片机内置两个定时器\/计数器,分别是T0和T1。2. T0和T1各有四种工作模式。方式0为13位定时\/计数模式,其最大计数值为2^13,即8192,对应于8192个机器周期。此模式为兼容旧单片机而设计,初学者无需深入掌握。3. 方式1是16位定时\/计数模式,其最大计数值为2^16,即65536,能够实现最大...
有关单片机定时器的使用和定时器的介绍
导语:单片机,其实就是一种用于集成电路中的芯片,而单片机的定时器是一个电子元件,它是一个稳定的计数器,是由单片机本身提供的。它也是单片机上的一个连接部件,可以用来编程。定时器还有一个功能显而易见就是可以用来定时,同时,它也可以用来统计一些脉冲信号。下面就来介绍下单片机定时器的使用的...
关于51单片机定时器的一个问题
这个程序好面熟,好像超声波程序,1、一开始初始化的时候TR0=1;不应该置1吧,正如你所说的,高电平来的时候自动就将TR0置1开始计时,所以一开始应该是TR0=0;2、至于你说的无法清零的问题,不知道你是怎么知道无法清零的呢?3、还有我对你的程序很费解,要是按你的写法,一上来定时器就是启动的...
C51单片机定时器1以方式1定时1秒如何设置?
1、先打开我们熟悉的单片机c51编程软件——keil,先把主方法写好。2、然后,我们要定义两个变量。3、接着,设定好定时器的工作方式。4、设置中断发生的机制。5、最后,我们要加进这几行代码进行初值的重装。6、最后,把if语句补充完毕就可以了。
万肃磷霉: 1 ] 定时器开始计时但未发生中断的时候主程序仍然在运行,不占用主系统资源. 2 ] 当中断开始后,运行中断程序,运行结束后RETI返回到停等待的那段程序,jmp $ .
延川县17382702845: 51单片机定时器和中断问题 - ?
万肃磷霉: 你对定时器1没有设置初值.中断有优先顺序的:先定时器中断0,然后是定时器中断1.
延川县17382702845: 51单片机的计时器问题 - ?
万肃磷霉: 0x是16进制数的前缀.0x01的意思是后面的01是一个16进制数字,换算成二进制就是00000001.意思就对TMOD寄存器依次赋值为00000001.因为TMOD的每一位都是针对于定时器的设置,所以这句话的意思就是设置定时器1工作在方式0,而定时器0工作在方式1.
延川县17382702845: 51单片机定时器设置: - ?
万肃磷霉: TMOD = (TMOD & 0XF0) | 0X01; //定时器0工作在模式1,16Bit定时器模式 上述表达式中0XF0的作用是什么? 1 (TMOD & 0XF0) 其中&为逻辑与指令,按位与操作,定时器的模式寄存器TMOD与上0XF0的作用是高4位不变,低4位被清零.(1与上...
延川县17382702845: 关于51单片机定时器精度的问题 - ?
万肃磷霉: 一定会影响精度,凡是执行指令,都要消耗时间.如果对精度要求高,可将定时器中断设为高优先级,其它设为低优先级.然后在重装时,先装高字节,再读低字节,进行修正后再装低字节.
延川县17382702845: 一个关于单片机定时器的问题 - ?
万肃磷霉: 定时器的初值跟设置的模式有关,就拿定时器0的模式1(即16位模式)来说 ,由于51系列单片机是8位的,所以需要2个寄存器,高8位称为TH0,低8为称为TL0.定时器的工作原理是输入一个脉冲,寄存器计数+1,等到2个寄存器计数到全部位...
延川县17382702845: 51单片机定时器中断问题 - ?
万肃磷霉: 首先要理解定时器的功能: 说的通俗一点, 定时器可以让单片机每隔一段时间进入一次中断,然后在中断中判断是所关注的事件是否发生,程序如下:#include <reg51.h> sbit Data_in=P0^1;//T0初始化 ,以下是定时器初始化的步骤,有了这几...
延川县17382702845: 51单片机定时器中断问题?
万肃磷霉: 51单片机定时器, 不管用 方式0 或 方式1、方式2,只要 打开 定时器 就开始 计数, 不管进入中断 或 退出中断,定时器不关是不会 停止 计数的, 可以在 中断服务程序 中 重新设置 定时器 值.
延川县17382702845: 怎样使用51单片机的定时器? - ?
万肃磷霉: 1. 设定工作方式TMOD=..... 2. 装入初值 TH0=...TL0=....TH1=....TL1=..... 3.开启定时器中断和总中断ET0=1或ET1=1 EA=1 4.启动时器 TR0=1 TR1=1 5.写中断服务程序 其中 3和5可以没有
延川县17382702845: 问一下各位大神一个简单的51单片机定时器计数初值的问题设单片机晶振频率f=6MHz,使用定时器1以方式0产生周期为600us的等宽方波脉冲,并由p1.7输... - ?
万肃磷霉:[答案] 周期为600us的等宽方波脉冲,那么高低电平持续时间就是300US,所以那里会乘以2.晶振为6MHz,则一个机器周期为2US,600US就是300个机器周期 (8192-N)*2=300这里的300说的是300个机器周期.课本是对的