历史上的今天
返回首页

历史上的今天

今天是:2026年01月11日(星期日)

2023年01月11日 | 51单片机定时器中断基础

2023-01-11 来源:zhihu

一、中断概念

中断是为使单片机具有对外部或者内部随机发生的事件实时处理而设置的。

把自己想象成单片机的CPU,你正在洗衣服,但是突然快递小哥给你打电话让你去拿快递,于是你停下洗衣服去拿快递了。快递小哥的电话就是中断信号,告诉你有其他的事情需要先去做,然后你去拿快递就相当于中断之后要去处理的事情。

51单片机有五个中断源

  1. INT0——外部中断0

  2. INT1——外部中断1

  3. T0——定时器/计数器0中断

  4. T1——定时器/计数器1中断

  5. TI/RI——串行口中断

二、使用中断的过程(下面以定时器0、工作方式1为例)

  1. 定时器0选择工作方式1

D7D6D5D4D3D2D1D0
GATEC/TM1M0GATEC/TM1M0

这是定时器/计数器工作方式寄存器TMOD,不能位寻址(只能一次操作一个字节,八位,不能单独操控某一位)。

TMOD高四位用于设置定时器/计数器1,低四位用于设置定时器/计数器0;

GATE是们控制位,当GATE=0,定时器/计数器启动与停止仅收TCON寄存器中的TRX(X=0,1)控制;我们对TMOD操作时,直接让GATE这一位为0。

CT位为1时选择计数器模式,为0时选择定时器模式。

M1,M0用于选择工作方式,M0=1,M1=0时,选择的是方式一。

综上,在编程的时候这样写(八位数的二进制换成两位数的16进制,0000 0001 ——0x01)

TMOD=0x10;

2. 给定时器0装初值

上面选择的工作方式1是16位定时器。对于T0来说,TL0寄存器作为低八位,TH0作为高八位,组成16位加一计数器。

当开始计数的时候,低八位计数计满,低八位全部归零,向高八位进一位。当高八位计数计满时,全16位归零,进入中断函数,执行相关操作。

之所以要给定时器装初值,是为了计整数,方便计算使用。

每50ms进入一次中断函数的初值为:

TH0=(65536-45872)/256; TL0=(65536-45872)%256;

3.打开总中断,开启定时器0中断,启动定时器0

首先涉及到中断允许寄存器IE(可以进行位寻址,对某一位操作),全局中断允许位EA,定时器T0中断允许位ET0便在其中。

打开总中断,即EA=1;

开起定时器0中断,即ET0=1;

启动定时器涉及到定时器/计数器控制寄存器TCON(可进行位寻址),定时器0运行控制位TR0便在其中。

启动定时器0,即TR0=1;(在上述GATE=0的前提下)

4.中断服务程序写法

void 函数名() interrupt 中断号

{

中断服务程序内容,中断号百度可查
}

函数名不能与关键字重复,

定时器0,工作方式1为例

void T0_time() interrupt 1

{

TH0=(65536-45872)/256;

TL0=(65536-45872)%256; //重装初值,保证每次进入中断函数都是50ms

//此处可添加需要的程序

}

#include

sbit led=P1^0;

unsigned char num;

void main()

{

TMOD=0x01; //设置定时器0为工作方式1

TH0=(65536-45872)/256;

TL0=(65536-45872)%256; //装初值

EA=1;//开总中断

ET0=1;//开启定时器0中断

TR0=1;//启动定时器0

while(1);//程序在这里等待中断发生

}


void T0_time() interrupt 1

{

TH0=(65536-45872)/256;

TL0=(65536-45872)%256; //进入中断程序说明计数计满,TL0,TH0归零,需要装初值

num++;

if(num==20)  //每计够20次可以进入一次if语句,改变一次LED灯的状态

  {          //进入一次需要50ms,进入20次就经历了1s

   num=0;

   led=~led;

   }

}


推荐阅读

史海拾趣

Amperite Co公司的发展小趣事

Amperite Co. 是一家在电子行业中知名的公司,专注于生产和销售电子元件。以下是关于Amperite Co. 发展的五个相关故事:

  1. 成立与早期发展:Amperite Co. 成立于20世纪40年代初,总部位于美国纽约州。公司最初专注于生产和销售电子继电器和时间延迟器等元件,以满足当时快速发展的电子设备市场的需求。通过不断的技术创新和产品优化,Amperite Co. 在行业内建立了良好的声誉。

  2. 技术创新与产品多样化:随着电子行业的发展和技术的进步,Amperite Co. 不断进行技术创新,扩展产品线。除了传统的继电器和时间延迟器,公司还推出了一系列新型电子元件,包括光耦合器、固态继电器、传感器等。这些新产品的推出使得Amperite Co. 能够满足不同客户的需求,并保持竞争力。

  3. 质量控制与生产优化:Amperite Co. 始终把质量放在首位,实施严格的质量控制措施。公司采用先进的生产设备和工艺,确保产品质量稳定可靠。此外,Amperite Co. 不断优化生产流程,提高生产效率,降低生产成本,以提供更具竞争力的产品价格。

  4. 客户服务与合作伙伴关系:Amperite Co. 重视客户服务,并与客户建立了长期稳定的合作关系。公司为客户提供及时的技术支持和售后服务,满足客户的需求。此外,Amperite Co. 还与全球各种电子设备制造商建立了合作伙伴关系,共同推动技术创新和产品发展。

  5. 持续发展与市场拓展:Amperite Co. 不断追求发展和壮大,通过开拓新市场和拓展业务范围实现了持续增长。公司将目光投向国际市场,扩大产品销售网络,拓展海外客户群。同时,Amperite Co. 还积极参与行业展会和技术交流活动,加强品牌宣传,提升市场知名度。

