少走弯路,PIC单片机中断总结
51单片机中断知识总结

51单片机中断知识总结如下:一、中断概念中断是一种特殊的事件处理机制,当单片机在执行程序时,如果发生某种突发事件(如外部中断请求、定时器溢出等),需要立即处理,这时单片机就会暂时中断当前的工作,转去处理这个突发事件。
处理完后再回到原来被中断的地方继续执行程序。
这个过程就称为中断。
二、51单片机的中断系统结构51单片机的中断系统由中断允许寄存器IE控制。
IE寄存器可以控制所有中断以及某个中断源的开放和屏蔽。
三、中断标志位中断标志位是用于标识某个事件是否发生的中断信号。
当发生某个事件时,硬件会自动置位相应的中断标志位。
四、中断响应条件中断响应条件包括两个:1)允许中断标志位为1;2)相应中断的优先级最高。
只有当这两个条件都满足时,单片机才会响应中断。
五、中断处理中断处理是对中断源进行有针对性的服务。
用户需要编写相应的中断处理程序,以便在发生中断时执行相应的操作。
六、中断返回中断返回是指返回到主程序断点处,继续执行主程序。
这个过程由硬件自动完成。
七、外部中断外部中断是由外部设备产生的中断请求。
在51单片机中,外部中断可以通过INT0和INT1引脚输入。
外部中断的触发方式可以是下降沿触发或电平触发。
八、定时器中断定时器中断是由定时器溢出产生的中断请求。
当定时器溢出时,硬件会自动置位相应的中断请求标记,并产生中断请求。
九、串口中断串口中断是由串行口接收完一帧数据后产生的中断请求。
当串行口接收完一帧数据后,硬件会自动置位相应的中断请求标记,并产生中断请求。
以上就是关于51单片机中断的知识总结,希望能够帮助到您。
PIC系列单片机的中断资源特点及其应用方法详解

PIC系列单片机的中断资源特点及其应用方法详解1 PIC单片机简介PIC系列单片机是美国Microchip技术公司推出的高性能价格比的8位嵌入式控制器(Embedded Controller),它采用了精简指令集计算机RISC (Reduced Instruction Set Computer)和哈佛(Harvard)双总线以及两级指令流水线结构。
具有高速度、低工作电压、低功耗等特点和优良的性能价格比,因而PIC系列单片机越来越受到单片机开发与应用工程技术人员的青睐。
该系列独特的结构和中断资源使其在使用时与其它系列的单片机有许多不同之处。
下面以PIC16CXX系列微控制器为例来介绍PIC 系列单片机的中断资源特点以及应用方法。
2 中断资源的开发与屏蔽图1是PIC16C64/64A/65/65A的中断逻辑电路图,其它型号芯睡的中断资源也大致相同,只是资源多少不一而已,但它们的中断入口只有一个(入口地址在004H)。
PIC 单片机的中断大致可以分为两类。
第一类是由中断控制器INTCON直接控制的中断,包括外部引脚中断INT的RB口电平变化中断以及定时器TMRO溢出中断,它们的中断允许位和中断标志都在INTCON寄存器中。
引脚中断INT和定时器TMRO溢出中断与其它微处理器相同。
RB口电平变化中断是PIC 单片机特有的中断,当把RB口高4位I/O口线设置为输入时,只要这4位I/O 口线上的电平发生变化就会引起中断。
RB口的电平中断特性对用户是非常有用的。
用户可以直接利用这些口线的关键部位进行电平检测,并可利用中断进行保护性控制等操作;另一方面,电平中断特性还可以利用RB口的软件控制弱上拉特性组成一个矩阵键盘,并用按键唤醒CPU,这对于那些以电池供电的系统特别有用。
另一类是外围接口中断,包括定时器TMR1溢出中断、TMR溢出或匹配中断、同步串行口中断、异步串行口中断、并行从动口中断和CCP(Capture/Compare/PWM)中断等,而带A/D功能的PIC16C7X系列微处理器还有A/D转换完成中断。
PIC单片机中断程序设计技巧

