c51 定时器问题 急

时间:2022-06-07 23:36:28
那位能帮忙解释一下,定时器初值是怎么计算的,小弟我是刚学单片机开发。

21 个解决方案

#1


自己顶一下。路过的朋友帮忙说一下

#2


按溢出率算的

定时器有8位,16位的分别,无论哪个都是溢出时产生一个定时中断

51是对时钟12分频工作的,这12个时钟内,有一个时钟就是对定时器进行操作的,有一个是检查串口的,有一个是检测中断的(对不对的俺也不知道,好像是这样的)

所以呢,每12个时钟周期定时器

#3


每12个时钟周期定时器的数值+1,当TH,TL由全1变成全0时,置位TF,产生中断,拿12M的时钟来说,12分频之后变成1兆。若要产生1MS的定时器,则需要每次执行1000次定时器+1,所以其值应该65536-1000左右(不对的话调整一下)。这64536就是初值,送到初始值中。

#4


单片机速度 = 》 指令运行时间

运行时间 * 定时器溢出数

定时器总长 - 初载入数

LZ看看这三个式子,再看一下定时器原理,应该很快就出来了吧?

#5


该回复于2008-04-26 08:59:42被版主删除

#6


该回复于2008-04-26 09:02:24被版主删除

#7


晶振频率的1/12是机器周期,一个机器周期定时器+1,直到定时数满引起回0溢出,产生中断
例如用定时器0的方式1,初值是#0ffffh,那么经过一个机器周期定时器就会溢出
若初值是#0000h,那么经#10000h个机器周期定时器才会溢出

#8



定时初值= 2^n - t/(12M/Fosc)
其中n由工作方式所确定,t就是你说需要定时的时间(ms级的哈)

#9


定时初值=2^n-t/(12M/Fosc)
其中n由定时器工作方式所确定(13,16,8)
t是你所需要定时的时间(ms)
Fosc为晶振

#10


计数器不停的加1,溢出时产生中断。。。

#11


你先确定自己选择的通道和工作方式,不同的方式下工作是不同的,比如方式2,就是分频的工作方式,进行了N次分频,这时候如果事12M 的时钟晶振,就对此进行了N次分频,分完了之后,可以倒数得到周期,这时再来计数,算出确切的值。 我最近一直在研究这计数器和定时器的确切定时时间问题,刚有点眉目,还在努力中,关键是要靠自悟。。。

#12


定时时间= (2^n - 初始值)×晶振周期×12
不同工作模式,不同晶振周期,相应的值不同。代入公式计算就可以得到初装值

#13


得先看看你采用的是那种定时方式了.
具体的算法上面的各位讲的很清楚了^_^

#14


要搞清楚几个问题:
1.你的定时器是加计数器还是减计数?
2.你的时钟周期和指令周期?一般定时器是以时钟周期计数的,具体看cpu的datasheet;
3.你的定时时间;
下面以减计数器举例计算:(cpu:microchip dsPIC33F,晶振:8M输入倍频至64M,时钟周期:1/64m)
定时1ms,时钟周期:1/64m=1/64000000s=1/64000ms,定时器增计数;
时间=(定时常数-1)* 时钟周期
1ms =(定时常数-1)* 1/64000
定时常数 = 64000+1

其实,这方面的东西,随便找个51的教材或者cpu的datasheet上面都会将,
你要多看,多实践,很快就可以上手。。。

#15


我觉得你想知道这个问题的答案很简单,去买本关于 单片机的书!随后你会发现你有更多的东西你不知道,等你把书里的东西都搞会了!你就可以回答别人定时器是怎么用的了!!!
                    一定要静下心自习看看书!!静心!

#16


9楼说的对!

#17


引用 9 楼 LH806732 的回复:
定时初值=2^n-t/(12M/Fosc) 
其中n由定时器工作方式所确定(13,16,8) 
t是你所需要定时的时间(ms) 
Fosc为晶振

#18


我这有个处置计算器(软件)楼主可要?
QQ416269279

#19


该回复于2008-05-04 09:43:04被版主删除

#20


引用 18 楼 zbb4224 的回复:
我这有个处置计算器(软件)楼主可要? 
QQ416269279

