找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 2878|回复: 0
打印 上一主题 下一主题
收起左侧

奶爸业余单片机学习之:定时器以工作方式1运行时的初值的计算方法(51单片机)

[复制链接]
跳转到指定楼层
楼主
ID:65546 发表于 2014-8-28 16:04 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
http://www.cnblogs.com/czf-gd/p/3941577.html
//==========51单片机========
/*定时器以工作方式1运行
TMOD = 0x01;//定时器0
TMOD = 0x10;//定时器1
TMOD =0x11;//定时器0/1同时工作
*/
定时器工作时,如何确定定时时间?
假设有一个5L的水桶,现在要往水桶里面装水3L,怎么才知道装够3L了呢?答案就是先往水桶里面装水2L,然后继续装,水满溢出时,就表示3L水装够了。
(以定时器0为例)溢出:单片机也一样,当单片机内定时器以工作方式1运行时,定时器存储寄存器每经过一个机器周期就加1,计数长度为65535(十六进制为:FFFFFF),所以65536+1时就会溢出,溢出后寄存器值从0开始计数,则:定时周期 = 65536 - 初值,初值为0时,定时周期 = 65535个机器周期
所以,当需要定时时,先往寄存器里装入初值,让寄存器从初值开始计数,到65536时,寄存器溢出为0,溢出后TF0 == 1,表示定时值已到,若需要用到循环定时,则溢出后,首先必让溢出标志(TF0)归零(归零方法:一、程序清零,则TF0 = 0;二、进入定时器中断以实现硬件自动清零。)。
其次,须往寄存器重新装入初值再开始计算。

时钟周期 = 1/时钟频率;
机器周期(定时器存储寄存器加1时间)= 12×时钟周期,
以11.0592MHz频率晶振为例,机器周期(秒) = 12×(1/11059200)
初值为0时,最大定时时间为 65535×12×(1/11059200)=71ms(约),所以程序需要定时时,通常要根据定时时间来确定一个合适的初值。
假设需定时一个30毫秒时间,则0.03 = A×机器周期,可以算出A = 0.03/机器周期 = (0.03×11059200)/12,则经历A个机器周期时,就为30毫秒定时时间
可以算出 A = 27648
所以,初值 = 65536 - 27648 = 37888,37888转换成十六进制为9400,所以高八位TH0 = 0x94,低八位TL0 = 0x00;
公式总结:
初值 = 65536 - 定时时间(秒)/机器周期
时钟周期 = 1/时钟频率;
机器周期(定时器存储寄存器加1时间)= 12×时钟周期

评分

参与人数 1威望 +25 黑币 +30 收起 理由
admin + 25 + 30 共享资料的积分奖励,希望大家多多发布各种.

查看全部评分

分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖 顶 踩
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表