PIC单片机中断程序设计技巧
所有的中档系列PIC 单片机,PORTB 端口最高的4 个引脚(RB7~RB4)在设为输入模式时,当输入电平由高到低或由低到高发生变化时,可以让单片机产
生中断。
这就是通常所说的引脚状态变化中断。
在设计引脚中断程序时,有三个需要特别注意的地方。
一是,在清除P0RTB 中断标志位RBIF 之前,必须安排一条必不可少的,以PORTB 端口数据寄存
器PORTB 为源寄存器的读操作指令。
放置这一指令的目的有时并不只是为了
读取有用的数据,而是为了取消状态变化的硬件信号,以便顺利清除RBIF 标
志位,为下一次中断做好准备。
二是,由于端口PORTB 是引脚电子变化中断,即无论引脚出现上升沿还是下降沿都会产生中断请求,所以必须处理好不需要
的虚假中断。
三是,一般都利用PIC 单片机的引脚功能来检测按键,所以必须处理好按键消抖的问題。
引脚中断程序设计
在主程序里先设置有关的寄存器。
◇设置TRISB 寄存器,使RB7~RB4 相关的引脚处于输入状态;
◇如果需要弱上拉,通过OPTION_REG 的第7 位设置;
◇RBIF=O;
◇RBIE=1;
◇GIF=1。
响应状态变化后的中断服务程序。
◇检查RBIF 是否为l,为l 则是引脚变化引起的中断;
◇调用延时程序,延时20~30 ms,目的是为了按键去抖;。
PIC中档单片机的中断总结

PIC中档单片机的中断总结对于来说,一次中断的过程大致有下列阶段:为了使得解释形象和直观,本文采纳一些诙谐的语句来比方解释:中断哀求---------比方成申请买经济适用房的哀求中断标记-------一份申请书本中断使能xxIE-----本单位领导PEIE-------------户口办公室主任GIE--------------银行的管理信贷的科长中断哀求:房子太少,儿子要结婚了,得买房了,可资源和财力有限,不能卖商品房,只好按特别状况处理,写一份申请书(中断标记位IF 置1);本单位领导xxIE看了之后,假如给你盖了一个戳:(即该中断使能位IE=1),那么恭喜你,这份申请书可以提交到更高一级的部门;假如没盖(xxIE= 0),那么对不起,先放我这里吧,等我们讨论讨论好后再说。
假如你不愉快,要拿回申请书撕掉,呵呵,那么IF=0;你的购房哀求之梦破灭;xxIE领导将按照户口,将这些哀求书给分类,一类是外地迁来的户口,提交给户口办公室PEIE主任审查,PEIE主任假如给你盖了个戳(PEIE= 1),那么,他将会把申请书提交给银行的GIE科长批准,否则就是放在这里再讨论讨论或者你要回归撕毁;一类是本地户口,可挺直提交给银行的GIE科长批准,然后你将申请书带到GIE科长的办公室。
GIE科长盖了章之后(GIE=1),然后,你就可以拿着申请书去找房地产商要房子了(此时PC指针=0004H),由于GIE科长有无数事情要做,所以他每盖了一次戳之后(注重是一次不是一个,由于大概有多个中断同时发生,也就是说有其他地方的人来请GIE盖戳),就在办公室门外挂了个牌子:请勿打搅。
他自己则歇息去了,直到接到RETFIE的电话或者有人打他的手机。
房地产商预备给房子了,不过你最好得先把各项手续给填好,叫5w押第1页共4页。
中断是什么,PLC中断,单片机中断,那中断能干什么?

中断是什么,PLC中断,单片机中断,那中断能干什么?中断的概念:中断是计算机独有的一种工作方式;在主程序执行的过程中,中断主程序的执行;在执行子程序的过程中,中断子程序的执行。
中断程序主要是为某些特定控制功能而设定。
与子程序不同,中断是随机发生且必须立即响应的。
需要执行中断程序必须要有中断源(引发中断的信号)每个中断信号都有一个编号加以识别,也就是我们说的中断事件号在200SMART系列PLC中共有三大类中断事件,分别是:I/O中断:I/O 中断包括上升/下降沿中断、高速计数器中断和脉冲串输出中断。
CPU 可以为输入通道I0.0、I0.1、I0.2 和I0.3(以及带有可选数字量输入信号板的标准 CPU 的输入通道 I7.0 和 I7.1)生成输入上升和/或下降沿中断。
可对这些输入点中的每一个捕捉上升沿和下降沿事件。
这些上升沿/下降沿事件可用于指示在事件发生时必须立即处理的状况。
高速计数器中断可以对下列情况做出响应:当前值达到预设值,与轴旋转方向反向相对应的计数方向发生改变或计数器外部复位。
这些高速计数器事件均可触发实时执行的操作,以响应在可编程逻辑控制器扫描速度下无法控制的高速事件。
脉冲串输出中断在指定的脉冲数完成输出时立即进行响应。
脉冲串输出的典型应用为步进电机控制。
通信中断:CPU 的串行通信端口可通过程序进行控制。
通信端口的这种操作模式称为自由端口模式。
在自由端口模式下,程序定义波特率、每个字符的位数、奇偶校验和协议。
接收和发送中断可简化程序控制的通信时基中断:基于时间的中断包括定时中断和定时器 T32/T96 中断。
可使用定时中断指定循环执行的操作。
循环时间位于 1 ms 到 255 ms 之间,按增量为 1 ms 进行设置。
必须在定时中断 0 的 SMB34 和定时中断 1 的 SMB35 中写入循环时间。
每次定时器到时时,定时中断事件都会将控制权传递给相应的中断程序。
通常,可以使用定时中断来控制模拟量输入的采样或定期执行 PID 回路。
关于PIC单片机的中断现场保护问题

