51单片机在片设备与中断(3)

发布者:Bby1978最新更新时间:2015-10-12 来源: eefocus关键字:51单片机  在片设备  中断 手机看文章 扫描二维码
随时随地手机看文章
中断控制要点

1、当CPU正在处理某项事务的时候,如果外界或内部发生了更紧急的事件,要求CPU暂停正在处理的工作转而去处理这个紧急事件,待处理完以后再回到原来被中断的地方,继续执行原来被中断了的程序,这样的过程称为中断。

  (1)能够实现中断处理功能的部件称为中断系统。

  (2)向CPU提出中断请求的源称为中断源,51系列单片机共有5个中断源。

  (3)中断源向CPU提出的处理请求,称为中断请求或中断申请。

  (4)CPU同意处理中断请求称为中断响应,处理中断请求的程序称为中断服务子程序。

  (5)当CPU暂时终止正在执行的程序,转去执行中断服务子程序时,除了硬件自动把断点地址(16位程序计数器PC的值)压入堆栈之外,用户应注意保护有关的工作寄存器、累加器、标志位等信息,这称为保护现场;在完成中断服务子程序后,恢复有关的工作寄存器、累加器、标志位的内容,称为恢复现场;最后执行中断返回指令RETI,从堆栈中自动弹出断点地址到PC,继续执行被中断的程序,称为中断返回。

2、基本51单片机的中断系统有5个中断源,可任意分为2个中断优先级(高优先级和低优先级),可实现2级中断服务程序嵌套。

  (1)中断优先级寄存器IP的字节地址为B8H,可以位寻址。IP相应的位为0则其对应中断的优先级为低,否则优先级为高。51单片机复位以后IP为0,各个中断源均为低优先级中断。可用位操作指令或字节操作指令更改IP的内容,以改变各中断源的中断优先级。 

  (2)中断允许寄存器IE的字节地址为A8H,可以位寻址。51单片机的CPU对中断源的开放或屏蔽,是由片内的中断允许寄存器IE控制的,51单片机复位以后,IE被清0,由用户程序置“1”或清“0”IE相应的位,实现允许或禁止相应中断源的中断申请。若允许某一个中断源中断,除了开放中断总的允许位EA外,必须同时使CPU开放该中断源的中断允许位。

  (3)51单片机有两个中断优先级,对于每一个中断请求源可编程为高优先级中断或低优先级中断。一个正在执行的低优先级中断程序能被高优先级的中断源所中断,但不能被另一个低优先级的中断源所中断。若CPU正在执行高优先级的中断,则不能被任何中断源所中断,一直执行到中断服务结束,遇到返回指令RETI。每次从中断服务程序返回主程序后都必须再执行一条指令后才能响应新的中断请求。中断嵌套的两条基本规则是:①低优先级可被高优先级中断,而高优先级中断源不能被任何中断源所中断;②任何一种中断(不管是高级还是低级),一旦得到响应,不会再被它的同级中断所中断。

  (4)当几个同优先级的中断同时申请中断时,响应哪一个中断源将取决于由辅助优先级决定的一个内部查询顺序,具体就是中断服务程序的入口地址越靠前(地址值越小)则辅助优先级越高。

3、如果总的中断允许开放(即EA=1)则CPU在每个机器周期的S5P2时刻采样中断标志,并在下一个机器周期对采样到的中断进行查询。如果前一个机器周期的S5P2有中断标志,则在查询周期内便会查询到,并按优先级高低进行中断处理,如果响应中断,中断系统将控制程序转入相应的中断服务子程序。CPU中断响应是有条件的,并不是查询到的所有中断请求都能被立即响应,当遇到下列三种情况之一时,中断响应被封锁:

  (1)CPU正在处理相同的或更高优先级的中断;

  (2)现行的机器周期不是所执行指令的最后一个机器周期;

  (3)正在执行的指令是RETI或是访问IE或IP的指令(CPU在执行RETI或访问IE、IP的指令后,至少需要再执行一条指令才会响应新的中断请求)。

