51单片机入门 - 定时器的使用技巧

发布者:平和的心情最新更新时间:2022-04-21 来源: eefocus关键字:51单片机  入门  定时器 手机看文章 扫描二维码
随时随地手机看文章

1、定时器和计数器

时钟周期:单片机时序中的最小单位,集体计算的放法就是时钟源分之一

机器周期:单片机完成一个操作的最短时间,=12个时钟周期

定时器:打开定时器后,定时器“存储寄存器”的值经过一个机器周期自动加1,也就是说,机器周期是定时器的计数周期。

 

2、定时器的寄存器

 

 

TMOD —— 工作模式选择寄存器——常用模式1和模式2.

TCON —— 控制寄存器(TRn定时器开关)

TH/TL —— 定时计数器

 

3、定时器应用

 

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


写程序之前,我们要先来学会计算如何用定时器定时时间。我们的晶振是 11.0592M,时钟周期就是 1/11059200,机器周期是12/11059200,时器定时值最大也就是 71ms 左右。


(65536-N)*12/11.0592M = time ---计算出N转换成十六进制

1ms的例子:


TMOD = 0X01;

TH0 = 0XFC;

TL0 = 0X67;

TR0 = 1; 


#include

 

 

 

typedef unsigned char uchar;

 

 

 

sbit LED = P0^0;

 

 

 

int  main(void)

 

{

 

  uchar cnt = 0;  //定义一个计数变量,记录T0溢出次数

 

 

 

  TMOD = 0x01;  //设置T0为模式1

 

  TH0 = 0xFC;  //为T0赋初值0xB800

 

  TL0 = 0x67;

 

  TR0 = 1;     //启动T0

 

 

 

  while (1)

 

  {

 

    if (1 == TF0)        //判断T0是否溢出

 

    {

 

      TF0 = 0;         //T0溢出后,清零中断标志

 

      TH0 = 0xFC;      //并重新赋初值

 

      TL0 = 0x67;

 

      cnt++;           //计数值自加1

 

      if (cnt >= 1000)   //判断T0溢出是否达到50次

 

      {

 

        cnt = 0;     //达到50次后计数值清零

 

        LED = ~LED;  //LED取反:0-->1、1-->0

 

      }

 

    }

 

  }

 

 

 

  return 0;

 

}

4、数码管

 

共阴与共阳数码管 ——8个LED灯

位选——控制选择多个数码管中的哪一个

段选——选择数码管显示的值

 

// 秒定时器:

 

#include

 

 

 

typedef unsigned int uint;

 

typedef unsigned char uchar;

 

 

 

uchar code count[] =

 

{

 

  0xC0, 0xF9, 0xA4, 0xB0, 0x99, 0x92, 0x82, 0xF8,

 

  0x80, 0x90, 0x88, 0x83, 0xC6, 0xA1, 0x86, 0x8E

 

};

 

 

 

int main(void)

 

{

 

  uchar cnt = 0;  //记录T0中断次数

 

  uchar sec = 0;  //记录经过的秒数

 

 

 

  TMOD = 0x01;  //设置T0为模式1

 

  TH0 = 0xFC;  //为T0赋初值0xB800

 

  TL0 = 0x67;

 

  TR0 = 1;     //启动T0

 

 

 

  while (1)

 

  {

 

    if (TF0 == 1)        //判断T0是否溢出

 

    {

 

      TF0 = 0;         //T0溢出后,清零中断标志

 

      TH0 = 0xFC;      //并重新赋初值

 

      TL0 = 0x67;

 

      cnt++;           //计数值自加1

 

      if (cnt >= 1000)   //判断T0溢出是否达到1000次

 

      {

 

        cnt = 0;            //达到1000次后计数值清零

 

        P0 = count[sec];  //当前秒数对应的真值表中的值送到P0口

 

        sec++;              //秒数记录自加1

 

        if (sec >= 16)      //当秒数超过0x0F(15)后,重新从0开始

 

        {

 

          sec = 0;

 

        }

 

      }

 

    }

 

  }

 

 

 

  return 0;

 

}


关键字:51单片机  入门  定时器 引用地址:51单片机入门 - 定时器的使用技巧

上一篇:51单片机最小系统板制作过程
下一篇:51单片机入门 - 中断的使用

推荐阅读最新更新时间:2024-11-13 10:37

