您的位置:控制工程论坛网论坛 » 教程与手册 » 单片机学习,C51单片机入门经典30课 第七课

xilinxue

xilinxue   |   当前状态:在线

总积分:16186  2024年可用积分:0

注册时间: 2008-06-26

最后登录时间: 2020-03-22

空间 发短消息加为好友

单片机学习,C51单片机入门经典30课 第七课

xilinxue  发表于 2009/2/5 18:45:06      653 查看 3 回复  [上一主题]  [下一主题]

手机阅读

第7课,精确定时1秒钟闪灯


这一课,我们将学习如何精确定时1秒钟闪灯。上节介绍过,要精确定时,必须使用自装载方式。这里我们使用T2定时器,让它工作在16bit自动装载方式,这时,有另一个位置专门装着16位预装载值,T2溢出时,预装载值立即被置入。这就保证了精确定时。


但是,即使是16位定时器,最长的溢出时间也就几十毫秒,要定时一秒,就需要一个变量来保存溢出的次数,积累到了多少次之后,才执行一次操作。这样就可以累加到1秒或者更长的时间才做一次操作了。


T2定时器有个特殊的地方,它进入中断后,需要自己清除溢出标记,而51的其他定时器是自动清除的。请参考51单片机相关书籍。


如果使用T2定时器实现1秒精确定时?


下面我们就来计算:


仿真器的晶振是22118400HZ,每秒钟可以执行1843200个机器周期。而T2每次溢出最多65536个机器周期。我们尽量应该让溢出中断的次数最少,这样对主程序的干扰也就最小。


选择每秒中断24次 ,每次溢出1843200/24=76800个机器周期,超出65536,无效。
选择每秒中断30次 ,每次溢出1843200/30=61440个机器周期
选择每秒中断32次 ,每次溢出1843200/32=57600个机器周期
选择每秒中断36次 ,每次溢出1843200/36=51200个机器周期
选择每秒中断40次 ,每次溢出1843200/40=46080个机器周期


从上面可以看到我们可以选择方式有很多,但是最佳的是每秒中断30次,每次溢出61440个机器周期。也就是赋定时器T2初值65536-61440=4096,换成十六进制就是0x1000。


从上面的计算也可以看出晶振2118400Hz的好处,它可以整除的倍数多,要准确定时非常方便。更常见的应用是在串口波特率上,使用22118400HZ可以输出最多准确的标准波特率。


请打开程序,如图:





我们在定时器服务函数里,设置了一个静态变量t,静态变量的值在进入函数时是不会被初始化的,而是保持上次的值。它用来计数定时器的溢出次数,也就是T2中断函数进入的次数,每溢出30次,就控制一次LED的反转显示。这时的时间就正好是1秒,而且是精确的1秒!只与晶振的精度有关。


请编译,进入仿真,全速运行。可以看到,LED在亮一秒,灭一秒,不断循环闪烁。


这种精确定时,可以用在时钟的计算、显示上。

1楼 0 0 回复
  • xilinxue

    xilinxue   |   当前状态:在线

    总积分:16186  2024年可用积分:0

    注册时间: 2008-06-26

    最后登录时间: 2020-03-22

    空间 发短消息加为好友

    xilinxue   发表于 2009/2/4 12:56:13

    1.改为保持1秒闪烁的同时,让P11灯每10秒钟闪烁一次。
    2.改为保持1秒闪烁的同时,让P11灯亮1秒停5秒不断循环。第七课工程源码lesson07code.rar
    2楼 回复本楼

    引用 xilinxue 2009/2/4 12:56:13 发表于2楼的内容

  • ahljj

    ahljj   |   当前状态:在线

    总积分:11781  2024年可用积分:0

    注册时间: 2006-12-25

    最后登录时间: 2020-08-19

    空间 发短消息加为好友

    ahljj   发表于 2009/2/5 8:41:51

    学习中
    3楼 回复本楼

    引用 ahljj 2009/2/5 8:41:51 发表于3楼的内容

  • xilinxue

    xilinxue   |   当前状态:在线

    总积分:16186  2024年可用积分:0

    注册时间: 2008-06-26

    最后登录时间: 2020-03-22

    空间 发短消息加为好友

    xilinxue   发表于 2009/2/5 18:45:06

    改为保持1秒闪烁的同时,让P11灯每10秒钟闪烁一次


    再增加 P12口 每 1秒闪烁一次


    这样就增加难度了

    4楼 回复本楼

    引用 xilinxue 2009/2/5 18:45:06 发表于4楼的内容

总共 , 当前 /