目录

一、中断系统简介

二、C51单片机的中断

1、外部中断

2、定时器/计数器中断

三、总结


一、中断系统简介

中断系统是为使CPU具有对外界紧急事件的实时处理能力而设置的。

当中央处理机CPU正在处理某件事的时候外界发生了紧急事件请求,要求CPU暂停当前的工作,转而去处理这个紧急事件,处理完以后,再回到原来被中断的地方,继续原来的工作,这样的过程称为中断。实现这种功能的部件称为中断系统,请示CPU中断的请求源称为中断源。微型机的中断系统一般允许多个中断源,当几个中断源同时向CPU请求中断,要求为它服务的时候,这就存在CPU优先响应哪一个中断源请求的问题。通常根据中断源的轻重缓急排队,优先处理最紧急事件的中断请求源,即规定每一个中断源有一个优先级别。CPU总是先响应优先级别最高的中断请求。

当CPU正在处理一个中断源请求的时候(执行相应的中断服务程序),发生了另外一个优先级比它还高的中断源请求。如果CPU能够暂停对原来中断源的服务程序,转而去处理优先级更高的中断请求源,处理完以后,再回到原低级中断服务程序,这样的过程称为中断嵌套。这样的中断系统称为多级中断系统,没有中断嵌套功能的中断系统称为单级中断系统。

中断原理图

二、C51单片机的中断

这里就以STC89C52单片机的的中断系统为大家做一个详解,大家学习以后可以类比一下其他的中断系统,其实都是大同小异的。

C51单片机中断原理图

1、外部中断

与c51单片机中断相关的寄存器有:

中断允许寄存器:IE

辅助中断控制寄存器:XICON

中断优先级控制寄存器高:IPH

中断优先级控制寄存器低:IP

定时器/计数器0/1 控制寄存器:TCON

串行口控制寄存器:SCON

定时器/计数器2控制寄存器:T2CON
但是我们进行外部中断时,一般只初始化IE 和TCON

IE

说明:

EA:CPU的总中断允许控制位。EA = 1,CPU开放中断,EA = 0,CPU屏蔽所有的中断申请。EA的作用是使中断允许形成两级控制。即各中断源首先受EA控制;其次还受各中断源自己的中断允许控制位控制。

ET2:定时器/计数器2中断允许位。ET2 = 1,允许T2中断;ET2 = 0,禁止T2中断。

ES:串口中断允许位。ES = 1,允许串行口1中断;ES = 0,禁止串行口中断。ET1:定时/计数器T1的溢出中断允许位。ET1 = 1,允许T1中断;ET1 = 0,禁止T1中断。

EX1:外部中断1中断允许位。EX1 = 1,允许外部中断1中断;EX1 = 0,禁止外部中断1中断。

ET0:T0的溢出中断允许位。ET0 = 1,允许T0中断;ET0 = 0禁止T0中断。

EX0:外部中断0中断允许位。EX0 = 1,允许中断;EX0 = 0禁止中断。

TCON

TF1:T1溢出中断标志。T1被允许计数以后,从初值开始加1计数。当产生溢出时由硬件置1,向CPU请求中断,一直保持到CPU响应中断时,才由硬件清0。

TR1:定时器1的运行控制位。

TF0:T0溢出中断标志。T0被允许计数以后,从初值开始加1计数,当产生溢出时,由硬件置1,向CPU请求中断,一直保持CPU响应该中断时,才由硬件清0。

TR0:定时器0的运行控制位。

IE1:外部中断1请求源标志。IE1 = 1,外部中断向CPU请求中断,当CPU响应该中断时由硬件清0。

IT1:外部中断1中断源类型选择位。IT1 = 0,低电平信号可触发外部中断1。IT1 = 1,外部中断1为下降沿触发方式。

IE0:外部中断0请求源标志。IE0 = 1外部中断0向CPU请求中断,当CPU响应外部中断时,由硬件清0

IT0:外部中断0中断源类型选择位。IT0 = 0,低电平可触发外部中断0。IT0=1,外部中断0为下降沿触发方式。

我们了解了这两个寄存器后,再去看上面的中断原理图就能简单的了解一个外部中断的过程了。下面给大家附上一个外部中断0的例子,独立按键K3控制一个LED的亮灭。(程序为STC89C52RC单片机的,外部中断0接P3.2管脚,外部中断1接P3.3管脚)