网上一搜一大片

#21


不明LZ在说什么

#1


自己顶一下。路过的朋友帮忙说一下

#2


按溢出率算的

定时器有8位,16位的分别,无论哪个都是溢出时产生一个定时中断

51是对时钟12分频工作的,这12个时钟内,有一个时钟就是对定时器进行操作的,有一个是检查串口的,有一个是检测中断的(对不对的俺也不知道,好像是这样的)

所以呢,每12个时钟周期定时器

#3


每12个时钟周期定时器的数值+1,当TH,TL由全1变成全0时,置位TF,产生中断,拿12M的时钟来说,12分频之后变成1兆。若要产生1MS的定时器,则需要每次执行1000次定时器+1,所以其值应该65536-1000左右(不对的话调整一下)。这64536就是初值,送到初始值中。

#4


单片机速度 = 》 指令运行时间

运行时间 * 定时器溢出数

定时器总长 - 初载入数

LZ看看这三个式子,再看一下定时器原理,应该很快就出来了吧?

#5


该回复于2008-04-26 08:59:42被版主删除

#6


该回复于2008-04-26 09:02:24被版主删除

#7


晶振频率的1/12是机器周期,一个机器周期定时器+1,直到定时数满引起回0溢出,产生中断
例如用定时器0的方式1,初值是#0ffffh,那么经过一个机器周期定时器就会溢出
若初值是#0000h,那么经#10000h个机器周期定时器才会溢出

#8



定时初值= 2^n - t/(12M/Fosc)
其中n由工作方式所确定,t就是你说需要定时的时间(ms级的哈)

#9


定时初值=2^n-t/(12M/Fosc)
其中n由定时器工作方式所确定(13,16,8)
t是你所需要定时的时间(ms)
Fosc为晶振

#10


计数器不停的加1,溢出时产生中断。。。

#11


你先确定自己选择的通道和工作方式,不同的方式下工作是不同的,比如方式2,就是分频的工作方式,进行了N次分频,这时候如果事12M 的时钟晶振,就对此进行了N次分频,分完了之后,可以倒数得到周期,这时再来计数,算出确切的值。 我最近一直在研究这计数器和定时器的确切定时时间问题,刚有点眉目,还在努力中,关键是要靠自悟。。。

#12


定时时间= (2^n - 初始值)×晶振周期×12
不同工作模式,不同晶振周期,相应的值不同。代入公式计算就可以得到初装值

#13


得先看看你采用的是那种定时方式了.
具体的算法上面的各位讲的很清楚了^_^

#14


要搞清楚几个问题:
1.你的定时器是加计数器还是减计数?
2.你的时钟周期和指令周期?一般定时器是以时钟周期计数的,具体看cpu的datasheet;
3.你的定时时间;
下面以减计数器举例计算:(cpu:microchip dsPIC33F,晶振:8M输入倍频至64M,时钟周期:1/64m)
定时1ms,时钟周期:1/64m=1/64000000s=1/64000ms,定时器增计数;
时间=(定时常数-1)* 时钟周期
1ms =(定时常数-1)* 1/64000
定时常数 = 64000+1

其实,这方面的东西,随便找个51的教材或者cpu的datasheet上面都会将,
你要多看,多实践,很快就可以上手。。。

#15


我觉得你想知道这个问题的答案很简单,去买本关于 单片机的书!随后你会发现你有更多的东西你不知道,等你把书里的东西都搞会了!你就可以回答别人定时器是怎么用的了!!!
                    一定要静下心自习看看书!!静心!

#16


9楼说的对!

#17


引用 9 楼 LH806732 的回复:
定时初值=2^n-t/(12M/Fosc) 
其中n由定时器工作方式所确定(13,16,8) 
t是你所需要定时的时间(ms) 
Fosc为晶振

#18


我这有个处置计算器(软件)楼主可要?
QQ416269279

#19


该回复于2008-05-04 09:43:04被版主删除

#20


引用 18 楼 zbb4224 的回复:
我这有个处置计算器(软件)楼主可要? 
QQ416269279

网上一搜一大片

#21


不明LZ在说什么