【C51】单片机定时器介绍

【C51】单片机定时器介绍

简介

单片机定时器是单片机中非常重要的一个模块,其主要功能是提供定时、延时、计数等功能。在单片机应用中,经常会遇到需要定时、延时等的场景,如驱动液晶屏幕、超声波测距、蓝牙模块等。因此,学习单片机定时器对于程序员来说是非常必要和重要的。

C51定时器功能概述

C51单片机中有四个定时器,分别为:定时器0、定时器1、定时器2、定时器3。

定时器是通过一个计数器来实现的,它会不断的计数,并与计数器设定的值进行比较。当计数器的值与设定的值一致时,我们可以通过定时器的溢出中断或者比较中断来触发相应的事件。

C51定时器相关寄存器

定时器计数器寄存器 THx 和 TLx

THx 和 TLx 分别是定时器计数器的高字节和低字节寄存器,可通过它们来存储计数器的初值和当前计数值。

定时器控制寄存器 TCON

TCON 寄存器中的 TFx 是定时器溢出中断标志位。当定时器计数器的值从 0xFF 进行了 256 次+1 操作并重新变为 0x00 时,此标志自动置 1,表示计数器已经溢出。

定时器模式寄存器 TMOD

TMOD 是模式寄存器,用于设定计时方式和工作模式。

C51定时器编程范例

下面是定时器1计时1s的代码范例,使用了定时器1的方式 1:

#include<reg51.h>

void init_timer1(void){
    TMOD |= 0x10;   // 定时器1,工作方式1,16位
    TH1 = 0xFC;     // 设定初值,计时1s
    TL1 = 0x66;
}

void main(void){
    EA = 1;
    ET1 = 1;
    init_timer1();

    while(1){
        // do something
    }
}

void timer1_isr(void) interrupt 3{
    TH1 = 0xFC;     // 重设定时器初值,计时1s
    TL1 = 0x66;
    // do something
}

这是一段简单的定时器编程代码,首先我们需要按照要求,设定定时器的工作方式和初值。这里我们使用了工作方式 1,即 16 位计数器,计时 1s。然后开启定时器溢出中断,注册中断服务函数,并初始化定时器。在中断服务函数中,我们需要重设定时器初值,以便下一次计时,同时在该函数中处理我们需要处理的事务。

结语

单片机定时器是单片机程序设计重要的一部分,掌握好定时器的原理和编程方法,能大大提高程序员的编程能力。在单片机设计中,如何科学的选择定时器的工作方式和初始化参数,能够在很大程度上提高单片机系统的性能和稳定性,因此深入学习单片机定时器的工作原理和编程方法对于我们的单片机开发来说是非常有必要的。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:【C51】单片机定时器介绍 - Python技术站

(0)
上一篇 2023年3月28日
下一篇 2023年3月28日

相关文章

  • php post大量数据时发现数据丢失问题解决方法

    当使用PHP通过POST方法传递大量数据时,我们可能会遇到数据丢失问题。其主要原因是POST数据量太大导致服务器配置不够或者PHP配置不够。以下是一些可能的解决方法。 1. 修改PHP.ini文件 首先,查找你的PHP.ini配置文件。如果你使用的是XAMPP或WAMP服务器等软件,那么PHP.ini文件通常位于“php\php.ini”目录下。 在文件中找…

    other 2023年6月27日
    00
  • 关于python:in运算符 float(”nan”)和np.nan

    以下是关于“关于Python: in运算符float(‘nan’)和np.nan”的完整攻略,包含两个示例。 关于Python: in运算符float(‘nan’)和np.nan 在Python中,我们可以使用in运算符来检查一个元素是否在一个列表或集合中。但是,当涉及到NaN(Not a Number)时,in运算符的行为可能会有所不同。以下是关于in运算…

    other 2023年5月9日
    00
  • Android 不一样的原生分享

    Android 不一样的原生分享的完整攻略 在Android中,原生分享功能是一个非常常用的功能,可以让用户将内容分享到其他应用程序中。本文将详细讲解Android不一样的原生分享的完整攻略,包括如何使用Intent实现原生分享功能,以及如何自定义分享内容和分享界面。 使用Intent实现原生分享功能 在Android中,可以使用Intent实现原生分享功能…

    other 2023年5月5日
    00
  • 【Alpha】Scrum Meeting 3

    【Alpha】Scrum Meeting 3 简介 本文是关于Alpha项目的Scrum Meeting 3的记录。 会议时间 2021年8月15日,周日,晚上7点至8点。 参会成员 产品经理:张三 开发者:李四、王五、赵六、钱七 测试人员:小明、小红 议题 1. 任务完成情况 开发者汇报了上一次Sprint期间所完成的任务,并展示了相关的代码和实现情况。测…

    其他 2023年3月28日
    00
  • 电脑主机吱吱响几下就自动关机重启什么原因?如何解决?

    电脑主机吱吱响几下就自动关机重启 原因分析: 电脑主机吱吱响几下就自动关机重启,可能是因为如下原因: 蓝屏错误 电源供电不足 CPU温度过高 电源线路故障 内存有问题 解决方法: 方法一:检查硬件问题 请拆开机箱,查看内部接口的插拔情况是否良好,并将所有内存条和插槽插拔一遍,确保电路没有松动。 检查主板上的所有电容和插口是否有损坏或虚焊的情况,并及时找维修人…

    other 2023年6月27日
    00
  • 水星无线路由器怎么设置静态ip即WAN口里设置静态的IP

    水星无线路由器设置静态IP的攻略 步骤1:登录路由器管理界面 首先,确保您已经连接到水星无线路由器的网络。然后,打开您的Web浏览器,输入默认的管理界面地址(通常为192.168.1.1或192.168.0.1),并按下Enter键。这将打开水星无线路由器的登录页面。 步骤2:输入管理员凭据 在登录页面上,输入您的管理员用户名和密码。如果您没有更改过这些凭据…

    other 2023年7月30日
    00
  • C++多继承(多重继承)的实现

    C++中的多继承(也叫多重继承)是指一个类可以同时继承自多个不同的类。这种继承方式可以让派生类同时获得多个基类的属性和方法,从而提高代码重用性和灵活性。在此,我将详细讲解C++多继承的实现攻略。 多继承的声明 在C++中,声明一个多继承的类非常简单,只需要在类名后面使用逗号分隔多个基类即可。例如,假设我们要定义一个“BirdDog”类,它除了继承自“Bird…

    other 2023年6月26日
    00
  • 页面自定义拖拽布局

    页面自定义拖拽布局是一种常见的网页布局方式,用户可以自由地拖动组件,以达到自己想要的布局效果,下面我将介绍如何实现页面自定义拖拽布局的完整攻略。 1. 实现拖拽事件 首先,我们需要实现拖拽事件。这个可以使用原生的HTML5拖拽API来实现。具体步骤如下: 在需要拖拽的元素上添加属性 draggable=”true”。 为需要拖拽的元素添加 dragstart…

    other 2023年6月25日
    00
合作推广
合作推广
分享本页
返回顶部