单片机关于定时器,定时1ms,定时器中寄存器高低位的值如何设置?

单片机关于定时器,定时1ms,定时器中寄存器高低位的值如何设置?,第1张

你要定时 1ms 即是 1000uS,之所以是减 1000,就是认定计数器的计数脉冲周期为 1uS,
而 1uS 就是晶振(12MHz)的12分频;
这些你理解就好;
至于计数分频值是 0xfc18 还是 0xfc67 不必太在意,如果真的想得到准确的定时,则是需要通过测量以便调节分频值来得到最接近值;

这里通俗的说下C51单片机定时器的工作原理,C51单片机的定时器是由计数器构成的,所计量的时间是通过计算固定周期的脉冲个数的累计获得的,通过设置定时器的工作模式,可以由16位(高、低两个8位)寄存器模式或其他位数的寄存器模式来计数,以16位计数模式来讨论,那就是无论那种工作模式只有当计数用的寄存器的各个位全部置1,也就是满值后下一个计数脉冲进入时使寄存器产生溢出,而这个溢出才会使计数产生中断从而完成一次定时控制,因此,如果我们想产生某个时长的定时,那么我需要将这个时长根据单片机运行的时钟频率、周期等等相关因素换算成需要计数的个数,进而在这个满值的16位寄存器中扣除需要计数的个数,启动运行后当计数值补充满了寄存器就完成了一次计时,而一个16位寄存器满值为2的16次方=65536,假如一个计数脉冲的周期为1us,那么满值后就会耗时65536us,假如我们需要计时36us,那么我们只需要为寄存器赋值65500就可以了,这里需要注意的是,因为C51单片机的寄存器是8位的,我们需要将这个65500拆分出高8位数据装入THx中计算方法为THx=65500/256,再计算出低8位数据装入TLx中,THx=65500%256。

51单片机定时器的使用
51单片机定时器/计时器的使用
步骤:
1、 打开中断允许位:
对IE寄存器进行控制,IE寄存器各位的信息如下图所示:
EA: 为0时关所有中断;为1时开所有中断
ET2:为0时关T2中断;为1时开T2中断,只有8032、8052、8752才有此中断 ES: 为0时关串口中断;为1时开串口中断 ET1:为0时关T1中断;为1时开T1中断 EX1:为0时关1时开 ET0:为0时关T0中断;为1时开T0中断 EX0:为0时关1时开
2、 选择定时器/计时器的工作方式:
定时器TMOD格式
CPU在每个机器周期内对T0/T1检测一次,但只有在前一次检测为
1和后一次检测为0时才会使计数器加1。因此,计数器不是由外部时钟负边沿触发,而是在两次检测到负跳变存在时才进行计数的。由于两次检测需要24个时钟脉冲,故T0/T1线上输入的0或1的持续时间不能少于一个机器周期。通常,T0或T1输入线上的计数脉冲频率总小于100kHz。
方式0:定时器/计时器按13位加1计数,这13位由TH中的高8位和TL中的低5位组成,其中TL中的高3位弃之不用(与MCS-48兼容)。
13位计数器按加1计数器计数,计满为0时能自动向CPU发出溢出中断请求,但要它再次计数,CPU必须在其中断服务程序中为它重装初值。
方式1:16位加1计数器,由TH和TL组成,在方式1的工作情况和方式0的相同,只是计数器值是方式0的8倍。
1
1/3
方式2:计数器被拆成一个8位寄存器TH和一个8位计数器TL,CPU对它们初始化时必须送相同的定时初值。当计数器启动后,TL按8位加1计数,当它计满回零时,一方面向CPU发送溢出中断请求,另一方面从TH中重新获得初值并启动计数。
方式3:T0和T1工作方式不同,TH0和TL0按两个独立的8位计数器工作,T1只能按不需要中断的方式2工作。 在方式3下的TH0和TL0是有区别的:TL0可以设定为定时器/计时器或计数器模式工作,仍由TR0控制,并采用TF0作为溢出中断标志;TH0只能按定时器/计时器模式工作,它借用TR1和TF1来控制并存放溢出中断标志。因此,T1就没有控制位可以用了,故TL1在计满回零时不会产生溢出中断请求的。 显然,T0和T1设定为方式3实际上就相当于设定了3个8位计数器同时工作,其中TH0和TL0为两个由软件重装的8位计数器,TH1和TL1为自动重装的8位计数器,但无溢出中断请求产生。由于TL1工作于无中断请求状态,故用它来作为串口可变波特
3、 为计数器赋值
计数器初值计算
TC=M−C
TC:计数器初值,M:计数器模值(2k),C:把计数器计满的计数值 定时器初值计算
T=(M−TC)T计数

TC=M−T/

欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/yw/12887934.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-28
下一篇 2023-05-28

发表评论

登录后才能评论

评论列表(0条)

保存