51单片机学习----中断

什么是中断?

        当CPU正在处理某件事的时候,突然有一个紧急的事情发生了,要求CPU暂停当前的工作,转而去处理这个紧急的事情,处理完之后,再回到原理被中断的地方,继续原来的工作,这样的过程就叫中断。比如你正在写代码,突然肚子痛,你只能暂停写代码,去上厕所,厕所上完之后,你又回来接着写代码。

什么是中断源?

        导致你中断当前任务的事件就是中断源。比如你正在写代码,肚子痛是一个中断源,你女朋友打电话过来了也是一个中断源,厨房着火了也是一个中断源。

什么是中断优先级?

        中断优先级,就是根据中断源的轻重缓急来排队,先处理优先级高的,也就是最紧急的事情。比如厨房着火和你女朋友的电话哪个更紧急?肯定是厨房着火吧,那就先去灭火了。不过中断的优先级你自己可以安排,你也可以先跟你女朋友打电话,电话打完了之后再来灭火,毕竟有的人更爱江山,有的人更爱美人。

 什么是中断嵌套?

        中断嵌套就是,你中断了手头的工作,去处理紧急事件A的时候,又出现了一个更紧急的事件B,那就要暂停事件A,去处理事件B,等事件B处理完之后,再去处理事件A,事件A处理完之后,在继续你手头的工作。比如你在写代码的时候,你女朋友电话来了,你就去接你女朋友的电话,接电话的时候,厨房着火了,你就暂停电话去灭火,或灭之后,再跟你女朋友电话,电话完之后,再接着写你的代码。

STC89C51单片机系统有8个中断源

 8个中断源其实可以分成3类

        外部中断源4个:INT0、INT1、INT2、INT3

        定时器中断源3个:Timer0、Timer1、Timer2

        串口中断1个:UART

STC89C51单片机系统中断源的优先级

 STC89C51单片机中断查询序号,也就是中断号

void    Int0_Routine(void)            interrupt 0;

void    Timer0_Rountine(void)         interrupt 1;

void    Int1_Rountine(void)           interrupt 2;

void    Timer1_Rountine(void)         interrupt 3;

void    UART_Rountine(void)           interrupt 4;

void    Timer2_Rountine(void)         interrupt 5;

void    Int2_Rountine(void)           interrupt 6;

void    Int3_Rountine(void)           interrupt 7;

STC89C51RC单片机中断系统结构图

 看这种大图,不要怕,顺着线条,从左到右,从上到下的看,还可以分类归纳这看,51单片机的控制其实就是寄存器的控制,配置好寄存器,单片机就能自动的控制了,那就先来认识下几个跟中断相关的寄存器。

跟中断相关的寄存器

51单片机是一种8位单片机,什么意思?就是它内部的寄存器都是8位的,每个寄存器有8个bit

1、中断使能寄存器(Interrupt Enable),简写IE

B7B6B5B4B3B2B1B0
EA-ET2ESET1EX1ET0EX0

2、中断优先级寄存器(Interrupt Priority )简写IP

B7B6B5B4B3B2B1B0
--PT2PSPT1PX1PT0PX0

3、中断优先级寄存器(Interrupt Priority High)简写IPH

B7B6B5B4B3B2B1B0
PX3HPX2HPT2PSHPT1HPX1HPT0HPX0H

4、定时器/计数器控制寄存器(Timer/Counter Control)简写TCON

B7B6B5B4B3B2B1B0
TF1TR1TF0TR0IE1IT1IE0IT0

5、串口控制寄存器(Serial Control)简写SCON

B7B6B5B4B3B2B1B0
SM0/FESM1SM2RENTB8RB8TIRI

6、定时器/计数器2控制寄存器(Timer/Counter2 Control)简写T2CON

B7B6B5B4B3B2B1B0
TF2EXF2RCLKTCLKEXEN2TR2C/T2CP/RL2

7、辅助中断控制寄存器(Auxiliary Interrupt Control)简写XICON

B7B6B5B4B3B2B1B0
PX3EX3IE3IT3PX2EX2IE2IT2

别看中断寄存器有这么多个,感觉很复杂的样子,当然,能记住最好了,记不住也没关系会翻书查询就可以了。基本就那么几个步骤:

        1、用不用中断?用的话就把中断使能打开,一个总开关,一个分开关;

        2、用什么类型的中断?51单片机就那么3种中断,外部中断、定时器中断、串口中断;

        3、中断的优先级?每个中断可以设置为4个优先级别分别为0、1、2、3,数字越大,优先级越高;

当然这个顺序是可以打乱的,你也可以先设置类型,再设置类型,最后设置使能,只要把这几部都做了就好。

外部中断0分析

 从左到右看:

1、 设置中断类型,外部中断0,可以设置为低电平中断,下降沿中断;

       TCON.0/IT0 =0解释:将TCON寄存器的第0位,这个第0位就是IT0,将IT0设置为0,就可以将外部中断0 (INT0)设置为低电平中断了,

        TCON.0/IT0 =1解释:将TCON寄存器的第0位,这个第0位就是IT0,将IT0设置为1,就可以将外部中断0 (INT0)设置为下降沿中断了,

2、设置中断使能开关,分别打开子开关,总开关;

        EX0对应的是外部中断0(INT0)的使能子开关,EA是所有中断的总开关,都设置为1,外部中断0(INT0)才能有效。这个EX0是中断使能寄存器IE的第0位,EA是中断使能寄存器IE的第7位

3、设置中断优先级,有4个级别:00、 01、 10、 11,

        中断优先级对应的寄存器有两个IP和IPH,这个IPH是STC单片机特有的,本来传统的51单片机优先级只有IP这一个寄存器,只能分两级,STC单片机多加了一个IPH寄存器,就可以分4级了。比如现在要把INT0的优先级设置为2,也就是1,0,那就把IPH寄存器的第0位PX0H设置为1,把IP寄存器的第0位PX0设置为0;

外部中断0(INT0)C语言实现

将外部中断0(INT0)设置为下降沿触发,通过按键按下来产生下降沿

#include <STC89C5xRC.H>

void main()
{

	IT0 = 1; //外部中断0(INT0)设置为下降沿触发
	EX0 = 1; //外部中断0(INT0)开关使能
	EA  = 1; //中断总开关使能
	
	//STC单片机的中断优先级需要设置IP和IPH寄存器,IP寄存器可以位操作,IPH只能寄存器操作
	//优先级也可以不设置,默认的中断优先级就是0,因为复位之后IPH和IP寄存器默认值就是0
	PX0 = 0;
	IPH = 0x01;
	
	while(1);
}


void ExInt0()	interrupt 0
{
	P00 = ~P00; //每次INT0下降沿中断,P0.0的电平翻转,放个LED就可以看到LED亮灭
}

对应的外部中断电路图

​​​​​​​

 外部中断1、2、3的使用与外部中断0的使用是一样的。

  • 12
    点赞
  • 46
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值