51定时器初值

时钟周期

是指振荡源的周期,,定义为时钟脉冲的倒数

外部晶振12M
则时钟周期为	1s/12M	=	1S/12 000 000		=	1/12us

外部晶振11.0592M
则时钟周期为	1s/11.0592M	=	1S/11 059 200		=	1/11.0592us

外部晶振24M
则时钟周期为	1s/24M	=	1S/24 000 000		=	1/24us

机器周期

单片机执行一单位指令所需要的 时钟周期 个数

机器周期也称为CPU周期。
在计算机中,为了便于管理,常把一条指令的执行过程划分为若干个阶段(如取指、译码、执行等),每一阶段完成一个基本操作。完成一个基本操作所需要的时间称为机器周期。
一般情况下,一个机器周期由若干个时钟周期组成。 如 1T,就表示,需要 1个时钟周期; 12T 即为 12个时钟周期。 这些都只是
一单位指令的时间(如自增、自减等),多单位指令时间进行倍乘(如赋值语句需要2个机械周期,即乘以2倍),
传统的8051单片机就是12T的,即完成1个单位指令所需时间为12个时钟周期 。 1T的完成1个单位指令所需时间则为1个机器周期。

1T		12Mhz的机器周期为1/12us
12T		12Mhz的机器周期为1us

1T的要比12T的速度更快

指令周期

CPU完成一条指令的时间叫指令周期

一般一条完整的指令包括:取指周期、间址周期、执行周期、中断周期。

初值计算

  1. 确定机器周期是多少,如1T,或6T,或12T
  2. 确定晶振频率,如11.0592Mhz,或24Mhz,12Mhz,8Mhz
  3. 确定定时时间,10ms,20ms,50ms等
/*
1T		12Mhz	1ms
0XFF FF - (1ms/1s)*(12 000 000*1)
值为53,536,0XD1 20
将其高八位填入TH,低八位填入TL
*/
TH1	= 0xD1;
TL1 = 0X20;
/*
12T		11.0592		50ms
0XFF FF   -  (50ms/1s)*(11 059 200/12)
值为19456,0X4C00
将其高八位填入TH,低八位填入TL
*/
TH0 = 0x4C;
TL0 = 0x00;

0XFFFF-(初值/1s)*(晶振频率/?T)


unsigned char Return_TH(unsigned char S,unsigned MHz,unsigned char unsigned char Tim_us)
{
	unsigned char TH;
	TH = (0XFFFF-((Tim/1 000 000)*((MHZ*1 000 000)/S))))&0XFF
	return TH;
}

unsigned char Return_TL(unsigned char S,unsigned MHz,unsigned char unsigned char Tim_us)
{
	unsigned char TL;
	TL = (0XFFFF-((Tim/1 000 000)*((MHZ*1 000 000)/S))))>>8;
	return TL;
}

int main()
{
	unsigned char a,b,c,TH1,TL1;
	printf("请输入---分频数S---晶振频率Mhz----定时时间us--");
	scanf("%d%d%d",&a,&b,&c);
	TH1 = Return_TH(a,b,c);
	TL1 = Return_TL(a,b,c);
}

差不多这样,毕竟有现成的工具可以用,HHH

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

天才小狸花

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值