中断
中断,是单片机的一种运行机制。
标准的51单片机有两个控制中断的寄存器。一个是中断使能寄存器,另一个是中断优先级寄存器。
IE——中断使能寄存器的位分配(地址0XA8,可位寻址 )
IE——中断使能寄存器的位描述
中断查询序列
中断的优先级
中断有两种优先级。一种是抢占优先级,另一种是固有优先级。
抢占优先级
参考C语言的优先级理解。单片机会先执行优先级高的中断。
这里需要认识一个现象——中断嵌套。
如果单片机在执行低优先级中断时发生了高优先级中断,单片机会马上进入高优先级中断执行。高优先级中断处理完后,单片机返回处理低优先级中断。这个过程叫中断嵌套。
IP寄存器通过将优先级控制位置1,将该位设置为高优先级。
IP——中断优先级寄存器的位分配(地址0XB8、可位寻址)
IP——中断优先级寄存器的位描述
固有优先级
即,非抢占优先级。它不具备抢占性!如果在一个低优先级中断时出现了高优先级中断,单片机会先执行完当前的低优先级中断,再执行高优先级中断。
上表中断查询序列中的默认优先级,就是固有优先级。
注意:固有优先级中,数字越小等级越高。
两个优先级的协同使用,既不会无休止地嵌套,又保证了紧急任务优先进行,使单片机中断系统工作有条不紊的进行。
关键字:51单片机 中断
引用地址:
#51单片机#中断
推荐阅读最新更新时间:2024-11-11 01:30
51单片机入门——Proteus 8 Professional的使用
1.什么是Proteus 8 Professional ? Proteus是Lab Center Electronics公司推出的一个EDA工具软件。 Proteus具有原理布图、PCB自动或人工布线、SPICE电路仿真、互动电路仿真、仿真处理器及其外围电路等特点功能。 Proteus 8.9 安装包,内附安装教程 链接:https://pan.baidu.com/s/19YPyUeNt5bTVd7ch_15tig 提取码:qcyx 2.Proteus 8 Professional的使用 双击图标后进入主页面:如图: 首先我们要建立一个工程文件,点击左上角的图标或在开始设计中点击新建工程,如图: 选择合适的保
[单片机]
汇编语言实现中断嵌套的典型程序
设计一个基于单片机的声光报警电路。要求:利用按键触发外部中断0,蜂鸣器发音,发光二极管点亮,声光报警延迟1S后停止(利用定时器TO延时)。蜂鸣器由P1.2控制,发光二极管由P2.0控制。设计硬件电路并给出其完整的程序。 /*典型错误一*/ /* ORG 0000H AJMP MAIN ORG 0003H AJMP INTE0 ORG 000BH AJMP INT120 ORG 0030H MAIN: MOV R0,#00H SETB IT0 SETB EX0 SETB EA MOV TMOD,#01H MOV TH0,#4CH MOV TL0,#00H SETB ET0 HERE: AJMP HERE
[单片机]
外部中断0/1实现点亮LED代码
1 #include reg52.h 2 #include stdio.h 3 sbit LED = P2^0; 4 //初始化函数 5 void init(){ 6 //打开外部中断1的分开关 7 EX1=1; 8 //打开外部中断总开关 9 EA=1; 10 //外部中断1的标志位,标志着外部中断在响应中断 11 IT1=1; 12 } 13 //主函数 14 void main(void){ 15 //调用初始化函数 16 init(); 17 /*兜底循环,因为主函数是死循环的,我们需要初始化函数只初始化一次,所以需要兜底循环, 18 后边的中断也是在这个兜底循环下
[单片机]
MCS-51单片机的4个I/O口各有什么特点?
8051单片机的4个I/O口在结构上是基本相同的,但又各具特点。这四个端口都是8位双向口,每个端口都包括一个锁存器、一个输出驱动器和输入缓冲器。在无片外扩展存储器的系统中,这四个端口的每一位都可以作为双向通用I/O端口使用。在作为一般的通用I/O输入时,都必须先向锁存器写入“1”,使输出驱动场效应管FET截止,以免误读数据。各自特点如下: (1)P0口为双向8位三态I/O口,它既可作为通用I/O口,又可作为外部扩展时的数据总线及低8位地址总线的分时复用口。作为通用I/O口时,输出数据可以得到锁存,不需外接专用锁存器;输入数据可以得到缓冲,增加了数据输入的可靠性。每个引脚可驱动8个TTL负载。 (2)P1口为8位准双向I/O口,内部
[单片机]
AVR中断处理问题
开发工具:AVR Studio 6 +WinAVR l很早以前版本的该开发环境有: void ADC_vect(void) __attribute__((interrupt)); void ADC_vect(void) { 中断处理代码 } 可以中断嵌套, 还有一种不可以中断嵌套的: ) 现在都是采用: ISR(vector, ) //其中attributes为可选择参数有:ISR_BLOCK(阻塞,即不中断嵌套), ISR_NOBLOCK(可中断嵌套), ISR_NAKED ()and ISR_ALIASOF这4个参数,
[单片机]
S3C2440的中断的那些事儿(二) C语言部分讲解
1 void init_irq( ) 2 { 3 // S2,S3对应的2根引脚设为中断引脚 EINT0,ENT2 4 GPFCON &= ~(GPF0_msk | GPF2_msk); 5 GPFCON |= GPF0_eint | GPF2_eint; 6 7 // S4对应的引脚设为中断引脚EINT11 8 GPGCON &= ~GPG3_msk; 9 GPGCON |= GPG3_eint; 10 11 // 对于EINT11,需要在EINTMASK寄存器中使能它 12 EINTMASK &= ~(1 11); 13 14 /* 15 * 设定优先级:
[单片机]
基于51单片机设计的闪烁灯
1.实验任务 如图4.1.1所示:在P1.0端口上接一个发光二极管L1,使L1在不停地一亮一灭,一亮一灭的时间间隔为0.2秒。 2.电路原理图 图4.1.1 3.系统板上硬件连线 把“ 单片机 系统”区域中的P1.0端口用导线连接到“八路发光 二极管 指示模块”区域中的L1端口上。 4.程序设计内容 (1).延时程序的设计方法 作为单片机的指令的执行的时间是很短,数量大微秒级,因此,我们要求的闪烁时间间隔为0.2秒,相对于微秒来说,相差太大,所以我们在执行某一指令时,插入延时程序,来达到我们的要求,但这样的延时程序是如何设计呢?下面具体介绍其原理: 如图4.1.1所
[单片机]
51单片机实验17:LCD1602液晶
开发板液晶模块电路图如下: #include reg52.h #include lcd.h uc dig1 = Happy New Year ; uc dig2 = Ha Ha Ha Ha ; void main() { uc i; lcdinit(); lcdwritecom(0x80); for(i=1;i =16;i++) { lcdwritedata(dig1 ); } lcdwritecom(0xc0); for(i=1;i =16;i++) { lcdwritedata(dig2 ); } while(1); } #include lcd.h void delay() /
[单片机]