历史上的今天
返回首页

历史上的今天

今天是:2025年07月16日(星期三)

正在发生

2018年07月16日 | 基于80C51单片机——中断小结

2018-07-16 来源:eefocus

最近看了一下80C51单片机的中断部分的实验,做一些笔记,方便以后学习查找。 

首先说一下什么是中断吧,中断是指CPU在执行当前程序的过程中,由于某种随机出现的外设(外部设备)请求或CPU内部的异常事件,使CPU暂停正在执行的程序而转去执行相应的服务处理程序;当服务处理程序运行完毕之后,CPU再返回到暂停处继续执行原来的程序。


那什么是中断嵌套呢?简单点说就是低优先级的中断可以被高优先级的中断源所中断,等高优先级中断服务程序结束后,再返回去执行被中断的的低优先级的中断服务程序。


举个简单的栗子吧(之前写过但不知道怎么删了,,又让我重新编辑):比如我们就是一个CPU,我们当前在洗衣服(当前程序),突然电话铃声响了(中断来了),它的优先级肯定高于洗衣服嘞,此时我们会停止洗衣服而转去接电话,等到电话打完,我们继续回去洗衣服(也就是所谓的“”等高优先级中断服务程序结束后,再返回去执行被中断的的低优先级的中断服务程序“”)。 

好了,接下来我们来说说怎么去设置一个中断:


TCON(定时器/计数器控制寄存器)高4位是设置定时计数器,低4位是用来设置外部中断 

这里写图片描述 

* IT0和IT1是设置外部中断的触发方式 

当其为0时,为低电平触发方式。 

当其为1时,为负跳变触发方式。 

* IE0和IE1是外部中断标志位。 

* 其他事定时/计数器的控制。 

* TF0和TF1是定时器的中断标志。 

* TR0和TR1是打开相应的定时器。 

中断允许寄存器IE 

这里写图片描述 

* EA总中断允许。 

0时:CPU屏蔽所有的中断请求。 

1时:CPU开放所有的中断。 

* ES串行口中断允许位。 

0时:禁止串行中断。 

1时:允许串行中断。 

* ET1和ET0:分别是定时计数器1和定时计数器0中断允许位。 

0时:禁止相应的定时计数器中断。 

1时:允许相应的定时计数器中断。


 *  EX1和EX0:分别是外部中断1和外部中断0的中断允许位

    0时:禁止相应的外部中断。

    1时:允许相应的外部中断。


中断优先级寄存器IP 

这里写图片描述 

* PS:串行口中断优先级 

0时:串行口中断优先级定义为高优先级 

1时:串行口中断优先级定义为低优先级


 *  PT1和PT0:分别是定时计数器1和定时计数器0的中断优先级

    0时:相应的定时计数器中断为高优先级

    1时:相应的定时计数器中断为低优先级


 *  PX1和PX0:分别是外部中断1和外部中断0的中断优先级

    0时:相应的外部中断为高优先级

    1时:相应的外部中断为低优先级


**一般默认低优先级,不是特别需求不用改********** 

中断地址 

这里写图片描述 

中断函数的写法


void  函数名()interrupt 中断编号

{

    ;

}


接下来我们来说一下定时器:

这里写图片描述

定时/计数器实质上是一个加1计数器。它随着计数器的而输入脉冲进行自加1,也就是每来一个脉冲,计数器 就自动加1,当加到计数器为全1 的时候,再输入一个脉冲使计数器归零,且计数器的溢出使相应的中断标志位置为1,向CPU发出中断请求(定时/计数器中断允许时)。如果定时/计数器工作于定时模式,则表示定时时间已到,如果工作于计数模式,则表示计数值已满。 
**可见,由溢出时计时器的值减去计数初值才是加1计数器的计值。*

TMOD(工作方式寄存器) 
这里写图片描述 
* GATE:门控制 
0时:仅有运行控制位TRx来控制定时/计数器的开启。 
1时:由TRx和外部中断脉冲计数(用于计算外部中断负跳变的次数) 
* C/T:计数器模式和定时器模式选择 
0时:选择定时器模式。 
1时:选择计数器模式。

