单片机的中断系统(一)

发布者:艺泉阁最新更新时间:2021-10-25 来源: eefocus关键字:单片机  中断系统  cpu 手机看文章 扫描二维码
随时随地手机看文章

        想总结中断由来已久,但是总感觉一章的东西,太多,无从下手。


        前几天看到一句话“能把自己学会的东西说出来,才是真的学会”。今天,就要会一会这中断系统


        图片和文字内容来自:普中科技的ppt,百度文库,《操作系统》,《组成原理》我整理整理。


        先不谈中断,先看看cpu可以如何处理输入输出。比如,现在我的键盘在输入,试问cpu如何知道我输入完成,以将输入的内容送入内存进行处理?最简单的是,cpu原地等待,cpu进行不断的查询,查询键盘是否输入完成。但是这样,cpu就不能去做其他事情,严重影响cpu的速度。


       此时可以引入中断的方式。cpu工作自己的。键盘输入自己的。当键盘输入完成,发出中断请求。如果cpu决定响应该中断,保存当前工作进度,去提取输入的内容。中断处理结束后,恢复原来工作现场,继续工作。这样cpu的效率就大大提高。


中断的概念:


CPU在处理某一事件A时,发生了另一事件B请求CPU迅速去处理(中断发生);


CPU暂时中断当前的工作,转去处理事件B(中断响应和中断服务);


待CPU将事件B处理完毕后,再回到原来事件A被中断的地方继续处理事件A(中断返回),这一过程称为中断 。

图一

引起CPU中断的根源,称为中断源。中断源向CPU提出的中断请求。CPU暂时中断原来的事务A,转去处理事件B。对事件B处理完毕后,再回到原来被中断的地方(即断点),称为中断返回。实现上述中断功能的部件称为中断系统。


51单片机的中断系统结构


89C51/52的中断系统有5个中断源 ,2个优先级,可实现二级中断嵌套 。

图二

图三

注意:上面都是请求中断,但cpu是否响应中断?这由IE寄存器决定。


           只有IE的开关闭合(即cpu允许),当请求中断时,cpu才会响应。


中断请求标志(TCON):


1、TCON的中断标志

图四

(目前来说,只关心背景为深色的位)


IT0(TCON.0),外部中断0触发方式控制位。


        当IT0=0时,为电平触发方式。


        当IT0=1时,为边沿触发方式(下降沿有效)。


IE0(TCON.1),外部中断0中断请求标志位。


IT1(TCON.2),外部中断1触发方式控制位(类似IT0)。


IE1(TCON.3),外部中断1中断请求标志位。


TF0(TCON.5),定时/计数器T0溢出中断请求标志位。


TF1(TCON.7),定时/计数器T1溢出中断请求标志位。


中断请求标志(SCON):

中断允许控制(IE)


CPU对中断系统所有中断以及某个中断源的开放和屏蔽是由中断允许寄存器IE控制的。

图六

EX0(IE.0),外部中断0允许位;


ET0(IE.1),定时/计数器T0中断允许位;


EX1(IE.2),外部中断0允许位;


ET1(IE.3),定时/计数器T1中断允许位;


ES(IE.4),串行口中断允许位;


EA (IE.7), CPU中断允许(总允许)位。(所以执行中断时,总中断必须打开)


中断优先级(中断优先寄存器--IP):


同一优先级中的中断申请不止一个时,则有中断优先权排队问题。同一优先级的中断优先权排队,由中断系统硬件确定的自然优先级形成,其排列如所示:

图七

这里面稍微提下中断服务程序入口。当执行中断的时候,cpu要转去执行中断程序。但是如何知道程序的入口位置?


可以把中断的程序入口放在0003H的位置,cpu将这里面存储的程序入口放入pc(每次下一步执行的指令)中。(这只是我目前的想法,不知道正确与否)


中断号:


这在后面写程序会用到。

图八

 

如果是外部中断0的函数,在中断函数的后面加上 interrupt 0(0为外部中断0的中断号)。


中断优先级三条原则:


