51单片机玩转物联网基础篇08-定时器

最新更新时间:2022-05-13来源: eefocus关键字:51单片机  物联网  定时器 手机看文章 扫描二维码
随时随地手机看文章

前言

在实时控制系统中,经常需要定时时钟以实现精准延时、定时,也经常需要计数功能以实现对外界脉冲进行计数, 本节,我们开始学习51单片机的定时器,然后开启一个定时器,实现1S翻转一次电平,控制LED灯亮灭。


一、基础知识

1.定时器简介


51单片机的定时器有两个,分别是T0和T1,它们可以用于定时或者对外部脉冲(事件)计数,还可以作为串行口的波特率发生器使用,定时器裸机结构图如下所示

在这里插入图片描述

定时器工作在定时方式时候,计数器对内部时钟机器周期数进行计数,每个机器周期等于12个晶体震荡周期,定时器工作在计数方式时候,计数脉冲来自外部输入引脚P3.4、P3.5,当外部输入信号从1到0跳变时,计数器的值加一。


2.定时器相关寄存器


(1) 控制寄存器TCON(88H)

在这里插入图片描述

TCON用于控制定时器的启动、停止、溢出标志和外部中断信号触发方式。


(2) 方式控制寄存器TMOD(89H)

在这里插入图片描述

从上图中可知,GATE为0时候,定时器由TR0或TR1控制启动,为1的时候,只有在外部中断引脚为高电平时候,TR0或者TR1才可以控制启动,对于T1,有3种工作方式,而T0有四种工作方式;


3.定时器工作方式


定时器工作方式如下

方式位计数器

(1) 工作方式0

在这里插入图片描述

方式0为13位计数器,由TLi的低5位和THi的8位组成,当GATE为1的时候,取反为0,定时器启动需要外部中断i引脚为1,然后置位TRi启动定时器,当外部中断i引脚变为0时候,定时器停止计数,这种方式可用来测试外部中断引脚正脉冲的宽度,当处于计数模式时,计数脉冲是Ti引脚上的外部脉冲。


定时模式初值:


X = 2的13次方 - f/12 * T   (其中X为计数器初值, f为时钟频率,T为定时时间)


计数模式初值:


X = 2的13次方 - 计数值 


(2) 工作方式1

在这里插入图片描述

方式1和方式0结构几乎完全相同,唯一区别是计数器的长度不同,方式1定时器长度为16位定时模式初值:


X = 2的16次方 - f/12 * T   (其中X为计数器初值, f为时钟频率,T为定时时间)


计数模式初值:


X = 2的16次方 - 计数值 


(3) 工作方式2

在这里插入图片描述

方式2是能自动重装载计数初值的8位计数器, TLi用作计数器,THi保存计数初值,当TLi计数溢出时,将TFi位置1,同时又将保存在高8位中的计数初值重新装入低8位计数器中。

定时模式初值:


X = 2的8次方 - f/12 * T   (其中X为计数器初值, f为时钟频率,T为定时时间)


计数模式初值:


X = 2的8次方 - 计数值 


(4) 工作方式3

在这里插入图片描述

方式3只有T0支持,T1不支持,若将T1设置为方式3,T1会立即停止计数,且方式3相比其他几种方式,方式3只用了TL0计数器,其他操作和方式0、方式1相同。

注意:通常定时器中定时使用方式1,串口通信使用方式2


二、实例

1.创建工程

将上一节工程复制出来,并修改名字为07-timer

在这里插入图片描述

2.程序

我们使用定时器T0的方式1实现一个20ms的中断,中断服务程序中软件计数,当达到50次,总计1S时候,翻转LED引脚电平


首先,计算初值X


X = 2的16次方 - f/12 * T (其中X为计数器初值, f为11.0592MHZ,T为0.02S)

X = 47104 = 0xB800


然后初始化定时器


