51单片机定时器基础知识

这篇具有很好参考价值的文章主要介绍了51单片机定时器基础知识。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

定时器初值计算

经验总结:定时器0工作方式1的溢出中断初始值计算

1.晶振11.0592M
11.0592MHz除12为921600Hz,就是一秒921600次机器周期,50ms=46080次机器周期。
65536-46080=19456(4c00)
TH0=0x4c,TL0=0x00

2.晶振12M
12MHz除12为1MHz,也就是说一秒=1000000次机器周期。50ms=50000次 机器周期。
65536-50000=15536(3cb0)
TH0=0x3c,TL0=0xb0

3.晶振22M
22MHz除12为1,833,333Hz,也就是说一秒=1833 333次机器周期。50ms=91666次 机器周期(超出了65536,不可以定50ms)。取20ms=36666次机器周期
65536-36 666 = 28870(70c6)

定时器查询方式

/*******************************************************************
功能:使用定时器中断方式控制一个发光二极管亮1秒,再灭1秒,如此重复。
晶振:11.0592M
led灯接在单片机P1.0引脚
********************************************************************/
#include<reg52.h> //头文件,开头都这样写
#define uchar unsigned char//宏定义 无符号字符型
uchar num=0;
sbit led=P1^0;
void main() //主函数
{
TMOD=0x01; //设置TMOD为0000 0001,定时器0工作方式1
TH0=(65536-45872)/256;
TL0=(65536-45872)%256; //设定11.0592M晶振定时50ms的初值为45872
TR0=1; //启动定时器0
while(1) //假如12M晶振定时50ms的初值为50000
{
if(TF0) //定时满溢出时TF0=1
{
num++; //每隔50ms,num++等于num=num+1
TF0=0; //清除溢出标志位
TH0=(65536-45872)/256;
TL0=(65536-45872)%256; //重新装初值
if(num==20) //如果num=20,说明已定时1s
{
num=0; //令num清零重新计算20次
led=~led; //令发光二极管状态取反,每隔1s亮一次
}
}
}
}

/*******************************************************************
功能:使用定时器中断方式控制一个发光二极管亮1秒,再灭1秒,如此重复。
晶振:11.0592M
led灯接在单片机P1.0引脚
********************************************************************/
#include<reg52.h>
#define uchar unsigned char
uchar num=0;
sbit led=P1^0;
void main()
{
TR0=1;
TMOD=0x01;
TH0=(65536-45872)/256;
TL0=(65536-45872)%256;
while(1)
{
if(TF0)
{
num++;
TF0=0;
TH0=(65536-45872)/256;
TL0=(65536-45872)%256;
if(num==20)
{
num=0;
led=~led;
}
}
}
}

定时器中断方式

功能:使用定时器中断方式控制一个发光二极管亮1秒,再灭1秒,如此重复。
晶振:11.0592M
led灯接在单片机P1.0引脚
********************************************************************/
#include<reg52.h> //头文件,开头都这样写
#define uchar unsigned char//宏定义 无符号字符型
uchar num=0;
void init(); //声明需要调用的子函数
sbit led=P1^0;
void main() //主函数
{
init();
while(1) //程序在这里等待中断
{
if(num==20) //定时器完成20次50ms定时进入if语句
{
num=0; //清零
led=~led; //led取反
}
}
}
void init()
{
TR0=1; //启动定时器0
TMOD=0x01; //设置TMOD为0000 0001,定时器0工作方式1
TH0=(65536-45872)/256;
TL0=(65536-45872)%256; //设定11.0592M晶振定时50ms的初值为45872
EA=1; //开总中断
ET0=1; //开定时器0中断
}
void T0_time() interrupt 1 //中断定时函数格式:void 函数名()interrupt 中断号
{
TH0=(65536-45872)/256;
TL0=(65536-45872)%256; //重新设定11.0592M晶振定时50ms的初值为45872
num++;
}

/*******************************************************************
功能:使用定时器中断方式控制一个发光二极管亮1秒,再灭1秒,如此重复。
晶振:11.0592M
led灯接在单片机P1.0引脚
********************************************************************/
#include<reg52.h>
#define uchar unsigned char
uchar num=0;
void init();
sbit led=P1^0;
void main()
{
init();
while(1)
{
if(num==20)
{
num=0;
led=~led;
}
}
}
void init()
{
TR0=1;
TMOD=0x01;
TH0=(65536-45872)/256;
TL0=(65536-45872)%256;
EA=1;
ET0=1;
IT0=1;
}
void T0_time() interrupt 1
{
TH0=(65536-45872)/256;
TL0=(65536-45872)%256;
num++;
}文章来源地址https://www.toymoban.com/news/detail-445077.html

到了这里,关于51单片机定时器基础知识的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包赞助服务器费用