关于PIC单片机的中断现场保护问题在进入中断服务子程序期间,只有返回地址PC 的数值被自动压入堆栈,其他的一些寄存器的内容就得按照程序的需要由我们自己想办法了。
PIC 单片机汇编语言没有象51 系列单片机那样的PUSH POP 指令,所以我们要用一段程序来实现类似的功能。
因为是用一段程序来实现现场的保护,这样就可能影响到W 和STATUS 寄存器,所以我们要在保护现场的时候先把这两个寄存器给保护了。
这些现场保护不是将数据保存在芯片的堆栈中。
而是将其放到RAM 中进行保存。
个人认为将这些数据保存在与体选址无关的RAM 中,也就是说PIC 一般有四个体,无论目前在哪个体里改变其RAM 的数据,都可以映射到其他体中,本人认为这样在程序上比较方便,避免了一些弊端和麻烦。
我也是刚接触PIC,如果有说的不对的地方,还请大家提出,我们共同探讨。
先谢了:)下面引用一段厂家提供的中断现场保护的样例程序:将W,STATUS,和PCLATH 寄存器内的内容保存到临时备分寄存器中(1) MOVWF W_TEMP 复制W 到它的临时寄存器W_TEMP 中(2) SWAPF STATUS,W 将STATUS 中的高低四位交换后放入W(3) CLRF STATUS 不管目前在哪个体,都设置成体0 为当前体(4) MOVWF STATUS_TEMP 保存STATUS 到体0 上的临时寄存器(5) MOVF PCLATH,W 把寄存器PCLATH 中的内容复制到W 中(6) MOVWF PCLATH_TEMP 保存PCLATH 到临时寄存器里(7) CLRF PCLATH 不管当前处在哪页,都把PCLATH 设置成0 ............(中断服务子程序的核心部分)(8) MOVF PCLATH_TEMP,W 经过W 转移。
单片机中断实验总结
单片机中断实验总结单片机中断是单片机系统中一项重要的功能和特性。
通过中断,可以实现对外部事件的实时响应和处理,从而提高系统的实时性和可靠性。
在实验中,我对单片机中断进行了学习和实践,以下是我的实验总结。
在实验中,我首先了解了中断的基本概念和原理。
中断是指在程序执行过程中,由外部事件、硬件设备或软件请求而打断正常执行流程,转去执行与该事件或请求相关的子程序。
中断可以分为外部中断和内部中断。
外部中断是通过硬件引脚与外部设备进行连接并触发的,而内部中断则是由软件内部生成的。
中断的实现需要借助中断控制器,例如常用的单片机8051就内置了中断控制器。
实验中,我使用keil C编译器和STC89C52单片机开发板进行了中断的实现。
编写了一个简单的程序,当外部中断0引脚检测到高电平时,触发外部中断,执行相应的中断服务程序。
在编写程序时,首先定义了中断服务程序的函数原型,然后通过中断向量表将中断服务程序与相应的中断号关联起来。
在主程序中,使用IE寄存器和相应的位操作函数开启了外部中断。
在实验过程中,我遇到了一些问题,并进行了解决。
首先,我发现外部中断引脚的电平触发方式对中断的触发有影响。
通过查阅资料,我了解到外部中断引脚可以选择边沿触发还是电平触发,需要根据实际的需求进行设置。
其次,我发现在中断服务程序中,需要注意中断屏蔽和中断优先级的设置,以免出现中断互相屏蔽的情况。
最后,我发现中断服务程序中的代码需要尽量简洁和高效,以保证中断的响应时间和系统的实时性。
通过实验,我进一步理解了单片机中断的概念和原理,掌握了使用keil C编写中断程序的方法,提高了对单片机系统的认识和理解。
中断在单片机系统中具有重要的作用,可以实现对外部事件的实时响应和处理,从而提高系统的可靠性和实时性。
在今后的学习和实践中,我将进一步深化对中断的理解和应用,并将其应用到更为复杂的系统中。
参考内容:1. 《嵌入式系统原理与开发:使用51单片机和C语言》-程杰2. 《嵌入式系统与单片机原理实验教程》-王刚3. 《单片机原理与应用》-马利民4. STC89C52单片机数据手册5. Keil C51编译器使用手册。
pic单片机中断
PIC18系列的低优先级中断入口地址在0x0018地址,下面的代码是在入口地址处放置一个向量函数,这个向量函数里就是一个内嵌汇编的GOTO指令,GOTO到低优先级的中断服务函数InterruptHandlerLow。
//----------------------------低优先级中断入口-----------------------------------1#pragma code InterruptVectorLow = 0x18 //用#pragma伪指令定义一个名字叫InterruptVectorLow的段,并把这个段放到0x18地址起始的代码空间2void InterruptVectorLow (void) //低优先级中断向量函数3 {4_asm5goto InterruptHandlerLow //内嵌汇编指令6_endasm7 }8#pragma code //这里不是多余的,它是告诉连接器回到默认的代码段,如果不加的话,连接器就会傻傻地把后面的代码紧跟着上面的代码一直放下去。
而LKR文件里定义了向量区最多到0x29地址,所以如果没加此行通常会报错910#pragma interruptlow InterruptHandlerLow //这里使用interruptlow这个关键词来声明InterruptHandlerLow这个函数是低优先级中断服务函数,用了关键词后,这个函数将会由编译器自动产生基本的现场保护,并且这个函数的返回将是使用RETFIE 返回的。
111213void InterruptHandlerLow (void)14 {15/* 低优先级服务函数的代码写在这里*/16 }PIC18系列的高优先级中断入口地址在0x0008地址,下面的代码是在这个入口地址处放置一个向量函数,这个向量函数里就是一个内嵌汇编的GOTO指令,GOTO到高优先级的中断服务函数InterruptHandlerHigh 。
PIC单片机中断系统详细汇总
PIC单片机中断系统详细汇总在PIC单片机中,中断系统的实现主要包括以下几个方面的内容:1.中断向量表:PIC单片机中的中断系统采用了向量表的形式来管理不同类型的中断。
向量表是一个存放中断服务子程序入口地址的表格,当中断发生时,单片机根据中断号在向量表中查找相应的中断服务子程序入口地址,并跳转到该地址处执行相应的操作。
2.中断优先级:PIC单片机中的中断系统支持多级中断优先级。
不同的中断可以设置不同的优先级,当多个中断同时发生时,系统会根据优先级的设置,优先处理优先级较高的中断,从而保证重要的中断不会被忽略。
3.中断源:PIC单片机支持多个中断源,包括外部中断(外部引脚上的信号触发的中断)、定时器中断(由定时器溢出或比较事件触发的中断)和串口中断(由串口接收/发送数据触发的中断)等。
每个中断源都有对应的中断标志位,当中断发生时,对应的中断标志位会被设置,以便主程序判断中断类型并做出相应的处理。
4.中断使能和屏蔽:PIC单片机中的中断系统提供了中断使能和屏蔽的功能。
通过设置相应的中断使能和中断屏蔽寄存器的位,可以控制一些中断源的中断是否启用,以及在一些中断源触发中断后,是否允许继续触发该中断。
5.中断服务子程序:PIC单片机的中断系统需要用户自行编写中断服务子程序来处理中断事件。
中断服务子程序是一个与主程序独立的子程序,它会在中断发生时被自动调用,并执行特定的操作。
在编写中断服务子程序时,需要注意子程序的实时性和占用资源的情况,以确保中断的及时响应和系统的稳定性。
6.中断处理流程:PIC单片机中的中断处理流程可以简单描述为:当中断发生时,系统会根据中断号在中断向量表中查找相应的中断服务子程序入口地址,并跳转到该地址处执行中断服务子程序。
在中断服务子程序中,可以对中断事件进行处理,清除中断标志位,并在需要的情况下触发其他操作,比如发送数据、修改相关寄存器等。
当中断服务子程序执行完毕后,系统会自动返回到主程序的执行流程中,继续执行之前的任务。
pic单片机中断程序的设计技巧
PIC单片机中断程序的设计技巧所有的中档系列PIC单片机,PORTB端口最高的4个引脚(RB7~RB4)在设为输入模式时,当输入电平由高到低或由低到高发生变化时,可以让单片机产生中断。
这就是通常所说的引脚状态变化中断。
在设计引脚中断程序时,有三个需要特别注意的地方。
一是,在清除P0RTB中断标志位RBIF之前,必须安排一条必不可少的,以PORTB端口数据寄存器PORTB为源寄存器的读操作指令。
放置这一指令的目的有时并不只是为了读取有用的数据,而是为了取消状态变化的硬件信号,以便顺利清除RBIF标志位,为下一次中断做好准备。
二是,由于端口PORTB 是引脚电子变化中断,即无论引脚出现上升沿还是下降沿都会产生中断请求,所以必须处理好不需要的虚假中断。
三是,一般都利用PIC单片机的引脚功能来检测按键,所以必须处理好按键消抖的问題。
2 引脚中断程序设计在主程序里先设置有关的寄存器。
◇设置TRISB寄存器,使RB7~RB4相关的引脚处于输入状态;◇如果需要弱上拉,通过OPTION_REG的第7位设置;◇RBIF=O;◇RBIE=1;◇GIF=1。
响应状态变化后的中断服务程序。
◇检查RBIF是否为l,为l则是引脚变化引起的中断;◇调用延时程序,延时20~30 ms,目的是为了按键去抖;◇判断是引脚出现上升沿还是下降沿引起的中断;◇调用按键处理程序;◇读PORTB口的值,取消状态变化的硬件信号;◇清除RBIF标志。
笔者认为上面程序设计最大的问题是在中断程序里调用延时程序。
大家知道,中档PIC 单片机只有8层深度的硬件堆栈,在中断里调用于程序出现极易堆栈溢出的情况。
另外,PIC单片机中断程序人口只有一个,在响应中断的请求时,PIC单片机就会自动把全局中断的使能位(INTCON的第7位GIF)清除,这样其他中断就暂时不能被响应(此时,如果别的中断发出的中断请求,标志位将一直保留着),直到这个中断程序退出后才会得到响应。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
void interrupt isr (void) { //中断服务函数写在这里 } void init_interrupt() { GIE=0; PEIE=1; IPEN=1; //TMR1IE=1; //TMR1IF=0; //TMR1IP=0;
少走弯路,PIC 单片机中断总结
PIC 单片机有多个中断源,16 系列只有一个中断入口,18 系列有两个中 断入口,不同编译器下书写格式又不大一样。网上资源千篇一律,也不够系 统,只是简单的罗列程序,代码生存的环境不一样也少有说明。在此做个简 单的总结,因为又走了弯路... 1.先说 18 系列(MCC18 编译器下): MPLAB C18 不自动把中断服务程序放在中端向量处。通常将 GOTO 指令 放在中断向量处,从而把控制权转交给相应中断服务程序。 void low_isr(void); void high_isr(void); *****************************低级中断入口及服务子程序 ********************ห้องสมุดไป่ตู้***************/ #pragma code low_vector=0x18//低优先级中断入口,转自 21ic 基础知识 void interrupt_at_low_vector(void) {
_asm GOTO high_isr _endasm } #pragma code #pragma interrupt high_isr void high_isr(void) { //高优先级中断服务函数写在这里 } 2.再说 18 系列(PICC18 编译器下): //void PIC18F_High_isr(void); //void PIC18F_Low_isr(void); *****************************低级中断服务子程序 ************************************/
#pragma interrupt lowlow_priority PIC18F_Low_isr void PIC18F_Low_isr (void) { //低优先级中断服务函数写在这里 } *****************************高级中断服务子程序 ************************************/ #pragma interrupt PIC18F_High_isr void PIC18F_High_isr (void) { //高优先级中断服务函数写在这里 } 3.三说 16 系列(PICC 编译器下)(只有一个中断入口,无所谓高了就):
//TMR1L=61; //T1CON=0xC7;//set up timer0 - 8bit -prescaler //TMR0IE=1; //TMR0IF=0; //TMR0IP=0; //TMR0L=61; //T0CON=0xC7;//set up timer0 - 8bit -prescaler 1:256 GIE=1; }
_asm GOTO low_isr _endasm } #pragma interrupt low_isr #pragma code void low_isr(void) { //低优先级中断服务函数写在这里 } *****************************高级中断入口及服务子程序 ************************************/ #pragma code high_vecotr=0x08//高优先级中断入口 void interrupt_at_high_vector(void) {