8051单片机的控制总线的作用介绍
控制线一共有6条: (1)ALE/ (/PROG):地址锁存允许/编程线,配合P0口引脚的第二功能使用。在访问片外存储器时,8051CPU在P0.7~P0.0引脚上输出片外存储器低8位地址的同时在ALE/ (/PROG)上输出一个高电位脉冲,用于把这个片外存储器低8位地址锁存到外部专用地址锁存器,以便空出P0.7~P0.0引脚线去传送随后而来的片外存储器读写数据。在不访问片外存储器时,8051自动在ALE/ (/PROG)上输出频率为fosc/6的脉冲序列。该脉冲序列可用作外部时钟源或作为定时脉冲源使用 (2)(/EA)/Vpp:允许访问片外存储器/编程电源线,可以控制8051使用片内ROM还是使用片外ROM。若 (/EA)=0,
[单片机]
51单片机与蓝牙模块连接
不久前开始学习使用蓝牙模块,在模块与51单片机连接的过程中出现了非常多的问题,我想应该也是很多新手和我一样会遇到这样的问题,因此特地写这篇文章,想分享下在学习过程中遇到的问题以及解决方法。 此次学习用到模块是HC-06蓝牙模块,如下图: 该模块某宝有售,价格约为20RMB。某宝上的HC-06有两种,分别是带引脚和不带引脚的,建议新手购买带引脚的。我从试验开始到成功,一共使用了四块蓝牙模块。第一次买的是带引脚的,但是模块本身是坏的;第二次买的是不带引脚的,但是由于自身的焊功有限,导致模块损坏,无法使用;第三次是朋友送的蓝牙4.0,由于某些原因无法使用,在此也特别感谢朋友送我蓝牙;第四次购买,就是上图所示的蓝牙,才最终完成了试
[单片机]
<font color='red'>51单片机</font>与蓝牙模块连接
51单片机外部中断产生条件
最近在做单片机外部中断实验的时候以为忘记产生中断的条件,于是查找了大学时代的教材和一些关于单片机的书籍,结果发现里面都没有相关的介绍。接着我有在AT89S52的中英文手册中查找了相关内容也没有找到相关的说明。最后不得已百度了一下,找到了答案如下: 5个中断源的符号、名称及产生的条件如下。 INT0:外部中断0,由P3.2端口线引入,低电平或下降沿引起。 INT1:外部中断1,由P3.3端口线引入,低电平或下降沿引起。 T0:定时器/计数器0中断,由T0计满回零引起。 T1:定时器/计数器l中断,由T1计满回零引起。 TI/RI:串行I/O中断,串行端口完成一帧字符发送/接收后引起。
[单片机]
8051单片机两种减法指令的格式和使用
1.带借位减法 指令 SUBB A,Rn ;(A) (A)-(Rn)-(C),以下类同。 SUBB A,direct SUBB A,@Ri SUBB A,#data 注意:减法之前先清零C,减法指令无不带借位减法指令。 2.减1指令 DEC A ;(A) (A)-1 ,以下类同。 DEC Rn DEC @Ri DEC direct 例、设(R0)=7FH,在内RAM中,(7EH)=00H,(7FH)=40H 执行:DEC @R0 DEC R0 DEC @R0 结果为: (R0)= 7EH,(7EH)=0FFH,(7FH)=3FH。
[单片机]
【GD32 MCU 入门教程】GD32 MCU 常见外设介绍(3)NVIC 介绍
NVIC(Nested vectored interrupt controller,嵌套向量中断控制器)是Cortex-M处理器的一部分,它是可编程的,且寄存器位于存储器映射的系统控制空间(SCS)。NVIC与内核相辅相成,共同完成对中断的响应。本章将介绍中断的优先级设置、如何定义中断函数名称、中断向量如何偏移。有关NVIC的更多知识,请见《ARM Coretex-M3权威指南》。 3.1.优先级的设置 在Cortex-M中,优先级对于异常来说很关键的,它会影响一个异常是否能被响应,以及何时可以响应。优先级的数值越小,则优先级越高。Cortex-M支持中断嵌套,使得高优先级异常会抢占低优先级异常。有3个系统异常:复位,NMI以
[单片机]
【GD32 MCU <font color='red'>入门</font>教程】GD32 MCU 常见外设介绍(3)NVIC 介绍
51单片机-温度传感器代码解析Ⅱ
1.小于0度的转换 我们知道当测量的实际温度为0度以下时,temp没转换时的情况为下图所示 我们已经知道高5位为1表示的是负数,那么-0.5度的时候为什么是1111 1111 1111 1000。 负数的计算涉及到补码的知识。首先0xFFF8,除去高5位那就是 111 1111 1000 反码为 000 0000 0111 而补码就是反码加1,也就是补码为000 0000 1000 这样0.5就是由补码(十进制的8)乘以0.0625得来。 我们要知道,负数的时候需要关注的是temp的低11位,补码其实就是2的11次方(2048)减去temp的低11位的数值。 -55度的时候,补码为2048-0x0490=880。
[单片机]
<font color='red'>51单片机</font>-温度传感器代码解析Ⅱ
HD4478U显示LCD与51单片机驱动程序
#include SST89x5x4.H #include absacc.h #include intrins.h sbit LCDRSPIN = P3^7; sbit LCDRWPIN = P3^6; sbit LCDEPIN = P2^6; #define UCHAR unsigned char void delay(unsigned int i) { UCHAR j; for(i; i 0; i--) for(j = 200; j 0; j--); } /////////////////////////////// //控制LCD unsigned char XPOS,YPOS; //测
[单片机]
20-基于51单片机的温湿度检测仪设计
具体实现功能 系统由STC89C52单片机、DHT11传感器模块、1602液晶显示屏模块、按键模块、报警模块构成。 具体功能: 1、DHT11数字温湿度传感器把采集到的温湿度数据传给单片机并显示到液晶屏上; 2、可以手动设置温湿度上下限值; 3、当温湿度值超过设定的上下限值时,蜂鸣器响起,相应指示灯闪烁。 设计背景 温度、湿度和人类的生产、生活有着密切的关系,同时也是工业生产中最常见最基本的工艺参数,例如机械、电子、石油、化工等各类工业中广泛需要对温度湿度的检测与控制。并且随着人们生活水平的提高,人们对自己的生存环境越来越关注。而空气中温湿度的变化与人体的舒适度和情绪都有直接的影响,所以对温度湿度的检测及控制就
[单片机]
20-基于<font color='red'>51单片机</font>的温湿度检测仪设计

