找回密码
 立即注册

QQ登录

只需一步,快速开始

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

奶爸业余单片机学习之:定时器使用方法——非中断,TF0(TF1)值软件重置法

[复制链接]
跳转到指定楼层
楼主
ID:65546 发表于 2014-8-29 08:42 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
http://www.cnblogs.com/czf-gd/p/3929456.html
============定时器使用方法——非中断,TF值软件重置法========

第一:设置特殊功能寄存器TMOD,配置好工作模式。
第二:设置计数寄存器TH0和TL0的初值。
第三:设置TCON,通过TR0置1来让定时器开始计数。
第四:判断TCON寄存器的TF0位,监测定时器溢出情况。


实例:
//LED由三极管及73HC138控制
//用定时器0实现亮与灭之间的1秒时
# include <reg52.h>
sbit led2 = P0^0;
sbit addr0 = P1^0;
sbit addr1 = P1^1;
sbit addr2 = P1^2;
sbit addr3 = P1^3;
sbit enled1 = P1^4;
int main()
{
  unsigned char time0 = 0;
  addr0 = 0, addr1= 1, addr2 = 1,addr3 = 1, enled1 = 0; //38译码器控制led2时的I/O状态(根据译码器真值表)
  led2 = 0;//先点亮LED2

  TR0 = 1;//启动定时器0
  TMOD = 0x01;//定时器0、工作方式1
  TH0 = 0xB8;TL0 = 0x00;//已20ms定时时,装入的初值
  TF0 = 0;//单片机上电后,TF0/1默认为0,因此此步可省略。

  while(1)//主程序大循环
  {
    if(TF0 == 1)//判断TF0是否为1(溢出),若溢出则执行if内语句
    {
      TF0 = 0;//TF0软件重置
      TH0 = 0xB8;TL0 = 0x00;//给定时器0存储寄存器装入计数值为20ms时的初值(初值=65536-计数值)
      time0++;//TF0每溢出一次(20ms),变量time0加1,
      if(time0 >= 50)        //当time0从0变50时,则1秒时间已到
      {
        time0 = 0;//time0清零,重新计数
        led2 = ~led2;//led2取反,实现亮灭之间1秒变化
      }
    }
  }
  return 0;
}


评分

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

查看全部评分

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

使用道具 举报

沙发
ID:1 发表于 2014-8-29 18:34 | 只看该作者
很好 适合初学者
回复

使用道具 举报

板凳
ID:65546 发表于 2014-8-29 22:27 | 只看该作者
admin 发表于 2014-8-29 18:34
很好 适合初学者

谢谢管理员鼓励!
回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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