CPU同时接收到几个中断时,首先响应优先级别最高的中断请求。


正在进行的中断过程不能被新的同级或低优先级的中断请求所中断。


正在进行的低优先级中断服务,能被高优先级中断请求所中断。


为了实验上述判优,有硬件排队器;当然也可以用软件实现判优。

图九:具有屏蔽功能的排队器

 

上面这些优先级的设定是IP(中断优先寄存器),我没有用过,也不清楚怎么用,这里转载下其他文章关于它的介绍。


来源:http://www.sohu.com/a/191453790_99957951


P在特殊功能寄存器中,字节地址为B8H,位地址(由低位到高位)分别是B8H一BFH,IP用来设定各个中断源属于两级中断中的哪一级,IP的基本格式如下图所示:

图十

×:无效位。


PS:串行I/O中断优先级控制位。PS=1,高优先级;PS=0,低优先级。


PTl:定时器/计数器1中断优先级控制位。PTl=1,高优先级;PTl=0,低优先级。


Pxl:外部中断1中断优先级控制位。Pxl=1,高优先级;PXl=O,低优先级。


PT0:定时器/计数器o中断优先级控制位。PT0=1,高优先级;PTO=0,低优先级。


Px0:外部中断0中断优先级控制位。Px0=1,高优先级;Px0=0,低优先级。


 


中断的使用:


使用中断,要熟悉中断的结构,要根据要求设置寄存器。


1、首先明确使用哪个中断。


2、接着就要设置TCON(或者SCON),中断请求标志。


3、紧接着是设置IE,中断允许标志。


当上述设置满足时,单片机运行满足条件会触发中断请求,此时中断允许,进入中断,执行中断。


 


引用文章:


51单片机中断控制


单片机中断系统的控制寄存器IE和IP 


51普中单片机的ppt


唐朔飞的《计算机组成原理》

关键字:单片机  中断系统  cpu 引用地址:单片机的中断系统(一)

上一篇:单片机的外部中断(二)
下一篇:51单片机的定时中断(三)

推荐阅读最新更新时间:2024-11-13 11:07

PIC单片机在线串行编程(ICSP)的实现
  ICSP(In-Circuit Serial Programming)即在线串行编程,通过保持RB6和RB7引脚为低电平,VDD 为编程电压,并将MCLR(VPP)引脚电压从VIL增加到VIHH,器件便进入编程/校验模式。此时,RB6为编程时钟线,RB7为编程数据线。在该模式下,RB6和RB7都是施密特触发器输入,当RB7驱动数据时,它是CMOS输出驱动。   复位后,为使器件进入编程/校验模式,程序计数器(PC)指向00h地址。然后可向器件发送一个6位的命令,根据这一命令是装入还是读出,14位编程数据将被提供给器件或是从器件中读出。但是在线串行编程模式下,看门狗定时器电路不能产生器件复位。 硬件电路 在线串行编程电路应该注意
