单片机的定时器是作为片外资源,开启定时器需要设置相关的寄存器,当然,这些寄存器是可以位寻址的,怎么位寻址?在头文件中reg52.h中已经预定义好了。不用担心,你只需要学会设置就好了:

TMOD=0X01;    //定时器0工作在方式1(16位计数器)

TH0=0xfe;

TL0=0x33;

EA=1;

ET0=1;

TR0=1;

以上6条语句,已经将定时器设置好了,现在协议个led的项目来时间一下:

#include

#define uint unsigned int
#define uchar unsigned char
uint count=0;

//5000微秒的次数,用于在中断中加1,count有多少,定时count*5ms
sbit led=P1^0;

int main()

{
TMOD=0X01;    //定时器0工作在方式1(16位计数器)
TH0=0xfe;    //赋初值
//TH0=(65536-5000)/256;   //假设赋初值为60536,从60536开始,每隔1微秒,计数器加1,(高8位),计满为              5000微秒(5ms),之后产生中断
TL0=0x33;
TH0=(65536-5000)%6;   //赋初值为60536,从60536开始,每隔1微秒,计数器加1,(低8位)
EA=1;     //开总中断
ET0=1;    //开T0中断
TR0=1;    //启动T0开始计数

while(1)//大循环,循环执行里面的程序
{
if(count==20)//判断:如果定时20*0.5=10ms,10ms亮灭一次led
{
count=0;  //重新赋成0
led=~led; //led状态取反一次
}
}

void timer0() interrupt 1  //中断函数
{
TH0=0xfe;    //,重新赋值
//TH0=(65536-5000)/256;   //赋初值为60536,从60536开始,每隔1微秒,计数器加1,(高8位)
TL0=0x33;
TH0=(65536-5000)%6;   //赋初值为60536,从60536开始,每隔1微秒,计数器加1,(低8位)
count++;//0.5ms的次数加1

}

注意:这里使用到了中断,有时无需使用到中断:

#include

#define uint unsigned int
#define uchar unsigned char
uint count=0;     //5000微秒的次数,用于在中断中加1,count有多少,定时count*5ms
sbit led=P1^0;

int main()

{
TMOD=0X01;    //定时器0工作在方式1(16位计数器)
TH0=0xfe;    //赋初值
//TH0=(65536-5000)/256;   //假设赋初值为60536,从60536开始,每隔1微秒,计数器加1,(高8位),计满为              5000微秒(5ms),之后产生中断
TL0=0x33;
TH0=(65536-5000)%6;   //赋初值为60536,从60536开始,每隔1微秒,计数器加1,(低8位)
EA=1;     //开总中断
ET0=1;    //开T0中断
TR0=1;    //启动T0开始计数

while(1)//大循环,循环执行里面的程序

{

if(TF0==1)//每次产生中断的时候,TFx(0或1)都会置位

{

TF0=0;

count++;

}

if(count==20)//判断:如果定时20*0.5=10ms,10ms亮灭一次led

{
count=0;  //重新赋成0
led=~led; //led状态取反一次
}
}

转载于:https://www.cnblogs.com/ifreewolf/p/9346697.html

51单片机的定时器深入讲解相关推荐

  1. (六)51单片机基础——定时器

    定时器介绍:51单片机的定时器属于单片机的内部资源,其电路的连接和运转均在单片机内部完成. 定时器主要作用: 用于计时系统,可实现软件计时,或者使程序每隔一固定时间完成一项操作. 替代长时间的Dela ...

  2. 51单片机之定时器\计数器的工作原理

    51单片机之定时器\计数器的工作原理 定时器/计数器的结构: 何时处于计数器方式?何时处于定时器方式? TCON和TMOD特殊功能寄存器: 定时器/计数器工作方式: 方式0:13位的定时器/计数器 方 ...

  3. 【51单片机】定时器/计数器的工作原理和结构(一)

    [51单片机]定时器/计数器的工作原理和结构 回看下单片机中断系统内部结构: 分析内部中断触发: 先看图 TCON:和外部中断相比少了IT位设置触发方式 :1跳沿触发 0电平触发:此处我的理解是:就好 ...

  4. 51单片机计算定时器初值

    51单片机计算定时器初值 前言 理论分析 工作方式寄存器 TMOD GATE 门控位 C/T' 计数器模式和定时器模式选择位 M1 M0 工作方式选择位 定时器/计数器控制寄存器 TCON TCON补 ...

  5. 关于用51单片机内部定时器实现时钟和闹钟功能的概述

    关于用51单片机内部定时器实现时钟和闹钟功能的概述 仅个人观点,欢迎大家相互学习和讨论 STC89C52单片机,内部配置了三个定时器,T0\T1\T2,其中T2定时器我们几乎不用,或者说很少用到.我们 ...

  6. 51单片机用定时器0实现流水灯

    51单片机用定时器0实现流水灯的代码如下,用P1口接led灯,代码如下都有注释就不具体解释了,英语不怎么好,有的地方将就一下喽,本次主要讲一下P1口怎么赋值.原先写的都是用查表来移位的,个人感觉不怎么 ...

  7. 51单片机内部定时器/计数器实验

    51单片机内部定时器/计数器实验 一.实验内容 使用MCS-51内部定时/计数器,定时1秒钟,CPU运用定时中断方式,实现每1秒钟输出状态发生一次反转,即发光管每隔1秒钟亮一次(P1.7接LED). ...

  8. 51单片机:定时器实现1秒时数码管数字自动加一并循环

    51单片机:定时器实现1秒时数码管数字自动加一并循环 题目要求: 定时器中断实现每来1s,P1口接的一位共阳极数码管显示数+1, 加到9之后再来1s清零并重复上述过程 代码如下: (仅供参考) /* ...

  9. 51单片机学习--定时器--中断--串口通信

    51单片机学习–定时器–中断–串口通信 定时器–中断–串口通信 中断分类 定时器中断 外部中断 串口中断 基本概念 对于单片机来讲, 中断是指 CPU 在处理某一事件 A 时, 发生了另一事件 B, ...

最新文章

  1. Win10下VisualStudio2019安装和Helloworld测试
  2. HTML中的Content-Type的类型
  3. Python10/22--面向对象编程/类与对象/init函数
  4. fluidity详解
  5. 支付业务与技术架构学习总结(3)——账务系统
  6. 王爽《汇编语言》第2版-----2、寄存器
  7. CSS:公共样式(自用)
  8. wordpress迁移以及遇到的一些问题[mysql备份导入导出][固定链接404]
  9. 换服务器原网站数据会丢失吗,ecs服务器更换操作系统后原服务器数据还在吗?...
  10. H.265与H.264对比有哪些优势
  11. 手机号正则表达式(含大陆港澳台)
  12. 通信技术发展的自然辩证法
  13. 7z文件格式及其源码的分析(四)
  14. java文件上传像素限制,JS上传图片前的限制包括(jpg jpg gif及大小高宽)等
  15. 一个简单的界面拖动切换效果类ScrollViewGroup
  16. 摩尔定律到摩尔第二定律
  17. 实现简单的通信协议(STM32 F411RET6开发版)
  18. AirSim仿真学习记录(1)
  19. 如何在Android 2.2(Froyo)上创建闹钟快捷方式
  20. Activiti多人会签的实现 Activiti

热门文章

  1. 鲍姆-韦尔奇算法 数学推导
  2. druid读取hdfs文件
  3. 使用swipecard实现卡片视图左右滑动监听以及点击监听
  4. depcomp: line 571: exec: g++: not found
  5. nginx for discuz 伪静态规则
  6. 终端服务器超过了 最大连接数
  7. NetBeans 6.7.1、6.8界面美化
  8. 指南--安装带GTK前端的 F-Prot(杀毒)
  9. 从默认的 _id 字段中,取得时间信息
  10. GitHub 回滚操作