标签:定时器 周期 初值 51 unsigned char 000 指令 时钟
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完成一条指令的时间叫指令周期
一般一条完整的指令包括:取指周期、间址周期、执行周期、中断周期。
初值计算
- 确定机器周期是多少,如1T,或6T,或12T
- 确定晶振频率,如11.0592Mhz,或24Mhz,12Mhz,8Mhz
- 确定定时时间,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
标签:定时器,周期,初值,51,unsigned,char,000,指令,时钟 来源: https://blog.csdn.net/qq_45093483/article/details/113619933
本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享; 2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关; 3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关; 4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除; 5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。