[单片机]
PIC<font color='red'>单片机</font>在线串行编程(ICSP)的实现
51单片机复位电路详解
复位电路的工作原理 在书本上有介绍,51单片机要复位只需要在第9引脚接个高电平持续2us就可以实现,那这个过程是如何实现的呢?在单片机系统中,系统上电启动的时候复位一次,当按键按下的时候系统再次复位,如果释放后再按下,系统还会复位。所以可以通过按键的断开和闭合在运行的系统中控制其复位。 开机的时候为什么为复位 在电路图中,电容的的大小是10uf,电阻的大小是10k。所以根据公式,可以算出电容充电到电源电压的0.7倍(单片机的电源是5V,所以充电到0.7倍即为3.5V),需要的时间是10K*10UF=0.1S。也就是说在电脑启动的0.1S内,电容两端的电压时在0~3.5V增加。这个时候10K电阻两端的电压为从5~1.5V减少(串
[单片机]
51单片机脉冲信号的计数和LCD显示
设计目标和思路 在个人剂量仪开发的过程中,从探头输出的核脉冲信号经过后期放大,成形,滤波以及甄别之后,成为一系列脉冲信号输出,这种脉冲信号由于衰变的随机性,并不是固定频率的脉冲信号。我们本次设计就是针对这种脉冲进形脉冲信号的计数以及在LCD1602显示屏上面的显示。 这是C语言的代码部分 #include reg51.h #include stdio.h #include math.h #include string.h #include intrins.h #define uint8_t unsigned char //0-255 #define uint16_t unsigned int //0-
[单片机]
51<font color='red'>单片机</font>脉冲信号的计数和LCD显示
如何使用STM8定时器
定时器主要功能是记录时间的,比如电饭煲加热20分钟后自动停止加热,就是通过定时器来完成的,其实定时器就像我们日常用的闹钟一样,今天以市场上广为使用的意法半导体的STM8单片机为例和大家分享一下,如何使用定时器? 方法/步骤 使用IAR FOR STM8打开一个工程。 初始化定时器。 并设置允许定时器中断,就是说定时器时间到了之后,会进入中断。 在定时器中断中进行一些标志位的设置,以及一些必要的功能操作。 这样程序会周而复始的循环进入中断,对该中断次数计数,就可以完成更长时间的计时功能。 6 定时器每次的中断,也可以作为系统的时钟,来切换一些任务的执行与否。 END
[单片机]
如何使用STM8定时器
单片机中断实验4
电路图: 程序代码如下: //交通灯控制程序 #include reg51.h unsigned char t0, t1; //定义全局变量,用来保存延时时间循环次数 //delay0_5s1 //功能:用T1的工作方式1编制0.5s延时程序,假定系统采用12Mhz晶振,定时器1,工作方式1定时50ms,再循环10次即可定时到0.5s void delay0_5s1 () { for (t0=0; t0 0x0a; t0++) { TH1 = 0x3c; TL1 = 0xb0; TR1 = 1; while (!TF1); TF1=0; } } //delay_t1 //功能:实现
[单片机]
<font color='red'>单片机</font>中断实验4
51单片机矩阵键盘扫描和显示按下的次数
KEYCARD BIT 00H ;用于标志是否有键按下 KEYCOU EQU 5AH ;用于记录按下键的次数 ORG 0000H ;程序开始 AJMP START ORG 30H ;为避免占用中断向量区,主程序从30H开始 START: MOV SP,#5FH ;设置堆栈的初始地址 MOV P3,#0FH ;P3,P2,P0的初始化 MOV P2,#00H MOV P0,#0FFH CLR KEYCARD ;有按键标志清0 MOV KEYCOU,#0 ;计数初值赋0 LOOP: ;循环扫描键盘 ACALL KEY
[单片机]
AVR单片机熔丝位的设置及拯救方法
AVR单片机需要设置合适的熔丝位才能实现其功能,如果熔丝位设置的不对将有可能导致单片机自锁,这是我整理的AVR单片机熔丝位的设置及拯救方,希望对大家有帮助。
[单片机]
AVR<font color='red'>单片机</font>熔丝位的设置及拯救方法
单片机的烧写原理
我要问的不是如何制作烧写接口。 而是,电脑在通过接口向单片机烧写时(此时单片机 内没有程序),电脑是如何通过接口访问内部rom的??对应p口怎么就会指向单片机内部rom(就像单片机是一个rom? 有三种方式: 1.把单片机当做一个ROM芯片,早期的单片机都是如此。将单片机放在通用编程上编程时,就像给28C256这样的ROM中写程序的过程一样。只是不同的单片机使用的端口,编程用的时序不一样。 2.像AT89S52或AVR单片机一样,在单片机上有SPI接口,这时用专用的下载线将程序烧写到单片机中。这时不同的是,单片机的CPU除了执行单片机本身的指令之外,还能执行对ROM进行操作的特殊指令,如ROM擦除、烧写和校验指令。在编程RO
[单片机]
小广播
设计资源 培训 开发板 精华推荐

最新单片机文章
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

换一换 更多 相关热搜器件

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved