51单片机定时器初值的计算
5151 单片机定时器初值的计算单片机定时器初值的计算 一。10MS定时器初值的计算: 1.晶振 12M 12MHz 除 12 为 1MHz,也就是说一秒=1000000 次机器周期。10ms=10000 次 机器周期。 65536-10000=55536(d8f0) TH0=0 xd8,TL0=0 xf0 2.晶振 11.0592M 除 12 为 921600Hz,就是一秒 921600 次机器周期,10ms=9216 次机器周期。 65536-9216=56320(dc00) TH0=0 xdc,TL0=0 x00 》 二。50MS定时器初值的计算: 1.晶振 12M 12MHz 除 12 为 1MHz,也就是说一秒=1000000 次机器周期。50ms=50000 次 机器周期。 65536-50000=15536(3cb0) TH0=0 x3c,TL0=0 xb0 2.晶振 11.0592M 除 12 为 921600Hz,就是一秒 921600 次机器周期,50ms=46080 次机器周期。 65536-46080=19456(4c00) TH0=0 x4c,TL0=0 x00 三。使用说明 - 以 12M 晶振为例:每秒钟可以执行1000000 次机器周期个机器周期。而 T 每次溢出 最多 65536 个机器周期。我们尽量应该让溢出中断的次数最少(如 50ms),这样对主程序的干扰也就最小。 开发的时候可能会根据需要更换不同频率的晶振(比如 c51 单片机,用 11.0592M 的晶振,很适合产生串口 时钟,而 12M 晶振很方便计算定时器的时间),使用插接式比较方便。 51 单片机 12M 和 11.0592M 晶振定时器初值计算 2011-01-04 22:25 at89s52,晶振频率 12m 其程序如下: 引用代码:#include #include void timer0_init() { TMOD=0 x01;3c3c3c12M1M3c11.0592M0.9216M4C4c12M 2008-07-29 《 单片机 T2 定时器实现 1 秒精确定时程序 /****************************************************************************** ************** * 文 件 名: * 功能:使用 T2 定时器实现 1 秒精确定时并闪灯 * 型号:AT89S52 * 2.晶振: ******************************************************************************* **************/ #include ““ * 注意: * 1、要精确定时, 必须使用定时器的自动装载方式。本实验使用 T2 定时器,让它工作 在 16bit 自动 *装载方式,这时,有另一个位置专门装着16 位预装载值,当 T2 溢出时,预装载值立 即被装入, *这就保证了精确定时。 * 2、T2 定时器是一个 16 位定时器,最长的溢出时间也就几十毫秒,要定时1 秒,就 需要用一个变量 *来保存溢出的次数,积累到了一定的次数后,才执行一次操作。这样就可以累加到1 秒或者更 *长的时间才做一次操作。 * 3、当 T2 定时器发生溢出中断时,需要用户自己清除溢出标记,而51 的其他定时器 是自动清除的。 * 4、T2 定时器预装载值的计算: *设晶振为 12MHz,每秒钟可以执行 1000000(/12)个机器周期。而 T2 每次溢出时 最多 *经过了 65536 个机器周期。我们应该尽量让T2 定时器的溢出中断的次数最少,这样 对主程序的干扰 *也就最小。 *选择每秒中断 14 次,每次溢出 1000000/14=个机器周期,不为整数且超出65536 个 机器周期,有效。 *选择每秒中断 16 次, 每次溢出 1000000/16=62500 个机器周期, 小于 65536 个机器周 期,有效。 *选择每秒中断 20 次, 每次溢出 1000000/20=50000 个机器周期, 小于 65536 个机器周 期,有效。 * . * . * . *通过上面的计算,我们可以发现,我们可以选择的方式有很多, 但是最佳的是每秒中 断 16 次,每次 *溢出 62500 个机器周期,那么赋给T2 定时器的初值应为 65536-62500=3036,转换成 十六进制值为 * 0 x0BDC。 ******************************************************************************* **************/ void main (void) { P1_7=1; // LED11灭 /* T2 定时器赋预装载值,溢出16 次就是 1 秒。 */ RCAP2H=0 x0B; RCAP2L=0 xDC; ET2=1; //允许 T2 定时器中断 EA=1; //打开总中断 TR2=1; // while(1); // } 启动 T2 定时器 死循环,等待 T2 定时器的溢出中断