4、TF0和TF1分别为定时/计数器0和定时/计数器1的中断请求标志位,在已经开放T0/T1中断允许且已被启动的前提下,T0/T1加1计满溢出时 TF0/TF1标志位自动置“1”;CPU 检测到TCON中TF0/TF1变“1”后,将自动保存当前PC值到堆栈,并将相应中断服务程序入口地址000BH/001BH赋值给PC,从而在下一条指令开始执行中断服务;TF0/TF1标志位由硬件自动清“0”,以便进行下次中断申请。

5、IE0和IE1分别为外部中断0和外部中断1中断申请标志位。以外部中断0为例,当IT0为0即选择电平触发方式时,每个机器周期的S5P2采样-INT0,若-INT0为低电平,则IE0置“ 1”,否则IE0清“0”;当IT0为1即选择边沿触发方式时,当前一个机器周期采样到-INT0输入为高,而本机器周期采样到该引脚为低电平时,则置“1”IE0;IE0/IE1为1表示外部中断0/1正在向CPU申请中断。当CPU响应中断,转向中断服务子程序(入口地址0003H/0013H)时,由硬件自动清“0”IE0/IE1。

6、TI和RI分别是串行口的发送中断和接收中断的中断请求标志。 

  (1)在串行口以方式0发送时,每当发送完8位数据,由硬件置“1”TI;若以方式1、方式2或方式3发送时,在发送停止位的开始时置“1”TI。TI为1表示串行口发送器正在向CPU申请中断,而CPU响应串口发送器中断请求,转向执行中断服务程序时并不清“0”TI,TI必须由用户的中断服务子程序清0(即中断服务子程序中必须用CLR TI或ANL SCON,#0FDH等清“0”TI的指令)。

  (2)若串行口接收器允许接收,并以方式0工作,每当接收到第8位数据时置“1”RI;若以方式1、2、3工作,且(SM2)=0时,每当接收器接收到停止位的中间时置“1”RI,当串行口以方式2或方式3进行工作,且(SM2)=1时仅当接收到的第9位数据RB8为1后,同时还要在接收到停止位的中间位置“1”RI。RI为1表示串行口接收器正在向CPU申请中断,而CPU响应串口接收器中断请求,转向执行中断服务程序时并不清“0”RI,RI必须由用户的中断服务子程序清0(即中断服务子程序中必须用CLR RI或ANL SCON,#0FEH等清“0”RI的指令)。

  (3)实际上串口发送器中断请求和串口接收器中断请求对应着同一个中断服务程序入口地址0023H。在用户的串口中断服务子程序的开始应首先判断TI和RI标志以决定本次中断是由发送结束引起还是由接收完成引起以便进一步转入相应的处理(也可能恰好即是发送结束又是接收完成)。

关键字:51单片机  在片设备  中断 引用地址:51单片机在片设备与中断(3)

上一篇:51单片机在片设备与中断(4)
下一篇:51单片机在片设备与中断(2)

推荐阅读最新更新时间:2024-03-16 14:35

Proteus使用笔记之51单片机4x4矩阵按键
采用反转法判断按键坐标,即行号与列号获得按键码。 写完后发现Proteus一个问题:直接使用这样的if(P1&0xf0!=0xf0)语句时,调不出来,当用了一个中间变量过渡时,就调出来了,害我花了一个上午的时间,现在暂时不知道Proteus为什么要这样,实际中是不需要的。 程序如下: #include reg52.h #define uchar unsigned char #define uint unsigned int void delayMS(unsigned int z); uchar keyscan(void); void main(void) { uchar key; while(1) {
[单片机]
基于51单片机的贪吃蛇游戏
前言: 这篇文章是我当时制作完成后写的总结,已经过去了一段时间,苦于找不到实物的图片,就把全文都粘贴到了下面。 今天是11月2日,昨天我完成了我的贪吃蛇的制作。那个战线一个多月,让我煞费苦心的工作。在这一过程中,学到了许多新知识,也认识了许多新朋友,无论星火杯结果如何,它都将成为我的大学生涯,甚至一生中宝贵的财富。所以我决定将我学到的,想到的都写下来,给将来的自己一份美好的回忆。这次总结的内容主要是进入西电来学到的一些硬件知识,主要包括51单片机基础知识(最小系统、LED流水灯、蜂鸣器、独立按键、数码管显示),Protues仿真(以贪吃蛇为例),Keil的使用(贪吃蛇程序的分析),最后是贪吃蛇制作的基本步骤。 一、51单片
[单片机]
基于<font color='red'>51单片机</font>的贪吃蛇游戏
51单片机基础之外部中断(二)
代码: #include reg51.h typedef unsigned char u8; typedef unsigned int u16; sbit LED=P2^0; sbit KEY=P3^3; void delay(u16 i) { while(i--); } void EXIT1_Init(void) //外部中断初始化 { IT1=1;//跳变沿触发方式(下降沿),低电平触发 EX1=1;//打开INT0的中断允许,打开外部中断0允许 EA=1;//打开总中断 } void main(void) { EXIT1_Init();//打开外部中断 while(1)
[单片机]
51单片机实现串口通信
#include void ckInt()//串口初始化 { TMOD=0x20;//定时计数器1,方式2 TH1=0xF3; //计算出来的初值 TL1=0xF3; //计算出来的初值 PCON=0X80;//波特率加倍 TR1=1;//启动定时计数器1 SCON=0x50;//串口工作方式1 ES=1;//打开串口中断 EA=1;//打开总中断 } void main()//主函数 { ckInt();//调用函数 while(1); } void ckzd()interrupt 4//中断函数,串口中断编号4 { unsigned int DATA; DATA=SBUF;//发送数据 RI=0;//
[单片机]
STM32学习笔记(2) 使用外部中断控制按键
中断概述 中断:打断CPU正常程序运行,转去执行中断服务函数的内容,然后再回来执行原来的程序 NVIC:嵌套向量中断控制器,属于内核外设,管理怎与中断相关的功能 typedef struct { uint8_t NVIC_IRQChannel; //中断源 uint8_t NVIC_IRQChannelPreemptionPriority; //抢占优先级 uint8_t NVIC_IRQChannelSubPriority; //子优先级 FunctionalState NVIC_IRQChannelCmd; //使能或失能 } NVIC_InitTypeDef;
[单片机]
STM32学习笔记(2) 使用外部<font color='red'>中断</font>控制按键
51-基于51单片机射频RFID卡考勤上课上班统计设计
具体实现功能 系统由STC89C52单片机电路+RFID模块电路+1602液晶显示电路+电源电路组成。 具体功能: (1)系统有3张卡,分别代表依次是张三、李四、王二; (2)任何一个人刷卡成功能,1602液晶响应显示,未刷卡显示“N”,刷卡成功后显示“Y”; (3)液晶第二行显示刷卡人数,即出勤总人数。 设计背景 随着信息化建设的不断发展,磁卡得到普遍的推广,大部分采用RFID射频技术,通过射频信号自动识别目标对象获取数据,识别工作不受环境的影响,操作方便快捷,具有防污、防水、加密存储等优点,较传统的接触式IC卡,具有明显的优势,被广泛应用在身份识别、消费等各项服务上,为企业或单位的管理以及人们的生活提供极大
[单片机]
51-基于<font color='red'>51单片机</font>射频RFID卡考勤上课上班统计设计
51单片机的出租车计价器C51程序
已通过模拟测试 #include reg52.h unsigned char cir_num,pwm_mach,temp,distance,wait_time,price,distance; unsigned int a,t; sbit pwm_mach=P1^0; sbit key_clean=P3^0;//定义按键位置 sbit key_stop=P3^1; sbit key_cheak=P3^2; sbit key_oneway=P3^3; sbit key_doubleway=P3^4; unsigned char code led_buf ={0x3F,0x06,0x5B,0x4F,0x66,0x6D,0x7D,0x07
[单片机]
51单片机摸拟串口(232)
#include reg51.h sbit BT_SND =P1^0; sbit BT_REC =P1^1; //IO 口模拟232通讯程序 //使用两种方式的C程序 占用定时器0 #define uchar unsigned char #define uint unsigned int #define MODE_QUICK #define F_TM F0 #define TIMER0_ENABLE TL0=TH0; TR0=1; #define TIMER0_DISABLE TR0=0; sbit ACC0= ACC^0; sbit ACC1= ACC^1; sbit ACC2= ACC^2;
[单片机]
小广播
添点儿料...
无论热点新闻、行业分析、技术干货……
设计资源 培训 开发板 精华推荐

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

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

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