Ⅰ 单片机如何计算初值
一般最直接的想法就是,指定一个计时值x,然后从0开始累加计数,计数到x表示时间到,可以处理事务了。这种处理方法,需要一个数值比较器,每计一次数,就比较一下。这对单片机或者说硬件电路来讲,一个8位计数器就需要包含一个8位数值比较器,实在不够简便。
第二种想法,是指定一个计时值x,然后进行减计数,减计数到0表示时间到。这也要一个比较器,只不过是个0值比较器,硬件电路上比上一种要简单一些,但减计数器还是不常用。我们知道累加器才是最简便的硬件电路之一。
上面两种方法,都是软件实现的定时器的合理想法。那么硬件电路实现定时最简便的方法是什么呢?
那就是用累加器来实现。比如一个8位的累加器,可以从0累加计数,计数到256时溢出,产生溢出信号,就可以触发事务处理了。
要是我们只需要计数10次就够了,则可以将计数初值定义为246。那样,计数10次后就可以达到256,产生溢出信号了。
所以就有了(2^n-x)。n是计数器的位数;2^n就是最大计数值;x是计数初值。整个这段,表示我们需要的计时次数。
计数器每次计数的时间间隔是t,及计数周期。那么总的计时时长m=计数周期×计数次数=t×(2^n-x),也就是m=(2^n-x)×t。
计数位数n由选用的单片机确定,通常等于8,12,16或32等等,即8位、12位等计数器。计数周期t由定时器基础时钟确定,可通过设置定时器时钟源和选择时钟分频数确定。这两项灵活性不大,一般在程序初始化时就应设定。
初值x可以在应用时,根据定时需求进行修改确定。
协调好n,t和x三者的设定,就可以完美实现定时功能了。
Ⅱ 单片机输出的频率计算
去网上下载一个<单片机小精灵>的软件,可以自动计算这些参数,并生成源代码
如果下载不到,你可以采纳我后留个邮箱,我发给你.
Ⅲ 单片机指令周期的计算
计算方法:PIC单片机的每四个时钟周期为一个内部指令周期,例如:8MHz的晶振,则内部指令周期为1/(8/4)= 0.5 uS
实例一:35us, 8MHz的晶振, 8位定时器, 分频比1/2 , 初值 E4
实例二:156.25us , 32768Hz的晶振, 8位定时器, 分频比1/32 , 初值 FC
计算方法一: 35 = =(256-初值)*分频*4/晶振 + 14/分频 =(256-初值)+14/2
计算方法二:0.015625 =(256-初值)*分频*4/晶振 = (256-初值)*32*4/32768
特别注意:分频比1-8 需要加上一个14/分频
指令周期是指令周期执行某一条指令所消耗的时间,它等于机器周期的整数倍。传统的80C51单片机的指令周期大多数是单周期指令,也就是指令周期=机器周期,少部分是双周期指令。
(3)单片机计算扩展阅读
在MCS-51系统中,有单周期指令,双周期指令。四周期指令只有乘,除两条指令。指令的运算速度和它的机器周期直接相关,机器周期数较小则执行速度快。
在编程时要注意选用具有同样功能而机器周期数小的指令。每一条指令的执行都可以包括取指和执行两个阶段。在取指阶段,CPU从内部或者外部ROM中取出指令操作码及操作数,然后再执行这条指令。
在8051指令系统中,根据各种操作的繁简程度,其指令可由单字节,双字节和三字节组成。从机器执行指令的速度看,单字节和双字节指令都可能是单周期或双周期,
而三字节指令都是双周期,只有乘,除指令占四个周期,一条指令的字节数表征这条指令在存储器中所占空间大小,而周期数表征运行这条指令所花时间长短,即运行速度。
Ⅳ 51单片机各种位数定时器初值计算方法
对12MHz ,1个机器周期 1us ,12/fosc = 1us
。
方式0是13位定时器,最大时间间隔 = 2^13 = 8.192ms
方式1是16位定时器,最大时间间隔 = 2^16 = 65.536ms
方式2是8位定时器,最大时间间隔 = 2^8 = 0.256ms =256 us
方式3 仅适用于T0,此时T0分成两个8位计数器,T1停止计数
当选用定时器的方式1时,设机器周期为Tcy,定时器产生一次中断的时间为t,那么需要计数的个数N=t/Tcy,装入THX和TLX中的数分别为:
THX = (2^16 - N)/256 TLX = (2^16 -N )%256(此处的X为定时器0或定时器1)
公式为:(2^y - X)*Tcy = t
Tosc= 1/ fosc
一个机器周期 = 12个时钟周期 = 12/fosc
溢出速率 = 1 / 溢出时间
故:初值X = 2^y – t/Tcy
THX = 高八位
TLX = 低八位
注:
X:定时器初值
N:计数值
y:定时器工作方式
fosc:晶振频率
Tcy:机器周期,Tosc:时钟周期
Tcy = 1/Tosc
Ⅳ 单片机波特率计算
波特率计算公式是:SMOD=0时为:fosc/(32*12*(256-TH1));
SMOD=1时为:fosc/(16*12*(256-TH1));
所以最高为:fosc/(16*12*(256-255))=31250bps;
最低为:fosc/(32*12*(256-0))=61bps;
Ⅵ 单片机计数初值的计算
呵呵 正确为你解答:
1 可以按定时时间的计算公式, 计算出定时器的时间常数X:
定时时间T=(2的N次方-X)12/单片机晶振频率
2 N为定时器的工作方式:
方式0时,N=13
方式1时,N=16
方式2时,N=8
3 根据定时时间和工作方式,计算出时间常数X
把X转换成二进制数,高8位送给TH1,低8位送给TL1,就可以启动定时器开始定时了。
例如: 工作在方式1,定时时间为1000微秒 晶振频率=12MHZ
则 定时时间T=(2的16次方-X)12/12MHZ=1000 解出 X=64536=FC18H
Ⅶ 单片机乘除指令计算的具体步骤
关于MUL的用法书上有应该,我就不说了。说几点:
一、单片机的乘法运算只是进制不同,跟我们常用的十进制是一样的。例如:12×10=120
不要简单想成在后边加个0,学了单片机应该学会用*移位*思考,因为单片机不会在后边加 0减0,应该想成12向左移一位,同样二进制的11B×10B =110B ,十六进制11H×10H=110H,八进制也一样。
二、想不通 ,还可换算成十进制去算,然后再转换成相应进制。因为他们数量是一样的只是进 制不同。十进制要满是个进一位,八进制要满8个进一位。十进制的10和八进制的12是一 样的。
啰嗦了半天希望能理解其中的意思。
Ⅷ 单片机频率计算公式
这得看是什么单片机了:
对于精简指令集性能的单片机的工作频率(1/机器周期)=时钟频率(1/时钟周期).
普通的51单片机来说:频率是1MHZ,时钟周期是1/12us(1除以12M),机器周期是12倍的时钟周期--1us.
周期是频率的倒数 或者频率是周期的倒数
1秒:相当于频率是1HZ ,也就是1/1S =1HZ
那么1/1ms =1/0.001S =1000HZ
Ⅸ 单片机中怎么计算除法
可通过单片机除法运算程”DIV AB“,进行计算。
”DIV AB“表示:(A)÷(B)→(A)和(B),把累加器A的8位无符号整数除以寄存器B中的8位无符号整数,所得到的商存在累加器A,而余数存在寄存器B中。
例如,使用DIV指令计算16÷5,运行如下3个指令:
MOV A,#16;
MOV B,#5;
DIV AB;
得到A为3,表示商;B为1,表示余数。