void tiemr_init(void) 

    TMOD = 0x01;     //使用模式1,16位定时器

    TH0 = 0xB8;

    TL0 = 0x00;              

    EA=1;            //总中断打开 

    ET0=1;           //定时器中断打开 

    TR0=1;           //定时器开关打开 

}


中断服务子程序


void timer0_func() interrupt 1 

    TH0 = 0xB8; 

    TL0 = 0x00;               

    if (count >50) 

    { 

        LED = ~LED; 

        count = 0; 

    } 

    count ++; 

}


完整代码


/*------------------------------------------------------ 

*店铺网址:https://shop321633213.taobao.com/?spm=a1z10.3-c.0.0.33816af5iLgN2F 

*适用于A08开发板 

*实验现象:定时器中断实现LED 1S亮灭 

*QQ群:906015840 

-------------------------------------------------------*/ 

 

#include //头文件 

#include  

#define uchar unsigned char 

#define uint unsigned int 

         

sbit LED = P1^0; 

int count = 0; 

 

void tiemr_init(void) 

    TMOD = 0x01;     //使用模式1,16位定时器 

    TH0 = 0xB8;      // 20ms中断,初值0xB800 

    TL0 = 0x00;               

    EA=1;            //总中断打开  

    ET0=1;           //定时器中断打开  

    TR0=1;           //定时器开关打开  

 

void main(void) //主函数 

    tiemr_init(); 

    while(1); 

// 20ms进入一次中断,计数50次为一秒 

void timer0_func() interrupt 1 

    TH0 = 0xB8; 

    TL0 = 0x00;               

    if (count >50) 

    { 

        LED = ~LED; 

        count = 0; 

    } 

    count ++; 

}


注意:中断子程序中需要重新装载计数器初值


三、运行

将上述程序生成的hex文件烧录到板子中,可以看到P1^0对应LED灯每隔1秒亮灭一次,说明进入定时器中断程序执行成功。

在这里插入图片描述

关键字:51单片机  物联网  定时器 编辑:什么鱼 引用地址:http://news.eeworld.com.cn/mcu/ic571939.html

上一篇:51单片机玩转物联网基础篇09-串口通信
下一篇:51单片机玩转物联网基础篇07-外部中断

推荐阅读