#include"reg52.h"
//宏定义类型
typedef unsigned char u8;
typedef unsigned int u16;
//定义管脚
sbit KEY3 = P3^2;
sbit LED0 = P2^0;
//延时函数 如果传入数据为1,大概延时10us(晶振频率为11.0592mHZ)
void delay_10us(u16 ten_us)
{while(ten_us--);
}
//外部中断0配置
void exti0_init()
{IT0 = 1;//跳变沿触发方式(下降沿)EX0 = 1;//打开INT0的中断允许EA = 1;//打开总中断
}//主函数
void main(){exti0_init();while(1){}}
//外部中断0中断函数
void exit0() interrupt 0
{delay_10us(1000);if(KEY3==0){LED0 = !LED0;}
}

2、定时器/计数器中断

定时器/计数器中断原理图

TCON在外部中断时已做介绍,我们可以看到TMOD这个工作方式寄存器,其高四位控制T1定时器中断,第四位控制T0定时器中断。

TMOD

GATE:门控位。控制定时器是否受外部中断信号的影响;GATE = 0,同时TCON中的TR0 = 1时,定时器0可以开始工作。GATE = 1,除了TR0 = 1以外,还需要给外部中断0高电平(即INT0的管脚高电平),TR1同理。

C/:模式选择位。0:定时器模式。1:计数器模式

M1M0:工作方式选择位。如下图

工作方式

一般都使用方式1和方式2。给大家详细讲一下方式1,大家就可以类比其他的工作方式了

当Tl0计数满溢出之后向TH0进位,当TH0计数满溢出时,TF0自动置1,向CPU发出中断申请。如上图。当GATE = 0(1处)时,到了非门(2处)变为1;然后经过或门(3处)(若是GATE = 1,则经过非门后就变为0,此时就要受到外部中断0(4处)的影响,即外部中断0的管脚置1,定时器才能正常工作),结果还是为1;此时就需要看TR0(5处),若中断程序允许定时器0工作,即TR0 =1,则经过与门(6处),导通开关(7处),开始定时。后面那个开关(8处)是选择工作模式为定时器还是计数器。

例子:定时器0中断方式1控制D1指示灯间隔1s闪烁

#include "reg52.h"typedef unsigned int u16;    //对系统默认数据类型进行重定义
typedef unsigned char u8;//定义管脚
sbit LED1=P2^0;void delay_10us(u16 ten_us)
{while(ten_us--);
}void time0_init(void)
{TMOD|=0X01;//选择为定时器0模式,工作方式1TH0=0XFC; //给定时器赋初值,定时1msTL0=0X18;    ET0=1;//打开定时器0中断允许EA=1;//打开总中断TR0=1;//打开定时器
}void main()
{   time0_init();//定时器0中断配置while(1){            }
}void time0() interrupt 1 //定时器0中断函数
{static u16 i;//定义静态变量iTH0=0XFC;   //给定时器赋初值,定时1msTL0=0X18;i++;if(i==1000)//循环1000次,即1s{i=0;LED1=!LED1;   }
}

三、总结

中断这一部分就主要是对寄存器的操作,重点也是各个寄存器。我们看懂了所使用的开发板的中断系统原理图,再结合相应的寄存器,其实实现中断也不是一个难题。但是对于寄存器初学的朋友可能记忆有些困难,但是使用多了就熟练了,所以自己可以尝试一下其他的中断来加深自己的理解。