推荐帖子

有奖测评: 米尔全志车规级CPU开发板 MYC-YT507
型号:MYD-YT507-8E1D-150-I(工业级),价值650元数量:3套MYC-YT507核心板基于全志车规级T507处理器,该处理器集成四核CortexA53CPU、G31MP2GPU、32位DDR3/LPDDR3/DDR4/LRDDR4动态随机存储器,多路视频输出接口(RGB/2*LVDS/HDMI/CVBSOUT)、多路视频输入接口(MIPICSI/BT656/BT1120)。该芯片支持4K@60fpsH.265解码,4K@60fp
EEWORLD社区 国产芯片交流
如何修改wince 下 ie显示网页的默认字体?
那位知道,如何修改winceie中显示网页内容的中文默认字体?我把系统字体全部换掉了,但是ie还是顽固的保持宋体。如何修改wince下ie显示网页的默认字体?自己顶帮顶下.如果系统都没有宋体了,IE还能是宋体,这就奇怪了宋体我没删除,fontlink修改了下Tahoma=\\\\Windows\\\\UniSun.ttf,UniSunCourierNew=\\\\Windows\\\\UniSun.ttf,UniSunArial=\\\\Wi
wxchen2008 WindowsCE
串口
我的PM2.5和433模块公用一个串口,为什么单独用的时候都正常,但是两个同时插上就低电平拉不到地,3.3V系统,拉低有1.6V左右。串口串口是不能共用的,串口的电平是推挽输出的,接在一起会冲突,一个输出高一个输出低接到一起就会是中间电平。 要么转成485,要么加一个切换开关——“分时复用”,两个设备共用串口,可以一个设备仅接收,一个设备仅发送,但不推荐这么使用。发生了电平竞争,推挽型输出不可简单并联,需要用数据选择器、模拟开关等来选择信号,至少也需要用二极管接成“线与”模式后再汇
xie675101459 单片机
STM32L151RCT6下载完程序进不了低功耗
各位大佬好,小弟在使用STM32L151RCT6单片机的时候遇到一个奇怪的问题,我用的是HAL库,当我下载完程序后如果不完全断电,单片机进不了低功耗,即使通过硬件复位现象也是一样,但是只要我断开电源重新上电,后面不管是进入低功耗还是低功耗下唤醒都完全正常了,现在做一个产品通过锂电池供电,而且锂电池是焊接到板子上的,每烧录一次程序,就进不了低功耗了,得把电池焊下来重新接一下才正常,真是心力憔悴啊。在网上找了都没找到类似的问题,不知大佬们有没有碰到过这种情况。STM32L151RC
星月夜 stm32/stm8
有关BUCK电感的设计方法
有关BUCK电感的设计方法这个好用,顶一下~全文英。顶一下~
czf0408 电源技术
分享一本不过时的《电源管理基础Dummies®》
电源管理基础电子书为大家介绍有关电源管理的基础知识,以及最新发展趋势和应用。以下是本电子书中的一些亮点:1.DC电池配置电子设备使用哪种电源管理子系统,取决于电源类型。这些电源包括交流、直流或超低功耗直流电源,例如太阳能。许多设备都由单个电池或包含多个电池的电池组提供直流电源。这些电池可以按不同的方式连接,以提供不同的电流和电压输出。例如:PowerManagementFundamentalsForDummies下载电子书
okhxyyo 电源技术
小广播
设计资源 培训 开发板 精华推荐

最新单片机文章
何立民专栏 单片机及嵌入式宝典

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

换一换 更多 相关热搜器件

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved