前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >单片机入门:定时器/计数器应用

单片机入门:定时器/计数器应用

作者头像
电子工程师成长日记
发布于 2022-07-21 07:49:59
发布于 2022-07-21 07:49:59
66800
代码可运行
举报
运行总次数:0
代码可运行

利用单片机内部定时器/计数器中断实现一个数码管的秒记数,重点学习定时器/计数器的工作方式以及其控制寄存器TMOD、TCON的功能,在程序实现过程中掌握定时器/计数器中断的一般步骤。

51单片机内部含有两个定时器/计数器,分别是T0和T1,在增强型51系列单片机中,如STC89C51RC,内部除了含有T0和T1外,还有T2定时器/计数器。定时器/计数器主要由于精确的定时,也可用于对外部脉冲进行计数以及为作为串行通信的波特发生器。定时/计数器不同的功能是通过对相关特殊功能寄存器的设置和程序设计来实现的。

为了获得1秒时间,T0中断需要发生200次。程序包含主函数,T0的初始化函数和T0中断服务函数,显示语句放在中断服务函数内,程序如下:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
/************************************************************************************/
//利用定时器0中断,实现SEG0秒计数
/************************************************************************************/
#include<reg52.h>
code unsigned char seven_seg[10] = {0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90};
unsigned char cp,i;                  //声明全局变量
void timer0_isr(void)  interrupt 1      // timer0中断服务函数
{
  TR0 = 0;                     //停止计数
  TL0 = 0x78;                  //TL0重新预置,把63536转化为16进制后的低8位
  TH0 = 0xec;                  // TH0重新预置
  TR0 = 0;                     //开始计数
  cp++;                        // timer0中断1次,变量cp加1
  if(cp == 200)                   //中断200次,时间刚好为1秒
  {
    cp = 0;
    i ++;
  }
  P2 = 0xdf;            //P2输出数码管的位选信号,seg0亮
  if(i == 10) i = 0;
  P0 = seven_seg[i];              // P0输出显示数据
  TR0=1;
}
void timer0_initialize(void)            // timer0中断初始化函数
{
  EA = 0;                       //设置中断允许寄存器IE中的 EA位,关闭中断总开关
  TMOD = 0x01;                  //设置计时器模式控制寄存器,Time0工作在定时方式1,16为定时器
  TR0 = 0;       //设置计时器控制寄存器TCON寄存器的TR0位为0,Timer0停止计数
  TL0 = (65536 - 5000) % 256;   //设置定时器的低8位初值,计5000个机器周期脉冲就会溢出
  TH0 = (65536 - 5000) / 256;; //设置定时器的高8位初值,假设单片机晶振为12MHz。
                  //频率,单片机的机器周期为1微秒,Timer0每1微秒加1
                  //计数,加满溢出变产生中断,从计数到中断刚好为5毫秒
  PT0 = 1;                      //设置中断优先次序寄存器IP中的PT0位,Timer0中断优先
  ET0 = 1;                      //设置中断允许寄存器IE中ET0的位,开启中断小开关
  EA = 1;                       //打开中断总开关
  TR0 = 1;                      //开始计数
}
void main (void)
{
  timer0_initialize();          // timer0初始化,为中断做好准备
  while (1);             //等待中断
}

仿真原理图如下:

仿真视频如下:

http://mpvideo.qpic.cn/0bf2x4aayaaaa4aafxulm5pvbp6dbs7qadaa.f10002.mp4?

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2020-10-25,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 电子工程师成长日记 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
【51单片机】十分钟学会定时器&中断¹
🚩write in front🚩  🔎大家好,我是謓泽,希望你看完之后,能对你有所帮助,不足请指正!共同学习交流🔎 🏅2021年度博客之星物联网与嵌入式开发TOP5~2021博客之星Top100~阿里云专家^星级博主~掘金⇿InfoQ创作者~周榜34»总榜1889🏅 🆔本文由 謓泽 原创 CSDN首发🙉如需转载还请通知⚠ 📝个人主页-謓泽的博客_CSDN博客 📃 🎁欢迎各位→点赞👍 + 收藏⭐️ + 留言📝​ 📣系列专栏-【51单片机】系列_謓泽的博客-CSDN博客🎓 ✉️我们并非登上我们所
謓泽
2022/12/12
1K0
【51单片机】十分钟学会定时器&中断¹
单片机入门:80C51定时/计数器简介
加1计数器输入的计数脉冲有两个来源,一个是由系统的时钟振荡器输出脉冲经12分频后送来;一个是T0或T1引脚输入的外部脉冲源。
电子工程师成长日记
2022/07/21
1.3K0
单片机入门:80C51定时/计数器简介
单片机补充案例--LED数码管99秒倒计时
说明:使用数码管实现倒计时显示 设备: 倒计时 可使用按钮作适当控制,暂停,开始,计时复位等。 程序: #include<8052.h>
zhangrelay
2021/03/03
8110
51单片机学习 中断及定时/计数实验
T1工作于方式 0 定时,P1.0口输出周期为 8ms 的方波,由仿真结果可以看到,一格为 2 ms,输出方波一个周期占了 4 格。
叶庭云
2021/12/01
1K0
51单片机学习     中断及定时/计数实验
C51 单片机开发定时器配置详解
本篇文章继续整理关于定时器/计数器开发配置的相关寄存器的内容。主要介绍两块,一个是定时器如何开始和停止,另外一个是定时器是使用 8 位还是 16 位如何决定。
码农UP2U
2024/05/20
6500
C51 单片机开发定时器配置详解
4.4 51单片机-NEC红外线遥控器解码
实验板上的红外线接收头是接在单片机的P3.2 IO口上,要使用红外线接收功能,需要将红外线接收头的跳线帽接上。
DS小龙哥
2022/01/12
2K0
4.4 51单片机-NEC红外线遥控器解码
51单片机SG90舵机控制原理
舵机控制原理:通过控制PWM来控制舵机转动的角度,关于PWM的知识可以去智能小车专栏进行学习,转动周期设置为20ms,控制高电平的时间来进行舵机转动的角度。
全栈程序员站长
2022/07/04
8120
51单片机SG90舵机控制原理
单片机课堂思考题-2000秒倒计时?
99秒倒计时,改为2000(6666)秒倒计时。 #include<8052.h> #define LSC P1_7 //特殊功能寄存器的位定义, #define LSB P1_6 //3-8译码器的输入端, #define LSA P1_5 //控制三极管Q2~Q6的导通 unsigned char smgduan[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0x0f8,0x80,
zhangrelay
2021/12/02
5120
单片机课堂思考题-2000秒倒计时?
实验四:定时器实验[通俗易懂]
一、实验目的 1、掌握单片机定时/计数器的使用方法。 2、掌握定时/计数器编程方法。
全栈程序员站长
2022/09/17
9980
实验四:定时器实验[通俗易懂]
51单片机学习-----独立按键控制流水灯状态
对于独立按键控制流水灯状态需要用到定时器以及相关中断的知识,所以我们首先需要了解什么是定时器?什么是中断?以及简单的运用中断和定时器的寄存器,配置定时器等相关知识。
用户11305458
2024/10/09
2860
51单片机学习-----独立按键控制流水灯状态
【51单片机】配置定时器
​ 那么我们先创建一个子函数 void Timer0_Init() ⇥ 对定时器进行初始化。 那么首先是TMOD的一个配置,定时器1我们先不管(高四位定时器全部给上0),只管低四位的一个定时器0的一个配置。 在前面的定时器工作有介绍过,STC89C52 的 T0 和 T1 一共有四种工作模式:在这里我们选择最常用的工作模式1。 Ⅰ:工作模式①的话,我们只需要把 M1 = 0,M0 = 1 就是定时器模式①的配置了。 Ⅱ:C/T(取反):这个我们只需要给C/T(取反) = 0即可,SYSclk⇢系统时钟。 Ⅲ:GATE(门控端),GATE = 0,这里当中都是数字电路当中的一些基础逻辑门,TR0 = 1。
謓泽
2022/12/12
7440
【51单片机】配置定时器
C51单片机实验——定时器实验
实验环境:普中实验系统;Keil μVision 4软件; 实验目的: (1)掌握单片机定时器的原理和控制方法。 (2)通过编程利用定时器实现定时功能,并利用该定时功能实现时钟分、秒的功能。 硬件连线: P2^1口连接led1 P2^3 口连接led3 P2^5 口连接led5 P2^7 口连接led7
全栈程序员站长
2022/09/17
6990
山东大学单片机原理与应用实验 3.8 ADC0808/9信号采集实验
利用LCD1602和AD0808实现简单的交流信号过零检测与频率分析。要求信号幅度变化时(满量程的5%—95%),不影响检测到结果。频率检测的结果通过LCD1602的第一行显示出来,信号过零时,能够通过P2.6输出一个脉冲宽度为5μs的脉冲信号。
timerring
2022/07/20
9790
山东大学单片机原理与应用实验 3.8 ADC0808/9信号采集实验
单片机实验说明<三>数码管和定时器基本使用
编程实现8段数码管的动态扫描显示,要求4个数码管从左到右分别显示“1”、“2”、“3”、“4”、及“A”、“b”、“C”、“d”。
zhangrelay
2021/03/03
5410
浅谈单片机中C语言与汇编语言的转换
一、单片机课设题目要求与软件环境介绍 做了一单片机设计,要用C语言与汇编语言同时实现,现将这次设计的感受和收获,还有遇到的问题写下,欢迎感兴趣的朋友交流想法,提出建议。 单片机设计:基于51单片机的99码表设计 软件环境:Proteus8.0 + Keil4 要求:1,开关按一下,数码管开始计时。2,按两下,数码管显示静止。3,按三下,数码管数值清零。 二、C语言程序 1 #include<reg51.h> 2 #define uint unsigned int 3 #define uchar uns
Zoctopus
2018/06/04
2.5K0
【51单片机】从零开始手把手带你【查手册】配置定时器,并完成小项目(定时器&中断的应用)(代码演示&单片机现象对照LCD闪烁)(9)
YY的秘密代码小屋
2024/02/17
1.2K0
【51单片机】从零开始手把手带你【查手册】配置定时器,并完成小项目(定时器&中断的应用)(代码演示&单片机现象对照LCD闪烁)(9)
定时器计算工具简介
定时器就是用来进行定时的,定时器内部有一个寄存器,我们让它开始计数后,这个寄存器的值每经过一个机器周期就会自动加 1,因此,我们可以把机器周期理解为定时器的计数周期。就像我们的钟表,每经过一秒,数字自动加 1,而这个定时器就是每过一个机器周期的时间,也就是 12/11059200 秒,数字自动加 1。还有一个特别注意的地方,就是钟表是加到 60 后,秒就自动变成 0 了,这种情况在单片机或计算机里我们称之为溢出。
电子工程师成长日记
2022/07/21
8130
定时器计算工具简介
设计分享|51单片机定时器Timer0控制流水灯
51单片是一种低功耗、高性能CMOS-8位微控制器,具有8K可编程Flash存储器,使得其为众多嵌入式控制应用系统提供高灵活、超有效的解决方案。
电子工程师成长日记
2024/09/01
2440
设计分享|51单片机定时器Timer0控制流水灯
4.10 51单片机-使用计数器测量NE555脉冲频率
STC90C51RC/RD+系列单片机内部设置的两个16位定时器/计数器T0和T1都具有计数方式和定时方式两种工作方式。对每个定时器/计数器(T0和T1),在特殊功能寄存器TMOD中都有一控制-C/T来选择T0或者T1为定时器还是计数器。定时器/计数器的核心部件是一个加法计数器,其本质是对脉冲进行计数。只是计数脉冲来源不同:如果计数脉冲来自系统时钟,则为定时方式,此时定时器/计数器每12个时钟或者每6个时钟得到一个计数脉冲,计数值加1;如果计数脉冲来自单片机外部引脚(T0为P3.3,T1为P3.3),则为计数方式,每来一个脉冲加1。
DS小龙哥
2022/01/10
1.8K0
4.10 51单片机-使用计数器测量NE555脉冲频率
水流量霍尔传感器工作原理_51单片机温度传感器
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
全栈程序员站长
2022/11/11
1.2K0
水流量霍尔传感器工作原理_51单片机温度传感器
相关推荐
【51单片机】十分钟学会定时器&中断¹
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档