中断系统的简单了解以及C51(STC89C52)单片机中断系统的详解相关推荐

  1. Linux系统与网络、磁盘参数和日志监控等命令详解二

    创作人QQ:851301776,邮箱:lfr890207@163.com, 欢迎大家一起技术交流,本博客主要是自己学习的心得体会,只为每天进步一点点! 个人座右铭: 1.没有横空出世,只要厚积一定发. ...

  2. Linux系统强制位u+s、g+s、o+t 详解

    Linux系统强制位u+s.g+s.o+t 详解 u+s:一个命令,给与用户s权限,则此用户暂时获得这个命令的属主权限 (例chmod u+s /usr/bin/touch或者chmod 4755 / ...

  3. java语言say方法,简单了解Java方法的定义和使用实现详解

    简单了解Java方法的定义和使用实现详解 发布时间:2020-09-25 11:36:07 来源:脚本之家 阅读:78 作者:OLIVER_QIN 这篇文章主要介绍了简单了解Java方法的定义和使用实 ...

  4. 【mcuclub】STC89C52单片机最小系统讲解

    1.实物图 2.原理图 3.介绍 3.1.主芯片 STC89C52是STC公司生产的一种低功耗.高性能8位微控制器 器件参数: 1.增强型8051单片机,指令代码完全兼容传统8051 2.工作电压:5 ...

  5. 老毛桃电脑重装linux系统,如何简单快速用U盘装Win10系统,小白也能变装系统达人...

    原标题:如何简单快速用U盘装Win10系统,小白也能变装系统达人 飚王出品,必属精品! 电脑作为家庭必备,虽然大部分时候都不需要我们自己装系统,但万一遇到电脑中毒系统崩溃或者买回一台笔记本预装linu ...

  6. linux 文件 字符集设置,Linux字符集和系统语言设置-LANG,locale,LC_ALL,POSIX等命令及参数详解...

    博文说明[前言]: 本文将通过个人口吻介绍Linux字符集和系统语言设置,包括LANG,locale,LC_ALL,POSIX等命令及参数详解的相关知识,在目前时间点[2017年6月21号]下,所掌握 ...

  7. keil c语言中断怎么写,如何利用keil C实现单片机中断功能

    直接访问寄存器和端口 定义 sfr P0 0x80 sfr P1 0x81 sfr ADCON; 0xDE sbit EA  0x9F 操作 ADCON = 0x08; P1 = 0xFF; io_s ...

  8. zynq开发系列5:通过AXI GPIO的中断实现PL端按键控制PS端LED(SDK开发详解)

    axi_gpio是PL端gpio(FPGA资源搭建的软核),ps7_gpio是ps端gpio(硬核).打开Documentation的示例Examples,可知第二个是关于中断的示例.导入示例impo ...

  9. 嵌入式linux智能家居系统,以Arm-Linux为平台的智能家居控制系统的设计详解

    嵌入式系统以其占用资源少.专用性强.功耗低的特点使其广泛应用在移动通信.工业生产.安全监控等领域.针对人们对高效.舒适.安全.便利.环保的居住环境的要求,提出了以Arm-Linux为平台的智能家居控制 ...

最新文章

  1. 负载均衡策略关键因素
  2. ionic ajax 跨域,解决 ionic 中的 CORS(跨域) 问题
  3. spring boot validated的使用
  4. 向fedora虚拟机中复制文件_Unraid虚拟机中Dockers下搭建WebDAV共享文件服务器
  5. boost::geometry::select_most_precise用法的测试程序
  6. css浮动(float)及清除浮动的几种实用方法
  7. 点火提前角的修正方式有哪些_“天问一号”完成第二次轨道中途修正:精度很高,本次修正量很小...
  8. 5919. 所有子字符串中的元音
  9. Java调用.NET webservice方法的几种方式
  10. 95-138-010-源码-Function-AggregateFunction
  11. 年薪201万!华中科大AI博士生入选华为天才少年计划!
  12. easyUI datagrid 重复发送URL请求
  13. NumPy 官方 中文文档 开发手册
  14. cmmi实践访谈测试ppt_CMMI3_实践篇.ppt
  15. Orcad allegro 安装补丁
  16. 使用python实现往手机发短信(基于twilio)
  17. css文本属性 首行缩进
  18. Improving Few-Shot Learning with Auxiliary Self-Supervised Pretext Tasks(论文解读)
  19. 北大计算机录取分数线2017,北大2017年高考在全国31省市录取分数线人数对比
  20. 分布式事务(6)-分布式事务处理技术之RocketMQ

热门文章

  1. 抖音Vlog短视频达人必备2000+PR无缝转场过渡模板 全格式Premiere转场包
  2. C4D致富经典入门到精通(十)
  3. 士兵队列训练问题 HDU - 1276
  4. php平台cdn搭建,PHP 搭建一个网站配置CDN产品?
  5. HttpPrinter - web打印插件
  6. CentOS8设置时间同步
  7. matlab 实现二进制与十进制相互转换
  8. <CSS练习> 淘宝轮播图案例 含素材(CSS定位)
  9. Linux中su命令与su-命令区别详解!
  10. 十大最易受攻击的软件 Java第一Adobe第三