这些故事展示了Amperite Co. 从成立初期到如今在技术创新、产品多样化、质量控制、客户服务与合作伙伴关系以及持续发展与市场拓展等方面取得的重要进展。

西博臣(CYBERSEN)公司的发展小趣事

作为一家有社会责任感的企业,西博臣积极履行社会责任,关注环境保护和可持续发展。公司采用环保材料和生产工艺,减少生产过程中的能源消耗和废弃物排放。同时,公司还积极参与社会公益活动,为社会做出积极贡献。这些举措不仅体现了公司的社会责任感,也为其赢得了更多客户和合作伙伴的信任和支持。

Elec & Eltek公司的发展小趣事

在国内市场取得一定成绩后,Elec公司开始将目光投向国际市场。为了更好地适应国际市场的需求,Elec公司积极引进国际先进技术和管理经验,并加强与国际知名企业的合作。同时,Elec公司还加大了在海外市场的营销力度,通过参加国际展会、举办技术研讨会等方式提高品牌知名度。经过多年的努力,Elec公司的产品已远销欧美、东南亚等多个国家和地区,成为国际市场上具有竞争力的电子品牌。

Cornell Dubilier公司的发展小趣事

Cornell Dubilier公司的历史可以追溯到1909年,当时公司创始人William Dubilier凭借其开创性的云母电容器技术,为无线电广播通信带来了革命性的改变。这项技术的突破,使得Cornell Dubilier公司在早期电子行业中崭露头角。随后的几十年里,公司逐渐扩大生产规模,增加产品线,并开始涉足其他电子元件和组件的制造。

Freeport Resources Enterprises Corp公司的发展小趣事

随着全球对环保和可持续发展的重视,Freeport Resources将这一理念融入到公司的发展战略中。公司投入大量资金进行环保设施建设和生产技术改造,致力于减少开采和加工过程中的环境污染和资源浪费。同时,Freeport Resources还积极参与社会公益活动,推动矿业与社区的和谐共生。这些举措不仅提升了公司的社会形象,也为其在电子材料市场的长期发展奠定了坚实的基础。

Base Two (2) Systems公司的发展小趣事

Base Two (2) Systems公司自创立之初,便以技术创新为核心竞争力。在创始团队的带领下,公司研发团队不断攻克技术难关,成功研发出一系列具有领先水平的电子产品。这些产品不仅性能卓越,而且具有广泛的应用前景,为公司在市场上赢得了良好的口碑。

问答坊 | AI 解惑

张鸣鸣:我的经历告诉我Web2.0将以个性引领产 品

来源: 天极网  张鸣鸣,现为艺酷网创始人,曾有数次创业经历。她可以在重重压力之下依然按照自己的个性来选择生活方式。从北影到麻省理工大学、从演艺圈到IT圈、从留学生到创业者,她数次变换着自己的角色和人生定位,而每次都向外界兑现了当初对 ...…

查看全部问答>

LPC1114F样片申请

你好!!我最近在搞ARM7单片机(LPC1114),我买的是一块板!!由于我最近用这款芯片在搞一个项目,灯光照明控制的,要做个最小系统!!今天,在网上看见贵公司提供LPC1114F样片!!在这里提交了这份申请表!!望贵公司批准!!谢谢!!  …

查看全部问答>

驱动中使用__try快的链接错误问题

我在驱动开发中使用了__try __finally块后链接的时候会出现链接错误如下: unresolved external symbol __except_handler4 是不是少了哪个链接库,我链接的库有wdm.lib BufferOverflowK.lib wmilib.lib usbd.lib 求各位大侠指点!…

查看全部问答>

Windows Mobile 鼠标问题

多普达和三星的机器很多用了轨迹球和一些感应器件,但是不知道怎么在Windows Mobile里面加上鼠标,调了一下lcd driver,但是还是没有达到理想的效果,能偶尔闪出鼠标指针,哪位做过Mobile鼠标的能来指点下?…

查看全部问答>

IROM启动方式出问题

以前一直没用过IROM启动方式,现在在2450平台上弄IROM方式启动,编译的内核启动不了,麻烦大侠们帮忙看看哪里出问题了。 Read OS image to BootMedia Success waitforconnect INFO: OEMLaunch: Jumping to Physical Address 0x3020D2DCh (Virtual ...…

查看全部问答>

wince网络实时传输数据

最近遇到一个问题: 环境如下     wince下串口每秒发送15K数据,我的串口读写缓冲区设置4K,全局数据设置为20K 现在有两个解决办法     请大家分析一下那个更好   1.wince socket同步发送 ...…

查看全部问答>

进程查询的终止条件

如何通过当前的进程结束引起该进程的父进程?…

查看全部问答>

有关存储设备

可能还是一个白痴问题,请高手们说说嵌入式开发使用的存储设备类型有哪些?WinCE支持的最大硬盘容量是多大?各个版本的WinCE支持的最大内存是多少?…

查看全部问答>

教你如何正确选择LED护栏管厂家

LED护栏管(数码管)现今已是非常普遍、流行的夜景照明亮化产品,因此,各个行业及酒店KTV、事业单位纷纷安装,用于展示自我形象、产品及服务。   一、考虑价格   商家常用招数之一。当然是越便宜客户越高兴;不过,羊毛出在羊身上,太便宜肯 ...…

查看全部问答>

串口到以太网透明传输模块

基于LM3S6911做的透明传输模块,可以通知串口以太网已经连接,控制以太网流量。…

查看全部问答>