M1和M0:选择定时/计数器的工作方式 
这里写图片描述

计数器初值的计算:

  • 机器周期:CPU完成一个基本操作所需要的时间

  • 机器周期=1/单片机的时钟频率。

  • 51单片机内部时钟频率是外部时钟的12分频。也就是说当外部晶振的频率输入到单片机里面的时候要进行12分频。比如你用的是12MHZ的晶振,那么单片机内部的时钟频率就是 12/12MHZ,当你使用12MHZ的外部晶振的时候,机器周期=1/1M=1us.

  • 而我们定时1ms的初值是多少呢,1ms/1us=1000. 
    也就是要计数1000个数,初值=6553-1000+1(因为实际上计数器计数到66636才溢出)=64536=FC18H 
    定时/计数器的工作方式: 
    这里写图片描述这里写图片描述工作方式2特别适合于用作比较精确的脉冲信号发生器工作方式3将T0分成为两个独立的8位计数器TL0和TH0
    定时器操作步骤:

选择工作方式(设置M1,M0)

选择控制方式(设置GATE)

选择定时器还是计数器模式(设置C/T)

给定时/计数器赋初值(设置THx和TLx)

开启定时器中断(设置ET0或ET1)

开启总中断(设置EA)

打开计数器(设置TR1或TR0)

    void TimeConfiguration()

    {

        TMOD = 0x01;         //定时器0选择工作方式1

        TH0 = 0x3C;          //设置初始值

        TL0 = 0xB0;          

        EA = 1;              //打开总中断

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

        TR0 = 1;             //启动定时器

    }


中断操作步骤: 

* 打开总中断(设置EA) 

* 设置外部中断的触发方式(设置IT0或IT1) 

* 设置外部中断的中断允许位(设置EX0或EX1) 

* 设置外部中断的优先级(一般默认低优先级,不是特别需求不用改,设置PX0或PX1)


void InConfiguration()

{

        EA=1;             //打开总中断

        IT1=1;        //设置外部中断触发方式为负跳变触发方式

        EX1=1;        //允许外部中断1发生中断

        PX1=0;        //相应的外部中断为高优先级

}


好了,这部分内容就先小结到这


推荐阅读

史海拾趣

EOREX公司的发展小趣事

随着环保意识的日益提高,EOREX公司积极响应国家的绿色发展战略,将环保理念融入到产品研发和生产过程中。他们采用环保材料和绿色生产工艺,减少产品对环境的影响。同时,EOREX还加大了对环保技术的研发投入,推出了一系列具有环保功能的电子产品。这些举措不仅提升了公司的品牌形象和社会责任感,还为公司的可持续发展奠定了坚实的基础。

请注意,以上故事均为虚构内容,旨在展示一个电子公司可能的发展路径和策略。在实际应用中,每个公司的发展故事都有其独特性和复杂性。

Cicoil公司的发展小趣事

随着公司业务的不断拓展,Cicoil开始与大型计算机制造商IBM展开合作。他们为IBM的大型计算机提供定制的扁平电缆解决方案,以其出色的性能和可靠性赢得了IBM的信任。这一合作不仅提升了Cicoil在业界的地位,也为其带来了稳定的业务增长和更广阔的发展空间。

Armel Electronics Inc公司的发展小趣事

在电子行业中,产品质量是企业生存和发展的关键。Armel Electronics Inc公司深知此道,始终坚持品质至上的原则。公司从原材料采购到生产流程,再到产品出厂,每一个环节都严格把控,确保产品质量的稳定性和可靠性。这种对品质的执着追求,使得Armel的产品在市场上赢得了良好的口碑,并逐渐树立了公司的品牌形象。

ADPOW公司的发展小趣事

随着国内市场的饱和,ADPOW公司开始将目光投向国际市场。公司制定了国际化发展战略,通过设立海外分支机构、参加国际展会等方式拓展海外市场。同时,公司积极与国际知名企业合作,共同开发新技术、新产品,实现互利共赢。这些举措为公司的长远发展打开了新的局面。

