单片机输出的频率计算

假如我用定时器模式2(自动重载初值)输出脉冲,我怎么计算输出的脉冲频率。频率是,1/t对吧,单片机如何计算的最好定个汇编程序理解。不会C

去网上下载一个<单片机小精灵>的软件,可以自动计算这些参数,并生成源代码



如果下载不到,你可以采纳我后留个邮箱,我发给你.

追问

这个我有的。

温馨提示:答案为网友推荐,仅供参考
第1个回答  2013-10-25
首先一点,你要搞清楚单片机的时钟,系统主频是根据外接或者内部产生的晶振来确定的,为MCLK。然后一般分配给Timer环节的晶振频率有可能等于MCLK,也可能是MCLK/n,具体要参考对应单片机的datasheet。
其次,频率的计算。你给定时器装置的计数值假设为TCNT,那么对应的频率为:
F = MCLK/(n*TCNT)

当然了,这只是按照你的Timer计算出来的Timer完成计数所产生的频率了。如果你在中断函数中没产生一次中断对IO口进行一次取反操作的话,那么对应IO口的频率也等于上面的F。
望能够帮到你。
第2个回答  推荐于2017-10-15
比如要求频率是F,那么时间就是T=1/F,如果用定时器来做脉冲输出的控制,而且用取反IO的方式来做,那么定时时间应该是2*T,也就是说是周期的2倍。比如产生频率是1k,那么周期T=1ms,定时时间应该为2ms,所以在12M晶振的情况下,定时值为2000,按你所说用自动重装载模式,最大可以到256,我们可以设为250也就是初值设为THx=TLx=256-250=6,这样中断8次就可以取反了。程序如下:
include<reg51.h>
#define uchar unsigned char
uchar num;
sbit p10=P1^0;
void t0isr() interrupt 1
{
num++;
if(num>=8)
{
num=0;
p10=~p10;
}
}
main()
{
TMOD=0x02;
TH0=6;
TL0=6;
TR0=1;
ET0=1;
EA=1;
while(1);
}追问

可以用汇编写吗。但也是这样的,假如这个频率要在,1K-200K可调那么我,在数码管上存的时候肯定,存的是,0-9,K。10K。100K去存,我按键调的时候也是调,分三位去调节的。假如,输出,20K,那么,1/200000=0。0000005然后把得到的这个数去/2得到多久转换一个高低电平,单片机怎么算这个数。

追答

ORG 0000H
LJMP MAIN
ORG 000BH
LJMP T0ISR
ORG 0030H
MAIN:
MOV TMOD,#02H
MOV TH0,#6
MOV TL0,#6
SETB TR0
SETB ET0
SETB EA
CLR A
SJMP $
T0ISR:
INC A
CJNE A,#8,T0E
CLR A
CPL P1.0
T0E:
RETI
END
;计算很简单,对频率求倒数,再乘以2就是定时器总初值,再根据量程大小决定中断次数和初值大小。

追问

难点就是计算这个了,就是不知道二进制怎么去计算这个。

追答

你不用担心二进制的计算问,恒定值需要你自己计算,也就是用十进制计算。至于输入是参数,那么就需要单片机计算了,如果你编制不了计算程序,可以下载一个51汇编语言常用子程序集,里面有很多可供你参考的程序,也可以用查表法来做,将你需要的东西,做成一个表放到里面,这样就简单多了。

追问

你的意思是,把,1K-200K的初值和次数都先算好然后,查表送到定时器TH TL里面是吧,这样的话那就简单了。多谢。

本回答被提问者采纳