扯会儿单片机开发:中断

作者: 兔子泽 | 来源:发表于2016-07-01 22:29 被阅读403次

前言

读到这篇,你最好已经有了一些基础知识单片机入门编程能力,接下来聊聊中断(Interrupt)。
用程序员的角度说,单片机的中断机制有点像面向对象中的事件,只不过单片机中的这些“事件”是由其他的部件引发。


什么是中断

简而言之,就是打断处理器且让其处理那个打断它的事件。就好像你在玩电脑,然后家里的暖壶响了,这时你会放下眼前的事,去厨房关火。水开了、壶响了就是中断的触发,关掉煤气灶就是中断要处理时的程序。当你关了火就可以继续回来做眼下的事情。中断也是这个道理。

操作系统中断

操作系统的发展过程,大体上就是一个想方设法不断提高资源利用率的过程,而提高资源利用率就需要在程序并未使用某种资源的时候,把它对那种资源的占有权释放掉,而这个行为,就需要通过中断实现。

从上述引段中可以看出,操作系统中的中断机制引入的初衷就是为了提高多道程序设计的资源利用率的。

单片机中断

在单片机中,换汤不换药,也主要是为了处理发生的中断事件而设定的


单片机开始运行后,会开始执行主程序中的代码,当遇到中断时,单片机就会暂停读取主程序代码,转而读取中断代码,当执行完中断代码后,继续手下的主程序代码。
大部分单片机并没有操作系统,比如笔者最近把玩的51系列。所以也谈不上他们会有多道程序设计,更不用说进程那些概念。因为单片机的大部分用途都是只运行单一一个程序就够了。


52单片机

说回到52单片机,也就是stc89c52或at89c52之类的。

类别

它有三种中断类型

类型 说明
外部中断 比较通用,外部中断引脚收到信号后发生中断
串口中断 串口RXD引脚收到信号后发生中断,往往是接受够一个字节后触发
定时器中断 每当定时器计数溢出后触发

共6个中断源,其中2个外部中断源,3个定时器中断源,1个串口中断源。这里仅仅讨论52单片机内的中断设置。

相关寄存器

中断涉及到两个寄存器,一个是中断允许寄存器(IE,Interrupt Enablement),另一个是中断优先级寄存器(IP,Interrupt Priority)。
中断允许寄存器(IE)
各中断源的开关,字节地址:A8H(reg52.h中已定义sfr IE = 0xA8;),可以位寻址(A8H~AFH),复位时全部清零。

位序号 位地址 位符号 说明
D7 AFH EA 全局中断允许位,就像电闸上总闸,是所有开启任何中断的前提,若关闭,则关闭所有中断。
D6 -- -- 这一位为空,无用。
D5 ADH ET2 定时器2中断允许位,若打开则允许定时器2溢出后引发中断。
D4 ACH ES 串口中断允许位,若打开则允许RXD引脚接受到1个字节的信息后引发中断。
D3 ABH ET1 定时器1中断允许位,若打开则允许定时器1溢出后引发中断。
D2 AAH EX1 外部中断1中断允许位,若打开则允许外部中断引脚接收信号后引发中断。
D1 A9H ET0 定时器0中断允许位,若打开则允许定时器0溢出后引发中断。
D0 A8H EX0 外部中断0中断允许位,若打开则允许外部中断引脚接收信号后引发中断。

以上全部位的值为1是打开,0是关。
中断优先寄存器(IP)
用于设定各中断源的优先级,字节地址B8H(reg52.h中已定义sfr IP = 0xB8;),可以位寻址(B8H~BFH),复位时全部清零。

位序号 位地址 位符号 说明
D7 -- -- 这一位为空,无用。
D6 -- -- 这一位为空,无用。
D5 -- -- 这一位为空,无用。
D4 BCH PS 串口中断优先级控制位。
D3 BBH PT1 定时器1中断优先级控制位。
D2 BAH PX1 外部中断1优先级控制位。
D1 B9H PT0 定时器0中断优先级控制位。
D0 B8H PX0 外部中断0优先级控制位。

以上各位值为1时为高优先级,0位低优先级。
52单片机中,供用户设置的有两种优先级,高与低。他们遵循以下三条规则:

1.低优先级中断源可被高优先级中断源中断,高优先级中断源不能被任何中断源中断。
2.一种不论高低的中断源一旦得到响应,与之同级的中断源不可中断它。
3.当同时收到几个同优先级的中断源时,响应优先级按其默认中断级别执行。

各中断源默认中断级别及中断序号

中断源 默认中断级别 序号(C语言)
外部中断0 1st 0
定时器0中断 2nd 1
外部中断2 3rd 2
定时器1中断 4th 3
串口中断 5th 4
定时器2中断 6th 5

参考文献

1.《51单片机C语言教程》,郭天祥 著,电子工业出版社
2.《操作系统联考复习指导》,王道论坛 组编,电子工业出版社
3.《现代操作系统》,Andrew S. Tanenbaum 著,机械工业出版社
4.单片机中断的IE和IP寄存器,电工学习网

相关文章

  • 扯会儿单片机开发:中断

    前言 读到这篇,你最好已经有了一些基础知识和单片机入门编程能力,接下来聊聊中断(Interrupt)。用程序员的角...

  • 扯会儿单片机开发:开始

    前言 正在写作这篇文章的笔者是一名大四的软件工程学生,因为实习工作的需要,奉命研究单片机开发,所以我所扯的内容可能...

  • 51单片机实战:Proteus、Keil入门及点亮一个虚拟LED

    前言 相信你在看完《扯会儿单片机开发:开始》后,对单片机开发的基础知识有了一定的了解。这一次我们来实战一番,在Pr...

  • 51单片机知识点问答

    中断系统: https://ks.wjx.top/jq/35309445.aspx 单片机开发的两个利器: Kei...

  • 15 中断系统

    单片机STC89C52学习——15 中断系统 汇总:00 单片机STC89C52学习参考教程:普中科技 1 中断系...

  • Javascript的回调,不等同于MCU的中断

    曾有一位做单片机开发的朋友问我回调是怎么回事,我解释就跟单片机的中断函数类似,比如你的定时器的溢出值设置为200毫...

  • 单片机中断

    寄存器IE(8位):对单片机系统所有中断以及某个中断源的开放和屏蔽的控制 EX0(IE.0),外部中断0允许位; ...

  • 单片机中断

    TCON 76543210TF1TR1TF0TR0IE1IT1IE0IT0 IE 76543210EAESET1E...

  • PIC单片机电平变换中断的那些坑

    最近因为XX原因,需要用到PIC单片机。其中,电平变换中断有两个坑,需要记录下来。 某些老版本的单片机,中断函数中...

  • 51单片机采用中断进行串口通信

    51单片机采用中断方式的串口通信过程及程序分析: 所谓中断方式,就是串口收/发标志位出发中断后,在中断中执行既定操...

网友评论

  • 32bc55410c21:不错不错 谢谢总结
    兔子泽:@等夜尽待天明 :smile:谢谢
  • 殇_书ER:讲得很清楚,但是我觉得你可以弄点代码例子来说明一下,这样更加深刻理解和应用
    兔子泽:@殇_书ER 你当时用键盘应该就是触发外部中断吧
    殇_书ER: @兔子泽 后面那两个我还没看过,之前就学了简单的中断和定时器,还有键盘。
    兔子泽:@殇_书ER 那个计时器与数码管就是对计时器中断的一个应用。串口中断的话正在写思路,外部中断要再往后推推。

本文标题:扯会儿单片机开发:中断

本文链接:https://www.haomeiwen.com/subject/hgnfjttx.html