www.ysbm.net > 单片机定时计数器初值计算

单片机定时计数器初值计算

定时器是通过设定初值,然后单片机在你设定的初值上每个指令周期加1,直到溢出,设置溢出标志位,而计数是对某个IO口的脉冲进行计数.两者最关键区别是定时器的计数脉冲是单片机内部的,计数器的计数脉冲来自输入引脚.定时器的初值的计算如下:在定时器模式下,计数器的计数脉冲来自于晶振脉冲的12分频信号,即对机器周期进行计数.若选择12M晶振,则定时器的计数频率为1MHZ.假设定时时间为T,机器周期为T1,即12/晶振频率.X为定时器初值.则 X=2^n-T/T1.方式0,n=13,方式1时,n=16,方式2和方式3,n=8

呵呵 正确为你解答:1 可以按定时时间的计算公式, 计算出定时器的时间常数X: 定时时间T=(2的N次方-X)12/单片机晶振频率2 N为定时器的工作方式: 方式0时,N=13 方式1时,N=16 方式2时,N=83 根据定时时间和工作方式,计算出时间常数X 把X转换成二进制数,高8位送给TH1,低8位送给TL1,就可以启动定时器开始定时了. 例如: 工作在方式1,定时时间为1000微秒 晶振频率=12MHZ 则 定时时间T=(2的16次方-X)12/12MHZ=1000 解出 X=64536=FC18H 呵呵 如满意 请选择满意回答

这是由定时器寄存器的位数决定的. (1)模式0 定时器寄存器配置为13 位寄存器,该13 位寄存器包含THn 全部8 个位及TLn 的低5 位,TLn 的高3 位不定可将其忽略.2的13次方是8192,所以模式0的模就是8192. (2)模式1 使用了THn 及TLn 全部16 位,2的16次方是65536,所以模式1的模就是65536. (3)模式2 8位的,所以模是256.

在定时器模式下,计数器的计数脉冲来自于晶振脉冲的12分频信号,即对机器周期进行计数.若选择12M晶振,则定时器的计数频率为1MHZ.假设定时时间为T,机器周期为T1,即12/晶振频率.X为定时器初值.则 X=2^n-T/T1.方式0,n=13,方式1时,n=16,方式2和方式3,n=8

就是你的方法算啊,方式0就是只用到13位其余的位用零填,之后再将它换成16进制的就可以了,就像11110 0000 1100用0填后是1111 0000 0000 1100B,再将它换成16进制数,也就是TH0=0F0H,TLO=00CH.其实用C或用方式1就好多了.不用那麻烦的.

初值计算就是要算出一个数字,让加上这个数字后,和为65536的时候,触发定时中断.所以一般的计算方法是【65536-定时时长/时钟周期(12M主频时候,频率是1M的,周期1us)】,你这个方法不是单片机的定时方法,是微机原理中的定时赋初值方法.记得选择为最佳答案.顶下,为人民服务才有热情.

第一:把定时器设置成定时方式,工作方式1:TMOD=0x01 第二:计算定时器的初始值(定时50ms),晶振按12MHz计算(65536-X)*1us = 50000 X=15536 转换成十六进制3CB0 则TH0=0x3C,TL0=0xB0 然后开中断.启动定时器 ET0 =1 EA= 1 TR0=1 在中断服务程序中使用一个变量进行计算,每中断一次加1,中断20次,就是1s

单片机初值大于计数器长度,那是因为定时的时间太长了,超过了定时最大的定时时间.比如:晶振频率是12M,最大定时时间是65.536ms,如果你的定时时间超过个时间就不行了.其实,这是定时器应用中的常见的情况,比如定时1秒,则设置定时的时间为50ms,则50ms就中断一次,在中断子程序中计数,计数20次就是1秒.这是最基本的定时器的应该方法.

下载一个初值计算软件就行了

你的初值是对的,而你计算的时候 错了.TH0 = (65536-45872)/256 你要知道,它的定时总周期数是45872 ,因为定时器要从 65536-45872=19664 开始计时,要从19664计到65536 会溢出,这个间隔是45872.要弄清楚啊.所以,45872*12/11.0592*10(-6)约= 50 MS

网站地图

All rights reserved Powered by www.ysbm.net

copyright ©right 2010-2021。
www.ysbm.net内容来自网络,如有侵犯请联系客服。zhit325@qq.com