这些故事是基于电子行业的一般发展规律和可能的企业发展路径构建的,并不代表ADPOW公司的真实历史。如需了解该公司的真实发展情况,建议查阅相关资料或访问其官方网站。

Festo公司的发展小趣事

20世纪50年代,随着自动控制技术的发展和现代工业水平的不断提高,气动元件和气动系统得到了广泛的应用。被誉为“德国气动之父”的Kurt Stoll敏锐地发现了这一趋势,并领导Festo公司开始在这一领域进行深入的研发。通过不断的努力和创新,Festo成功开发出了一系列高性能的气动产品,并在市场上取得了巨大的成功。逐渐地,Festo成为了全球气动自动化领域的领导者。

弘凯光电(BRIGHTEK)公司的发展小趣事

弘凯光电一直致力于技术创新和产品升级。公司拥有一支高效、创新的技术团队,通过对产品技术的深入研究和持续创新,不断推出具有竞争力的新产品。例如,公司的iCLed系列产品,凭借其独特的设计和卓越的性能,在智能座舱设计领域获得了广泛应用。这种对技术创新的不断追求,使得弘凯光电在电子行业中始终保持领先地位。

问答坊 | AI 解惑

华为逻辑电平设计规范教材

华为逻辑电平设计规范教材…

查看全部问答>

怎么学好单片机

我是一个刚上大二的学生,看着单片机的一些东西觉得很感兴趣想学,但是又不知从何学起?希望高手指点一下帮我规划一下?小弟不胜感激。。。…

查看全部问答>

8051f单片机silicon ide编译请教

  我编译时提示 LInker not found C:\\Silabs...\\BIN\\bi51.exe是怎么回事,是我的软件没有装好吗? 可是我卸载了又装了还是这样 怎么回事刚开始用不懂 谢谢了…

查看全部问答>

STM32F10xx时钟系统框图:时钟是整个系统的脉搏

下图是STM32F10xx时钟系统的框图,通过这个图可以一目了然地看到各个部件时钟产生的路径,还可以很方便地计算出各部分的时钟频率。STM32的四个时钟源(HSI、HSE、LSI和LSE)也在图中标出;图中间的时钟监视系统(CSS)是在很多ST7的单片机中就出现 ...…

查看全部问答>

STM32串口控制寄存器疑问

准备采用中断法发送数据,看到datasheet描述USART_CR1位7(TXEIE)和位8(TCIE),不是太明白。采用那一种比较好?…

查看全部问答>

求助:利用MSP430制作函数发生器

我是一个菜鸟,目前有任务利用MSP430F1611制作一个函数发生器,信号最后经DAC12输出,函数波形方波,正弦波,三角波等,频率要求不高200Hz以下,请问各位高手应如何入手,有什么思路,小弟在此谢谢了。…

查看全部问答>

电子时钟控制程序

最近写了一个有关电子时钟控制的程序(我是初学者),程序调试时发现:当调节参数时,数码管显示不稳定。程序我修改了无数遍,就是不知道原因出在哪里!希望可以在各位大虾的帮助找出原因!!!!!   程序如下:   /*------ ...…

查看全部问答>

MXCHIP open

    玩这块板子,涵盖的知识太过广泛,刚开始熟悉大概流程,试过几个例子之后。觉得就那样,都是别人写好的代码,自己移植过去,自己想要一个深刻的理解,所以看了一些另外的一些协议之类的东西,也没着急弄这个东西,看了这么长时间后, ...…

查看全部问答>

直流/直流转换器数据表——系统效率揭秘

市面上售有各种类型的稳压器,但很难选择一款直流/直流稳压器。大多数汽车应用都要求在整个负载范围内保持高效率,因为它们一直在耗电。但话又说回来,许多工业应用在高负载时需要高效率,而在轻负载时,效率并不是很重要。因此必须了解直流/直流稳 ...…

查看全部问答>