单片机
返回首页

51单片机笔记6 -- 中断1 寄存器、定时器

2025-09-28 来源:bilibili

定时器与中断是整个单片机学习过程中比较重要的知识点,而且应用非常广泛,几乎可以说没有中断的程序都是新手练习用的。学习中断之前先了解一下寄存器这个概念,寄存器简单来说就是个宾馆,可以暂时存储一些数据,脉冲信号等等,在80C51中有一类寄存器叫做特殊功能寄存器,总共定义了21个,在80C52中又增加了5个,所以,80C52中总共有26个。今天讲一下里面几种常用的寄存器,第一个是TMOD寄存器,这个寄存器既可以做定时器也可以做计数器,总共有4中工作模式,前期用的比较多的是模式1,写成TMOD = 0X01;需要注意一下,这些寄存器的名称是不用定义的,也不可以更改。

选择模式的方法很简单,就是把M1,M0组合起来,图片已经给出,用到哪种模式可以直接查表即可。

   第二个常用寄存器是SCON寄存器,叫做串行口控制寄存器,有兴趣的同学可以自行搜索,我会在串口那一节详细说明。

  下面进入正题,中断,顾名思义,就是在程序执行过程中断掉了,断掉的程序去哪了呢,它开始执行中断里的内容,简单说就好比玩游戏,从主线任务中开启了副本,副本并不会影响主线任务的剧情发展。中断也是,它会占用主程序的极少的执行时间,(大概是几十个机器周期左右),而会执行大量的重复性的程序,比如刷新数码管,扫描按键等等。这些程序如果放在主程序里的话会占用掉大量的时间,使得程序的效率大大降低,所以,中断的其中一个意义就是提高代码的执行效率。如何设置中断呢,就要用到刚才介绍的寄存器,下面给一段代码:

EA = 1;    //开启中断总开关

TMOD = 0X01;   //选择TMOD寄存器的模式1

TH0 = 0X00;  //16位定时器的高8位

TL0 = 0X00;  //低8 位

TR0 = 1;      //打开定时器

ET0 = 1;    //允许中断

以上代码就是打开定时器中断的方法,补充一下,TMOD是16位寄存器,所以他的极限值是2的16次方65536,这个寄存器从0开始跑直到溢出大概是71毫秒(晶振为11.0592M)。下面就教大家怎么计算初始值.

定时时间 = (2的N次方 - X)*12/晶振频率  

举个栗子:假如现在我们用11.0592M的晶振来设置TMOD寄存器的时间为20毫秒,求初值。

0.02 = (2的16次方 - x)*12/11059200 

X = 47104      然后转化成16进制 X = B800,

一个16进制代表4位2进制,所以,高8位 为 B8 ;低8位为 00;  

程序为 

EA = 1;    //开启中断总开关

TMOD = 0X01;   //选择TMOD寄存器的模式1

TH0 = 0XB8;  //16位定时器的高8位

TL0 = 0X00;  //低8 位

TR0 = 1;      //打开定时器

ET0 = 1;    //允许中断

这样就能进入中断程序了,中断程序如何写呢?下一节讲


进入单片机查看更多内容>>
相关视频
  • 【TI MSPM0 应用实战】智能小车+工业角度编码器+血氧仪+烟雾探测器!硬核参考设计详解!

  • 2022 Digi-Key KOL 系列: 你见过1GHz主频的单片机吗?Teensy 4.1开发板介绍

  • TI 新一代 C2000™ 微控制器:全方位助力伺服及马达驱动应用

  • MSP430电容触摸技术 - 防水Demo演示

  • 直播回放: Microchip Timberwolf™ 音频处理器在线研讨会

  • 基于灵动MM32W0系列MCU的指夹血氧仪控制及OTA升级应用方案分享

精选电路图
  • 1瓦线性调频增强器

  • 1瓦四级调频发射机

  • 500W MOS场效应管电源逆变器,12V转110V/220V

  • 红外开关

  • LM317过压保护

  • 0-30V/20A 大功率稳压电源(采用LM338)

    相关电子头条文章