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; //允许中断
这样就能进入中断程序了,中断程序如何写呢?下一节讲
- 六大全新产品系列推出,MCX A微控制器家族迎来创新
- 意法半导体全新STM32C5系列,重新定义入门级微控制器性能与价值,赋能万千智能设备
- 模组复用与整机重测在SRRC、CCC、CTA/NAL认证中的实践操作指南
- 有源晶振与无源晶振的六大区别详解
- 从控制到系统:TI利用边缘AI重塑嵌入式MCU的边界
- 英飞凌持续巩固全球微控制器市场领导地位
- 使用 Keil Studio for Visual Studio Code开发 STM32 设备
- 蓝牙信道探测技术原理与开发套件实践
- Microchip 推出生产就绪型全栈边缘 AI 解决方案,赋能MCU和MPU实现 智能实时决策
- LoRa、LoRaWAN、NB-IoT与4G DTU技术对比及工业无线方案选型分析