相关文章

  • 51单片机定时器实验(汇编)

    51单片机定时器实验(汇编)

    基于AT89C51的定时器实验,汇编语言,分享出来是希望各位能共同学习。附上注释希望能认真研究,若有错误请指出,谢谢。 一、实验目的 掌握单片机定时器的使用方法。 掌握中断的使用方法。 二、实验内容 采用中断方式控制定时器。使得单片机P1.0引脚产生周期为1S的方波

    2024年02月11日
    浏览(11)
  • 51单片机之定时器篇

    51单片机之定时器篇

    首先,学好单片机必须要搞懂定时器,定时器是单片机重要的组成部分之一,总之,学不好定时器,单片机相当于没学,下面就让我介绍如何学好单片机定时器。 学习单片机首先要明白的: 1,51单片机有两组定时器/计数器,既可以定时,又可以计数,总称之定时器 2,单片

    2024年02月11日
    浏览(14)
  • 51单片机PWM(定时器)

    51单片机PWM(定时器)

    目录 前言 一、PWM的介绍 二、在定时器中配置PWM 三、代码  总结         PWM普遍应用于惯性系统,我们知道单片机几乎只能输出“1”和“0”两种状态,即开和关,想要输出模拟量是不太容易实现的,那么怎样才能使单片机输出平滑的线性信号呢?没接触过PWM的小伙伴可能第

    2024年02月09日
    浏览(11)
  • 51单片机 | 定时器中断实验

    51单片机 | 定时器中断实验

      这一节介绍51单片机的定时器中断。 STC89C5X 含有 3 个定时器:定时器 0、定时器 1、定时器 2(注意: 51 系列单片机一定有基本的 2 个定时器(定时器 0 和定时器 1),但不全有 3 个中断,需要查看芯片手册,通常我们使用的是基本的 2 个定时器:定时器 0/1)。本节要实现

    2024年02月06日
    浏览(17)
  • 【51单片机】:定时器的详解(包括对单片机定时解释、各类定时方式,以及中断方式)

    【51单片机】:定时器的详解(包括对单片机定时解释、各类定时方式,以及中断方式)

              51定时/计数器的详解。                   码字不易,如有帮助请收藏,点赞哦。         前提:首先我们知道51单片机内部有21~26个特殊功能寄存器: P.x口寄存器:P0、P1、P2、P3 数据指针寄存器:DP0H、DP0L、DP1H、DP1L 定时器: TH1、TL1、TH0、TL0、TMOD、TCON 串口:

    2024年02月07日
    浏览(35)
  • 51单片机中断定时器1用法

    51单片机中断定时器1用法

    中断为使单片机具有对内部或外部随机发生的事件实时处理而设置的。 中断技术不仅解决了快速主机与I/O设备的数据传送问题,而且还有具有如下的优点: 1. 分时操作:CPU可以分时为多个I/O设备服务,提高了计算机的利用率。 2. 实时操作:CPU能够及时处理应用系统的随机事

    2024年02月06日
    浏览(12)
  • 51单片机定时器中断TMOD

    51单片机定时器中断TMOD

    最近在学定时器中断TMOD,写程序时,要对定时器进行配置 对TMOD进行赋值时,拌了好久。。。。 如何根据所用的      定时器0/1 ,  工作方式0/1/2/3      对TMOD赋值呢? 我们知道: 1.TMOD长这样 :  由八位组成,前四位是T1的参数;后四位是T0的参数;GATE 和 C/T\\\' 不用多讲,

    2024年02月12日
    浏览(15)
  • 【单片机c51】定时器应用1

    【单片机c51】定时器应用1

    1.系统时钟为12MHz,编程实现从P1.0引脚输出一个周期为2ms的方波。 注:要想产生一个周期2ms的方波,定时器应产生1ms的周期性的定时,定时对P1.0求反。选择定时器T0,方式1定时,采用中断方式,GATE不起作用。   注:1.EA=1 所有的中断请求被开放 2.ET0=1  允许T0溢出的请求 3.T

    2024年02月04日
    浏览(43)
  • 51单片机笔记:定时器/计数器

    51单片机笔记:定时器/计数器

    定时器/计数器的结构 AT89S51内部两个16位定时器/计数器:T0(P3.4),T1(P3.5),定时器/计数器T0由特殊寄存器TH0,TL0构成,T1由特殊功能寄存器TH1,TL1构成 T0,T1都有定时器和计数器两种工作模式,两种模式实质都是对脉冲信号进行计数,只不过技术信号来源不同。 计数器模式 是对

    2024年02月06日
    浏览(13)
  • C51单片机——中断与定时器

    C51单片机——中断与定时器

    中断是大多数CPU最精彩的部分之一,下面我们通过讲解和编程练习学习中断和定时器相关概念 目录 1.1.什么是中断 1.2.中断的种类 1.3中断的相关概念 1.4. 51单片机可用中断及相关引脚 1.4.寄存器 1.5.中断优先级 在未进行任何关于优先级的设置情况下,51 单片机(52 单片机)中断

    2024年02月03日
    浏览(15)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包