51单片机的机器周期和时钟周期计算及11.0592Mhz晶振的机器周期是多少

机器周期和时钟周期的区别

在这里插入图片描述12Mhz与11.0592Mhz的怎么算时钟周期和机器周期
先要知道转换关系
在这里插入图片描述

12Mhz:
时钟周期:1/12Mhz,1单位是秒所以12Mhz要转为秒为12000000hz
1/12000000≈0.00000008s
机器周期:12×时钟周期=0.00000008s×12=0.000001s
转为us就是1us
11.0592Mhz:
时钟周期:1/11.0592Mhz,1单位是秒所以11.0592Mhz要转为秒为11059200hz
1/11059200≈0.00000009s
机器周期:12×时钟周期=0.00000009s×12=0.00000109s
转为us就是1.09us

  • 10
    点赞
  • 100
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
LCD1602液晶显示DS1302时钟实验例程C51单片机KEIL工程源码文件: void main (void) { unsigned char i; unsigned char temp[16];//定义显示区域临时存储数组 LCD_Init(); //初始化液晶 DelayMs(20); //延时有助于稳定 LCD_Clear(); //清屏 Init_Timer0(); //定时器0初始化 Ds1302_Init(); //ds1302初始化 UART_Init(); //串口初始化 Ds1302_Read_Time(); //首次读取时间 if((time_buf1[2]+time_buf1[7])==0) //如果所有参数都为0,写入一个初始值 Ds1302_Write_Time(); while (1) //主循环 { if(SetFlag) //如果接收到串口信息则更新时钟 { for(i=0;i<8;i++) { time_buf1[i]=time_buf2[2*i]*10+time_buf2[2*i+1];//数据整合,如2个数 1和5整合成15 } Ds1302_Write_Time();//接收更新的时间然后写入ds1302 SetFlag=0; //时钟信息更新后标志位清零 } if(ReadTimeFlag==1) //定时读取ds1302 定时时间到 则标志位置1,处理过时间参数标志位清零 { ReadTimeFlag=0; //标志位清零 Ds1302_Read_Time();//读取时间参数 sprintf(temp,"DATE %02d-%02d-%02d %d",(int)time_buf1[1],(int)time_buf1[2],(int)time_buf1[3],(int)time_buf1[7]);//年月日周 LCD_Write_String(0,0,temp);//显示第一行 sprintf(temp,"TIME %02d:%02d:%02d",(int)time_buf1[4],(int)time_buf1[5],(int)time_buf1[6]);//时分秒 LCD_Write_String(0,1,temp);//显示第二行 } } } /*------------------------------------------------ 串口通讯初始化 ------------------------------------------------*/ void UART_Init(void) { SCON = 0x50; // SCON: 模式 1, 8-bit UART, 使能接收 TMOD |= 0x20; // TMOD: timer 1, mode 2, 8-bit 重装 TH1 = 0xFD; // TH1: 重装值 9600 波特率 晶振 11.0592MHz TR1 = 1; // TR1: timer 1 打开 EA = 1; //打开总中断 ES = 1; //打开串口中断 } /*------------------------------------------------ 定时器初始化子程序 ------------------------------------------------*/ void Init_Timer0(void) { TMOD |= 0x01; //使用模式1,16位定时器,使用"|"符号可以在使用多个定时器时不受影响 //TH0=0x00; //给定初值 //TL0=0x00; EA=1; //总中断打开 ET0=1; //定时器中断打开 TR0=1; //定时器开关打开 } /*-----------------------------------------------
51单片机晶振的问题总结   晶振是什么?全称是石英晶体振荡器,是一种高精度和高稳定度的振荡器。通过一定的外接电路来,可以生成频率和峰值稳定的正弦波。而单片机在运行的时候,需要一个脉冲信号,做为自己执行指令的触发信号,可以简单的想象为:单片机收到一个脉冲,就执行一次或多次指令。   在初学51单片机的时候,总是伴随很多有关与晶振的问题,其实晶振就是如同人的心脏,是血液的是脉搏,把单片机晶振问题搞明白了,51单片机的其他问题迎刃而解。   一,为什么51单片机爱用11.0592MHZ晶振?   其一:因为它能够准确地划分成时钟频率,与UART(通用异步接收器/发送器)量常见的波特率相关。特别是较高的波特率(19600,19200),不管多么古怪的值,这些晶振都是准确,常被使用的。   其二:用11.0592晶振的原因是51单片机的定时器导致的。用51单片机的定时器做波特率发生器时,如果用11.0592Mhz晶振,根据公式算下来需要定时器设置的值都是整数;如果用12Mhz晶振,则波特率都是有偏差的,比如9600,用定时器取0XFD,实际波特率10000,一般波特率偏差在4%左右都是可以的,所以也还能用STC90C516 晶振12M 波特率9600 ,倍数时误差率6.99%,不倍数时误差率8.51%,数据肯定会出错。 这也就是串口通信时大家喜欢用11.0592MHz晶振的原因,在波特率倍速时,最高可达到57600,误差率0.00%。用12MHz,最高也就4800,而且有0.16%误差率,但在允许范围,所以没多大影响。   二,在设计51单片机系统PCB时,晶振为何被要求紧挨着单片机?   原因如下:晶振是通过电激励来产生固定频率的机械振动,而振动又会产生电流反馈给电路,电路接到反馈 后进行信号放大,再次用放大的电信号来激励晶振机械振动,晶振再将振动产生的电流反馈给电路,如此这般。当电路中的激励电信号和晶振的标称频率相同时,电 路就能输出信号强大,频率稳定的正弦波。整形电路再将正弦波变成方波送到数字电路中供其使用。   问题在于晶振的输出能力有限,它仅仅输出以毫瓦为单位的电能量。在 IC(集成电路) 内部,通过放大器将这个信号放大几百倍甚至上千倍才能正常使用。   晶振和 IC 间一般是通过铜走线相连的,这根走线可以看成一段导线或数段导线,导线在切割磁力线的时候会产生电流,导线越长,产生的电流越强。现实中,磁力线不常见,电磁波却到处都是,例如:无线广播发射、电视塔发射、手机通讯等等。晶振和IC之间的连线就变成了接收天线,它越长,接收的信号就 越强,产生的电能量

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值