学习笔记之-51单片机IO口详解
前言对单片机的控制,其实就是对I/O口的控制,无论单片机对外界进行何种控制,或接受外部的何种控制,都是通过I/O口进行的。51单片机每个IO端口结构都有差异,都各有各的特点。在平时的应用中,特别是设计外围硬件的时候,如果不了解其内部结构的话设计起来也许会有问题(特别是用到P0口),所以好好了解每个端口的结构是非常有必要的。再有一点是51单片机的引脚不像STM32那样可以支持重映射,所以硬件布局的时候也要注意这一点。下面就是在网上找的一点资料,整理如下:51单片机I/O口内部结构1.1P0端口的结构及工作原理     P0端口8位中的一位结构图由上图可见,P0端口由锁存器、输入缓冲器、切换开关、一个与非门、一个与门及场效应管驱动电路构
发表于 2022-05-17
学习笔记之-<font color='red'>51单片机</font>IO口详解
学习笔记之-51单片机中断
1.中断的概念通俗的讲,中断就是cup正在工作的时候,突然外部来了某一请求,要求cpu转去处理请求的事件,当事情做完之后cup再回来继续它的工作。这一过程称为中断 。单片机中断响应可以分为以下几个步骤:1、停止主程序运行。当前指令执行完后立即终止现行程序的运行;2、保护断点。把程序计数器PC 的当前值压入堆栈,保存终止的地址(即断点地址),以便从中断服务程序返回时能继续执行该程序;3、寻找中断入口;4、执行中断处理程序;5、中断返回。执行完中断处理程序后,就从中断处返回到主程序,继续往下执行。流程图如下:  中断技术不仅解决了快速主机与慢速I/O设备的数据传送问题,而且还具有如下优点:分时操作:CPU可以分时为多个I/O设备服务,提
发表于 2022-05-17
学习笔记之-<font color='red'>51单片机</font>中断
学习笔记之-51单片机定时计数器
一、单片机的时序单片机工作时,是在统一的时钟脉冲控制下一拍一拍地进行的。由于指令的字节数不同,取这些指令所需要的时间也就不同,即使是字节数相同的指令,由于执行操作有较大的差别,不同的指令执行时间也不一定相同,即所需的拍节数不同。时钟周期:时钟周期也称为振荡周期,定义为时钟脉冲的倒数(可以这样来理解,时钟周期就是单片机外接晶振的倒数,例如12M的晶振,它的时间周期就是1/12 us),是计算机中最基本的、最小的时间单位。 在一个时钟周期内,CPU仅完成一个最基本的动作。 在8051单片机中把一个时钟周期定义为一个节拍(用P表示),二个节拍定义为一个状态周期(用S表示)。机器周期:在计算机中,为了便于管理,常把一条指令的执行过程划分为若
发表于 2022-05-17
学习笔记之-<font color='red'>51单片机</font>定时计数器
学习笔记之-51单片机特殊功能寄存器
一.前言学习51单片机的过程中,其实就是学习怎么用它的特殊功能寄存器(有些寄存器是我们看不到的),特殊功能寄存器是80C51单片机中各功能部件对应的寄存器,用于存放相应功能部件的控制命令,状态或数据。我们写程序驱动硬件其实就是配置各种各样的寄存器,他是软硬件的最底层的一个接口。更加深入了解寄存器的工作过结构原理会在后面的内容中补充,这里只是把最常用的做一个整理,方便学习查阅。51单片机内部共有21个SFR,其布局如图:  上面就是51系列单片机21个特殊功能的寄存器,我们可以根据是否可以位寻址把这些寄存器分成2类,这里先简单说一下什么是为寻址吧,从图中可以看出,每个SFR占1个字节,多数字节单元中的每一位又有专用的“位名称”。能位寻
发表于 2022-05-17
学习笔记之-<font color='red'>51单片机</font>特殊功能寄存器
学习笔记之-51单片机最小系统搭建
单片机最小系统,或者称为单片机最小应用系统,是指用最少的元件组成的单片机可以工作的系统.对51系列单片机来说,最小系统一般应该包括:单片机、晶振电路、复位电路.一.先说一下51单片机的引脚:总线型 DIP40 引脚封装电源及时钟引脚, 4 个VCC:电源接入引脚VSS:接地引脚XTAL1:晶体振荡器接入的一个引脚XTAL2:晶体振荡器接入的另外一个引脚控制线引脚, 4 个RST/VPD:复位信号输入引脚/备用电源输入引脚;ALE/PROG:地址锁存允许信号输出引脚/编程脉冲输入引脚EA/VPP:内外存储器选择引脚,当接高电平时,单片机在复位后从内部ROM的0000H开始执行;当接低电平时,复位后直接从外部ROM的0000H开始执行P
发表于 2022-05-17
学习笔记之-<font color='red'>51单片机</font>最小系统搭建
学习笔记之-51单片机串口通信
1.原理  8051系列单片机有通用异步收发器(UART,universal Asynchronous Receiver/Transimitter)用于串口通信,发送时数据由TXD引脚引出,接收时数据从RXD引脚输入,有两个缓存器(Serial Buffer),一个作为发送缓存器,另一个作为接收缓存器。它们占用同一地址99H 。UART是可编程的全双工的串行口,短距离的机间通信可以使用UART的TTL电平,使用驱动芯片(MAX232)可以与通用微机进行通信。更多通信的知识可以看我的串口通信。  1.1 51单片机串行口的结构 :1.2 51单片机串行口的控制寄存器 :  51单片机串口通信,重点就SCON,PCON,SBUF三个寄存
发表于 2022-05-17
学习笔记之-<font color='red'>51单片机</font>串口通信
小广播
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

换一换 更多 相关热搜器件
电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2022 EEWORLD.com.cn, Inc. All rights reserved