总结按键输入外部中断请求信号存在的问题与解决方法
- 格式:docx
- 大小:28.90 KB
- 文档页数:5
单片机外中断使用方面的问题及其解决方法在长期使用51 单片机的过程中,我们发现单片机在工业生产现场等干扰较强的环境工作时,有时确已产生定义为下降沿触发方式的外中断,然而用仪器测量已经送入单片机的INTX 引脚时,单片机却不能够正常响应中断。
在排除了可能由程序导致的问题之后,再检查CPU 的当前状态,发现中断级别、中断允许、中断触发方式也都表明应该响应中断。
后经分析及测试,发现是单片机INTX 引脚内部端口锁存器被置为零所致。
当端口被封锁为零时,从该引脚引入的下降沿表示的中断申请将丢失,中断当然不被响应。
由于程序中并未使用可将端口锁存器置为零的指令,且这种情况的产生具有一定的随机性,并非经常发生,所以认为这种现象可能是因电路干扰或噪声造成锁存器误动作导致的。
同时我们还认为这种误动作和P3 口的内部结构及操作方式有一定关系。
单片机外中断输入端的P3 口是具有第二变异功能的准双向口,其每一位的内部结构如图1 所示。
当变异功能输出为高电平时,位口是普通I/O 口。
此时如对I/O 口进行写操作,数据由内部总线写入锁存器,经与非门和MOS 管两次反相后送出引脚;如对I/O 口进行读操作,则必须先将锁存器置为1,使MOS 管截止,引脚被片内负载MOS 管(图中标为上拉电阻)上拉为高电平,然后可进行输入操作,当输入为低电平时它能被拉成低电平,引脚信息经两个缓冲器进入内总线;如果使用第二功能(变异功能),输入锁存器同样也必须先被置为1,这时引脚受变异功能输出控制,若需使用变异功能输入,则锁存器和变异输出必须同时置为1,使MOS 管截止,变异功能输入随引脚的变化而变化。
估计在第二功能时只能用于输入中断的P3.2 和P3.3 口,内部可能没有变异功能输出线,即使有,也只能上拉为固定的高电平。
可见,单片机P3口不管是通用I/O 口还是变异功能输入,其锁存器都必须先置为1。
单片机复位后所有I/O 口的状态都是1,一般在系统的初始化程序中定义过中断优先级,并在开中断之后单片机即可响应中断,此后若关掉相应中断允许位(置为0),则需从引脚进入单片机的中断有效信号(低电平或下降沿)虽然仍可进入并使IE0(或IE1)置为1,但不能引起中断,当然程序可查寻IE 了解中断源是否产生了中断申请。
单片机按键总结按键在电子设备中是一种常见的输入方式,其在单片机应用中具有重要的作用。
单片机按键的设计和使用对于产品的功能和用户体验具有直接影响。
本文将对单片机按键进行总结,包括按键的种类、连接方法以及常见的按键处理技术。
一、按键的种类在单片机应用中,按键的种类多种多样,常见的按键种类包括如下几种:1. 电子按键:电子按键是通过电容、电感或者电阻来实现的,通常具有体积小、响应速度快等优点。
常见的电子按键有触摸按键、滑动按键等。
2. 机械按键:机械按键是通过机械触点来实现的,具有手感好、寿命长等特点。
常见的机械按键有按钮开关、旋转开关等。
3. 光电按键:光电按键是通过光敏器件接收光信号来实现的,具有接触式触发、高灵敏度等特点。
常见的光电按键有红外遥控按键、光电开关等。
二、按键的连接方法单片机与按键之间的连接方式通常有两种:直接连接和矩阵连接。
1. 直接连接:直接连接是指每个按键与单片机的一个引脚直接相连。
这种连接方式简单、直观,但是需要消耗较多的IO口资源。
2. 矩阵连接:矩阵连接是指多个按键通过行列的方式连接到单片机的引脚上。
这种连接方式可以有效地节省IO口资源,但需要编写一定的扫描程序。
三、按键的处理技术在单片机中,按键的处理需要借助相应的技术手段,常见的按键处理技术包括如下几种:1. 常规轮询:常规轮询是指通过循环查询每个按键的状态,判断按键是否按下。
这种处理方式简单易懂,但是对CPU的占用较高。
2. 外部中断:外部中断是指按键触发时通过中断方式通知单片机进行处理。
这种处理方式可以有效地降低CPU的占用,提高系统的响应速度。
3. 硬件定时器:硬件定时器是通过定时器模块实现按键的扫描和检测。
这种处理方式可以减轻CPU的负担,提高按键的灵敏度。
4. 状态机方法:状态机方法是通过状态的转换来处理按键事件。
这种处理方式可以方便地处理多个按键的组合事件,提高系统的灵活性。
四、按键的应用案例1. 汽车遥控器:汽车遥控器通常使用红外遥控按键来实现对车辆的控制,通过单片机接收红外信号并解码,实现对车辆的开锁、上锁、寻车等功能。
单⽚机实验:外部中断按键实验内容:实验⼤致上就是说:按键不按的时候,灯⼀直亮,按键按下的时候,灯不亮,报警器响。
现在给了汇编语⾔,要改成c语⾔,并在proteus⾥⾯仿真。
思考与总结:响应中断请求的条件:1.总中断允许开关EA=1。
2.中断源的中断允许位为1。
3.中断源发出中断请求。
4.⽆同级或更⾼级中断正在被服务。
结合实验,就知道,这⾥跑到中断⼦程序的条件,⾸先总开关打开。
然后选择中断请求源,对这个实验来说,也就是选择I N T 0 ‾\overline{INT0}INT0外部中断请求0,它的中断允许控制位是E X 0 EX0EX0,我们置1后,就说明允许了外部中断0中断。
我们如果选⽤跳沿触发,⼀个机器周期采样到外部中断输⼊为⾼,下⼀个为低,那么中断请求触发器置⼀,这个时候进⼊中断⼦程序。
这个实验是电平触发。
cpu查询到中断请求时,就会进⾏中断响应(这⾥假设只是单⼀中断,如果有不同优先级的中断,那么cpu还要进⾏判断)。
硬件⽣成⼀个长调⽤指令并执⾏,程序转向中断⼊⼝地址,两个中断⼊⼝相隔8字节,难以放下中断⼦程序,此时需要⼀个跳转指令,转向在其他地址下的⼦程序中。
实验结果:汇编语⾔实现:ORG 0000hLJMP MAIN//主程序ORG 0003hLJMP INT0s//中断⼊⼝ORG 0100hMAIN: CLR IT0//外部中断请求0为电平触发SETB EA//总中断允许SETB EX0 //允许外部中断0LOOP: CLR P0.0//p0.0是低电平,此时灯亮SETB P2.3//p2.3是⾼电平,此时警报不响SJMP LOOP//短转移指令,程序跳到loop函数循环ORG 0200h//伪指令INT0s: SETB P0.0//p0.0是⾼电平,此时灯灭CLR P2.3//p2.3是低电平,此时警报响Delay: MOV R0,#200//延时函数D1: MOV R1,#254D2: DJNZ R1,D2DJNZ R0,D1RETIEND改成c51语⾔:#include<reg51.h>#define uchar unsigned charsbit key = P3^2;void delay(unsigned int i)//延时函数{unsigned int j;for(;i>0;i--)for(j=0;j<333;j++){}}void main()//主函数{EA=1;//总中断允许EX0=1;//允许外部中断0IT0=0;//选择外部中断0为电平触发⽅式while(1)//循环{P0=0xfe;}//P0.0⼝的Led亮}void key_scan() interrupt 0//外部中断0的中断服务函数{if(key==0)//判断是否有按键按下{delay(10);//延时去抖if(key==0){P2=0xf7;P0=0xff;while(!key);//等待按键松开P2=0xff;P0=0xfe; }}}proteus仿真:。
按键和中断1.8.1.什么是按键1.8.1.1、按键的物理特性(1)、平时没⼈按的时候,弹簧把按键按钮弹开。
此时内部断开的。
(2)、有⼈按下的时候,⼿的⼒量克服弹簧的弹⼒,将按钮按下,此时内部保持接通(闭合)状态;如果⼿拿开,则弹簧作⽤下按钮⼜弹开,同时内部⼜断开。
(3)、⼀般的按键都有4个引脚,这4个引脚成2对:其中⼀对是常开触点(像上⾯描述的不按则断开,按下则闭合);⼀对是常闭触点(平时不按时是闭合的,按下后是断开的)1.8.1.2、按键的电学原理(结合原理图分析)(1)硬件接法: SW5:GPH0_2 SW6:GPH0_3 SW78910:GPH2_0123(2)按键的电路连接分析:平时按钮没有按下时,按钮内部断开,GPIO引脚处电压为⾼电平;当有⼈按下按钮时,按钮内部导通,外部VDD 经过电阻和按钮连接到地,形成回路,此时GPIO引脚处电压就变成了低电平。
此时VDD电压全部分压在了电阻上(这个电阻就叫分压电阻,这个电阻不能太⼩,因为电阻的功率是U*U/R)(3)总结:按键的⼯作⽅法:其实就是按键的按下与弹开,分别对应GPIO的两种电平状态(按下则GPIO为低电平,弹开则GPIO为⾼电平)。
此时SoC内部可以通过检测这个GPIO的电平⾼低来判断按键有没有被按下,这个判断结果即可作为SoC的输⼊信号。
1.8.1.3、按键属于输⼊类设备(1)按键⼀般⽤来做输⼊设备(由⼈向SoC发送信息的设备,叫输⼊设备),由⼈向SoC发送按键信号(按键信号有2种:按下信号和弹开信号)。
(2)有些设备就是单纯的输⼊设备,譬如按键、触摸屏等;有些设备就是单纯的输出设备,譬如LCD;还有⼀些设备是既能输⼊⼜能输出的,叫输⼊输出设备(IO),譬如串⼝。
1.8.1.4、按键的2种响应⽅法(1)SoC处理按键有2种思路:轮询⽅式和中断⽅式。
(2)轮询⽅式,就是SoC主动的每隔⼀段时间去读取(按键所对应的)GPIO的电平⾼低,以此获得按键信息;缺点在于CPU要⼀直注意按键事件,会影响CPU做其他事情。
计算机原理与应用实验实验名称:外部中断实验学院:信息与通信工程学院班级:2017211113姓名:***学号:**********同组成员姓名:李凝同组成员学号:**********一、实验目的1. 掌握NVIC 中断优先级配置。
2. 学会外部中断配置。
二、实验原理及内容(一)实验原理电路结构如图3.1 所示1. NVIC 中断优先级NVIC 是嵌套向量中断控制器,控制着整个芯片中断相关的功能,它跟内核紧密耦合,是内核里面的一个外设。
但是各个芯片厂商在设计芯片的时候会对Cortex-M4 内核里面的NVIC 进行裁剪,把不需要的部分去掉,所以说STM32 的NVIC 是Cortex-M4 的NVIC 的一个子集。
CM4 内核可以支持256个中断,包括16个内核中断和240个外部中断,256 级的可编程中断设置。
对于STM32F4 没有用到CM4 内核的所有东西,只是用到了一部分,对于STM32F40 和41 系列共有92个中断,其中有10个内核中断和82个可屏蔽中断,常用的为82个可屏蔽中断。
ISER[8]—中断使能寄存器组,用来使能中断,每一位控制一个中断,由于上面已经说明了控制82 个可屏蔽的中断,因此利用ISER[0~2]这三个32 位寄存器就够了。
一下的几个寄存器同理。
ICER[8]—中断除能寄存器组,用来消除中断。
ISPR[8]—中断挂起控制寄存器组,用来挂起中断。
ICPR[8]—中断解挂控制寄存器组,用来解除挂起。
IABR[8]—中断激活标志寄存器组,对应位如果为1 则表示中断正在被执行。
IP[240]—中断优先级控制寄存器组,它是用来设置中断优先级的。
我们只用到了IP[0]~IP[81],每个寄存器只用到了高4 位,这4 位又用来设置抢占优先级和响应优先级(有关抢占优先级和响应优先级后面会介绍到),而对于抢占优先级和响应优先级各占多少位则由AIRCR 寄存器控制,相关设置如表 3.1 所示。
单片机的延时与中断问题及解决方法单片机的延时是指单片机在执行程序时,暂停一段时间,等待某个事件的发生或完成。
通常,延时常常是用于实现各种功能的操作,例如指示灯闪烁、发声器发出声音、读取传感器数据等等。
单片机的延时通常会由于外部因素产生不同的影响,因此需要根据实际需求选择合适的延时控制方式。
单片机的中断是指单片机由于外部因素或内部因素而暂停当前任务去响应其他事件的过程。
中断机制在单片机中发挥着重要的作用,它可以提高单片机的效率和准确性,同时提供实现多任务系统、异步事件处理等功能的能力。
因此,对于单片机开发人员来说,掌握中断机制的原理和应用是非常重要的。
在单片机的设计和开发过程中,延时和中断机制是必不可少的技术手段。
下面我们将详细介绍单片机的延时和中断机制,并提供一些解决方法供读者借鉴。
1、软件延时单片机的软件延时是通过控制程序执行的步骤和时间来实现的。
常用的方法有循环延时、定时器延时和误差修正延时。
(1)循环延时循环延时是利用循环语句进行延时的方法。
通常使用for循环语句,循环次数由延时的时间和单片机的主频决定。
例如,下面的代码可以实现一个大约1s的延时:for(int i=0;i<30000;i++){for(int j=0;j<100;j++);}这段代码主要是通过两个for循环语句来实现的。
外层的循环让程序执行30000次,内层的循环则是让其每循环一次暂停100微秒。
根据微秒数的定义以及单片机时钟周期的计算,可以计算出程序运行了大约1s的时间。
虽然循环延时是一种简单有效的方法,但存在延时不准确、占用CPU时间长等问题,所以只建议在简单应用场景中使用。
(2)定时器延时void timer_delay(void){T0CTL = 0x80; //打开定时器0T0CLK = 2; //选择定时器时钟源T0CNTL = 0; //定时器计数器清零while(T0CNTL<245); //循环等待计数器溢出T0CTL = 0; //关闭定时器0}在这段代码中,定时器0的中断服务程序是利用T0中断的机制实现的。
单片机的延时与中断问题及解决方法9篇第1篇示例:单片机的延时与中断问题及解决方法在单片机的开发中,延时和中断是两个非常重要的问题。
延时是指在程序中需要暂停一段时间执行某些操作,而中断是指程序执行到一定的条件时需要立即转到另一个程序或者执行一些指定的操作。
这两个问题的处理直接影响到单片机的性能和稳定性。
延时问题是指在单片机程序中需要暂停一段时间执行某些操作。
延时的实现方法有很多种,一般情况下可以通过循环计数、定时器计数等方式来实现。
在单片机的开发中,延时的准确性和稳定性是非常重要的,不合适的延时会导致程序执行不稳定,或者无法达到所需的效果。
在单片机中,延时的实现方法有多种,常见的有软件延时、硬件延时和定时器延时。
软件延时是通过循环计数来实现的,这种方法简单易用,但是延时时间不够精确,而且延时期间单片机无法执行其他任务。
硬件延时是通过外部电路或器件来实现的,这种方法延时准确性比较高,但是需要外部器件的支持,且往往比较复杂。
定时器延时是利用单片机内部的定时器来实现的,这种方法不仅延时准确性高,而且可以同时执行其他任务,是一种比较理想的延时方法。
对于中断问题,中断是指程序执行到一定条件时需要立即转到另一个程序或者执行一些指定的操作。
中断可以分为外部中断和定时器中断,外部中断是指外部硬件信号引起的中断,而定时器中断是指定时器计数到达一定值引起的中断。
处理中断问题需要注意中断优先级的设置和中断服务程序的编写。
中断优先级的设置是指在多个中断同时发生时,系统根据一定的规则来确定哪个中断优先级更高,应先处理。
中断服务程序的编写是指在中断发生时,系统要执行哪些操作。
合理的中断处理可以提高单片机的性能和稳定性。
单片机中断的实现方式有多种,常见的有软件中断和硬件中断。
软件中断是通过程序来实现的,这种中断的响应速度较慢,适合处理一些不需要立即执行的任务。
硬件中断是通过外部硬件信号来触发的,这种中断的响应速度很快,适合处理一些需要立即执行的任务。
单片机的延时与中断问题及解决方法单片机作为嵌入式系统中非常重要的组成部分,在许多应用中都需要进行延时和中断处理。
延时和中断是单片机中常见的问题,它们直接关系到系统的稳定性和性能。
本文将重点介绍单片机中延时和中断的问题,并提出解决方法。
一、延时问题延时是指在程序执行过程中需要暂停一段时间,以便等待某些条件满足或者执行某些特定的操作。
在单片机中,延时通常需要通过软件实现,也就是在程序中加入延时函数。
常见的延时函数包括循环延时和定时器延时。
1. 循环延时循环延时是指通过循环来实现延时的方式。
具体做法是在程序中使用一个循环来反复执行空操作,从而消耗一定的时间。
下面是一个简单的循环延时函数:```cvoid delay(unsigned int ms){unsigned int i, j;for(i = 0; i < ms; i++)for(j = 0; j < 1000; j++);}```这个函数中,外层循环控制延时的毫秒数,内层循环则是用来消耗时间的。
通过这样的方式可以实现一定量级的延时。
循环延时的精度和稳定性都不够理想,特别是在频繁调用的情况下,容易导致系统性能下降。
2. 定时器延时定时器是单片机中常见的外设之一,它可以生成精确的时间延时。
通过设置定时器的时钟源和计数值,可以实现微秒级甚至更小单位的延时。
在单片机中,通常会使用定时器来实现较为精确的延时操作。
下面是一个使用定时器来实现延时的示例:```cvoid delay_us(unsigned int us){TMOD = 0x01; // 设置定时器为工作方式1TH0 = 0xFF - us / 256; // 设置定时器初值TL0 = 0xFF - us % 256; // 设置定时器初值TR0 = 1; // 启动定时器while(!TF0); // 等待定时器溢出TR0 = 0; // 停止定时器TF0 = 0; // 清除溢出标志}```这段代码中,我们使用定时器0来实现微秒级的延时操作。
51单片机串口通讯与串口中断常见问题解决方案
51单片机串口通讯与串口中断常见问题解决方案
一、深入了解字符串的问题
char str11[]="a";
P1=strlen(str11);
上面的一个是一个测试字符个数的实例,用仿真就可以看到结果。
结果是1。
也就是说字符’’是不会被计入的。
那么我们就可以通过此函数来分辩是否是字符和字符串。
当然如果字符串是一个字符的话,那么就是我们上面的那个情况了,会直接被当做一个数看待。
注:上位机发过来的数据全部是字符串格式的。
二、串口中断问题
先看下面的程序。
void UART_SendByte(unsigned char dat)
{
SBUF=dat;
while(!TI) ;//等待发送完毕
TI=0;
}
这个程序就是一个简单的串口发送字符的程序,为了能够实现自动发送和接收,我们分析一下它。
我们要同时实现接收,有接收那么就要有串口中断,通过串口中断达到接收数据的目的。
可是当ES=1,程序并不会像我们想的那样运行,当执行完SBUF=dat后,程序开始等待,大概是5个时钟周期后,程序并没有直接运行TI=0这句,而是,因为缓冲区中的字符而直接跳转到串口中断函数中,甚至出现死循环这样的情况。
为了避开这种情况,我们引入了下面的程序:
void UART_SendByte(unsigned char dat)
{
SBUF=dat;
ES=0; while(!TI) ; TI=0;。
计算机原理与应用实验实验名称:外部中断实验学院:信息与通信工程学院班级:2017211113姓名:***学号:**********同组成员姓名:李凝同组成员学号:**********一、实验目的1. 掌握NVIC 中断优先级配置。
2. 学会外部中断配置。
二、实验原理及内容(一)实验原理电路结构如图3.1 所示1. NVIC 中断优先级NVIC 是嵌套向量中断控制器,控制着整个芯片中断相关的功能,它跟内核紧密耦合,是内核里面的一个外设。
但是各个芯片厂商在设计芯片的时候会对Cortex-M4 内核里面的NVIC 进行裁剪,把不需要的部分去掉,所以说STM32 的NVIC 是Cortex-M4 的NVIC 的一个子集。
CM4 内核可以支持256个中断,包括16个内核中断和240个外部中断,256 级的可编程中断设置。
对于STM32F4 没有用到CM4 内核的所有东西,只是用到了一部分,对于STM32F40 和41 系列共有92个中断,其中有10个内核中断和82个可屏蔽中断,常用的为82个可屏蔽中断。
ISER[8]—中断使能寄存器组,用来使能中断,每一位控制一个中断,由于上面已经说明了控制82 个可屏蔽的中断,因此利用ISER[0~2]这三个32 位寄存器就够了。
一下的几个寄存器同理。
ICER[8]—中断除能寄存器组,用来消除中断。
ISPR[8]—中断挂起控制寄存器组,用来挂起中断。
ICPR[8]—中断解挂控制寄存器组,用来解除挂起。
IABR[8]—中断激活标志寄存器组,对应位如果为1 则表示中断正在被执行。
IP[240]—中断优先级控制寄存器组,它是用来设置中断优先级的。
我们只用到了IP[0]~IP[81],每个寄存器只用到了高4 位,这4 位又用来设置抢占优先级和响应优先级(有关抢占优先级和响应优先级后面会介绍到),而对于抢占优先级和响应优先级各占多少位则由AIRCR 寄存器控制,相关设置如表 3.1 所示。
KeilC51学习4按键外部中断主板介绍:P3^2~P^5为四个按键;P1^0~P1^7为8个LED灯#include "reg52.h"//此⽂件中定义了单⽚机的⼀些特殊功能寄存器typedef unsigned int uint; //对数据类型进⾏声明定义typedef unsigned char u8;sbit k1=P3^5; //定义P31⼝是k1sbit led=P1^0; //定义P10⼝是led/******************************************************************************** 函数名 : delay* 函数功能 : 晶振11.0592M延时函数*******************************************************************************/void delay(uint z){uint i,j;for(j=z;j>0;j--)for(i=112;i>0;i--);}/******************************************************************************** 函数名 : keypros* 函数功能 : 按键处理函数,判断按键K1是否按下*******************************************************************************/void keypros(){if(k1==0){delay(50);if(k1==0) //再次判断按键是否按下led=~led; //led状态取反}while(!k1); //检测按键是否松开}/******************************************************************************** 函数名 : main* 函数功能 : 主函数* 输⼊ : ⽆* 输出 : ⽆*******************************************************************************/void main(){while(1){keypros(); //按键处理函数}}按键取反灯亮或灭计数器(计数器0⽤P3^4按钮,计数器1⽤P3^5按钮,不懂)/*-----------------------------------------------名称:计数器0论坛:编写:shifang⽇期:2009.5修改:⽆内容:通过外部按键计数进⼊中断执⾏LED取反------------------------------------------------*/#include<reg52.h> //包含头⽂件,⼀般情况不需要改动,头⽂件包含特殊功能寄存器的定义sbit LED=P1^0; //定义LED端⼝/*------------------------------------------------定时器初始化⼦程序(按钮P3^4控制,不知为什么)------------------------------------------------*/void Init_Timer0(void){TMOD |= 0x01 | 0x04; //使⽤模式1,16位计数器,使⽤"|"符号可以在使⽤多个定时器时不受影响TH0=0xFF; //给定初值TL0=245; //从245计数到255EA=1; //总中断打开ET0=1; //定时器中断打开}/*------------------------------------------------主程序------------------------------------------------*/main(){Init_Timer0();while(1);}/*------------------------------------------------定时器中断⼦程序------------------------------------------------*/void Timer0_isr(void) interrupt 1using1{TH0=0xFF; //重新给定初值TL0=245;LED=~LED; //指⽰灯反相,可以看到闪烁}计数器0/*-----------------------------------------------名称:计数器1论坛:编写:shifang⽇期:2009.5修改:⽆内容:通过外部按键计数进⼊中断执⾏LED取反------------------------------------------------*/#include<reg52.h> //包含头⽂件,⼀般情况不需要改动,头⽂件包含特殊功能寄存器的定义sbit LED=P1^0; //定义LED端⼝/*------------------------------------------------定时器初始化⼦程序------------------------------------------------*/void Init_Timer1(void){TMOD |= 0x10 | 0x40; //使⽤模式1,16位计数器,使⽤"|"符号可以在使⽤多个定时器时不受影响TH1=0xFF; //给定初值TL1=245; //从245计数到255EA=1; //总中断打开ET1=1; //定时器中断打开TR1=1; //定时器开关打开}/*------------------------------------------------主程序------------------------------------------------*/main(){Init_Timer1();while(1);}/*------------------------------------------------定时器中断⼦程序------------------------------------------------*/void Timer1_isr(void) interrupt 3{TH1=0xFF; //重新给定初值TL1=245;LED=~LED; //指⽰灯反相,可以看到闪烁}计数器1中断定义:当机器正在执⾏程序的过程中,⼀旦遇到⼀些异常或者特殊请求时,停⽌正在执⾏的程序转⼊必要的处理,处理完毕后,⽴即返回断点继续执⾏。
S T C 15单片机外部中断的特点及应用研究*刘宝成(内蒙古民族大学工学院,通辽028043)*基金项目:内蒙古自治区高等学校科学研究项目 无线电波充电技术的研究(N J Z Y 17202);内蒙古民族大学教育教学研究课题 实践教学的综合改革与实践的研究(Y B 2017008)㊂摘要:外部中断在单片机应用系统中经常用于系统故障处理㊁采集数据的处理㊁人机交互的键盘输入以及通过按键唤醒单片机退出掉电工作模式等工作场景㊂S T C 15系列单片机外部中断0㊁外部中断1增加了上升沿或下降沿均可触发中断的新特性,这种新特性在使用时如果不加以注意可能会使中断服务程序重复执行两次,导致程序出错,尤其是在采集数据的处理㊁人机交互的键盘输入等应用场合埋下隐患㊂通过对使用S T C 15系列单片机的外部中断0㊁外部中断1的实例分析,给出解决方案㊂对使用S T C 15系列单片机进行系统设计,尤其是对原来使用S T C 89系列等通用51单片机的系统进行硬件升级后的软件移植具有重要指导意义和参考价值㊂关键词:S T C 15;单片机;外部中断;A D C中图分类号:T P 368.1 文献标识码:AR e s e a r c h o n C h a r a c t e r i s t i c s a n d A p p l i c a t i o n o f E x t e r n a l I n t e r r u pt o n S T C 15M C U L i u B a o c h e n g(C o l l e g e o f E n g i n e e r i n g ,I n n e r M o n g o l i a U n i v e r s i t y f o r N a t i o n a l i t i e s ,T o n gl i a o 028043,C h i n a )A b s t r a c t :E x t e r n a l i n t e r r u p t i s t y p i c a l l y u s e d i n s y s t e m f a u l t p r o c e s s i n g ,d a t a a c q u i s i t i o n ,k e y b o a r d i n p u t a n d w a k e -u p s i n g l e -c h i p mi c r o -c o m p u t e r t o q u i t p o w e r -o f f m o d e .T h e e x t e r n a l i n t e r r u p t 0a n d e x t e r n a l i n t e r r u pt 1o f S T C 15s e r i e s M C U a d d a n e w f e a t u r e t h a t t h e i n -t e r r u p t c a n b e t r i g g e r e d b y t h e r i s i n g e d g e o r f a l l i n g e d g e .I f t h e u s e r d o e s n o t p a y m u c h a t t e n t i o n t o t h i s f e a t u r e ,i t m a y ca u s e t h e i n t e r -r u p t s e r v i c e p r o g r a m t ob e e x ec u t ed t w i ce ,w h i c h w i l l l e a d t o a p r o g r a m e r r o r .T h i s k i n d of n e w f e a t u r e w i l l h a v e a n u n d e r l y i ng pr o b l e m i n t h e a p p l i c a t i o n o f d a t a a c q u i s i t i o n p r o c e s s i n g ,k e y b o a r d i n p u t o f h u m a n -c o m p u t e r i n t e r a c t i o n a n d o t h e r a p p l i c a t i o n s .T h e e x a m pl e s o f e x t e r n a l i n t e r r u p t 0a n d e x t e r n a l i n t e r r u p t 1o f S T C 15s e r i e s M C U a r e d i s c u s s e d i n t h i s p a p e r ,t h e s o l u t i o n s a r e g i v e n .T h e s t u d y o f t h i s p a p e r h a s i m p o r t a n t g u i d i n g s i g n i f i c a n c e a n d r e f e r e n c e v a l u e f o r t h e s y s t e m d e s i g n e d b y S T C 15s e r i e s M C U ,e s p e c i a l l yt h e s o f t w a r e t r a n s -p l a n t a t i o n a f t e r a h a r d w a r e u p g r a d e o f t h e o r i g i n a l s y s t e m u s e d S T C 89s e r i e s a n d o t h e r g e n e r a l -p u r p o s e M C S 51s i n g l e -c h i p m i c r o c o m pu t e r .K e yw o r d s :S T C 15;M C U ;e x t e r n a l i n t e r r u p t ;A D C 0 引 言中断系统是单片机的重要组成部分,一般包括定时/计数器中断㊁串行口中断㊁外部中断等[1]㊂中断的使用提高了单片机系统的数据处理效率,因此在单片机中得到了广泛的应用[2]㊂外部中断在单片机应用系统中经常用于故障中断㊁A /D 转换数据处理等实时性要求很高的操作中㊂笔者从事51单片机的教学工作多年,过去在学生实验中使用S T C 89系列单片机,也使用S T C 89系列单片机及A T 89系列单片机进行过一些电子装置的设计,都很顺利㊂最近,在调试一个使用S T C 15F 2K 60S 2单片机的外部中断0和外部中断1的中断实验中遇到了一个奇怪的问题:中断服务程序总是被执行两次㊂仔细分析实验程序,没有发现任何问题,事实上该实验程序在S T C 89C 52R C 上执行也没有任何问题,曾一度使笔者陷入迷惑㊂1 外部中断实验1.1 外部中断实验设计外部中断实验是教学中为了演示单片机外部中断特性和中断优先级而设计的,软㊁硬件思路是:主程序循环点亮接在P 1.0~P 1.3的4个L E D 发光二极管,点亮时间间隔约1s ;两个按键分别接在单片机的两个外部中断引脚I N T 0和I N T 1上,按键按下为低电平,触发相应外部中断进而执行相应外部中断服务程序;外部中断0的服务程序使接在P 1.6上的L E D 发光二极管点亮约5s,外部中断1的服务程序使接在P 1.7上的L E D 发光二极管点亮约10s㊂电路原理图如图1所示㊂图1 外部中断实验电路原理图1.2 实验现象及存在问题为了突出S T C 15系列单片机同S T C 89系列单片机及其他通用M C S 51兼容单片机外部中断0和外部中断1的主要区别,下面的实验仅描述外部中断0和外部中断1单独中断的现象㊂实验程序如图2所示,其中图2(a )㊁图2(b )㊁图2(c)分别是实验主程序㊁外部中断0服务程序㊁外部中断1服务程序,这三个程序对于S T C 89C 52R C 和S T C 15F 2K 60S 2是一样的㊂由于S T C 15系列单片机是1T 单片机,S T C 89系列单片机是12T 单片机,因此实现相同延时时间的延时子程序不一样,S T C 89C 52R C 的延时子程序如图2(d )所示,S T C 15F 2K 60S 2的延时子程序如图2(e)所示㊂图2 外部中断实验汇编源程序把汇编好的单片机程序分别下载到S T C 89C 52R C 和S T C 15F 2K 60S 2单片机中,接在P 1.0~P 1.3的L E D 按约1s 的时间间隔逐个点亮并周而复始地循环,说明下载到两个单片机里的延时程序的延时时间是正确的㊂分别单独按下I N T 0所接按键K 1和I N T 1所接按键K 2,均能正常中断主程序的执行,但两种单片机中断服务程序的执行时间不同,S T C 15F 2K 60S 2的执行时间约为S T C 89C 52R C 执行时间的2倍,即S T C 89C 52R C 的中断现象是正常的,S T C 15F 2K 60S 2的中断现象不对,似乎重复执行了两遍中断服务程序㊂仔细分析两种单片机的实验程序,在两个外部中断服务程序里均通过切换工作寄存器组的方法对主程序和中断服务程序共同使用的延时程序里的R 3㊁R 4㊁R 5进行了切换,不存在资源冲突的情况,同时S T C 15F 2K 60S 2单片机的延时子程序在主程序中调用的延时时间是正确的,而同样的中断服务程序在S T C 89C 52R C 又是正常的㊂那么唯一的可能就是S T C 15F 2K 60S 2和S T C 89C 52R C 的中断特性不一样㊂2 S T C 15系列单片机中断特性S T C 15系列和S T C 89系列单片机都是M C S 51的兼容单片机,只不过S T C 15系列单片机是1T 单片机,S T C 89系列单片机是12T 单片机,容易让人想当然地认为除了软件执行速度不同外,其他都是一样的㊂这种惯性思维方式一度使上述问题的分析陷入了困境,甚至怀疑是不是S T C 15F 2K 60S 2单片机存在B U G ㊂通过仔细阅读S T C 15系列单片机的数据手册才发现S T C 15系列单片机外部中断0和外部中断1的触发方式已经不再是低电平和下降沿两种通常所用的触发方式,而是变成了下降沿+上升沿和下降沿两种触发方式[3-4]㊂默认的触发方式为下降沿+上升沿触发,也就是说下降沿或者上升沿都可以触发中断㊂为了验证是不是由于这种新的触发方式引起的上述问题,将触发方式设置为单一的下降沿触发,发现进入中断后点亮L E D 发光二极管的时间正确了,也就是说确实是这种新的触发特性导致的㊂2.1 S T C 15系列单片机外部中断新的触发方式对比分析51单片机外部中断0或1的触发方式是由特殊功能寄存器T C O N 中的I T 0或I T 1进行设置,单片机上电复位后T C O N 的复位值是00H ,即对于普通51单片机来说外部中断0或1的触发方式是低电平触发,对于S T C 15系列单片机来说外部中断0或1的触发方式是下降沿+上升沿触发㊂在上面的实验中,按键从按下到释放需要的时间一般在0.1~0.3s 之间,而上述中断服务程序的执行时间约为5s 或10s,即中断服务程序的执行时间远远大于按键的操作时间,当中断服务程序执行完,按键早已经释放,对应的中断引脚电平已经恢复为高电平㊂I T 0或I T 1为0时,对应普通51单片机而言,外部中断0或1是低电平触发方式,按键按下单片机执行相应外部中断服务程序,当外部中断服务程序执行完,按键已经释放,单片机不会再次进入中断㊂而对于S T C 15系列单片机来说,为什么按键早已释放还会再次进入中断呢?只有一种解释,那就是S T C 15系列单片机对按键释放时的上升沿做了记忆㊂推测S T C 15系列单片机对I T x (x 取0或1)为0时外部中断的执行过程如下:当按下按键时,外部中断0或1的引脚上出现下降沿,置位I E x (x 取0或1),在允许中断的情况下C P U 响应该中断,内部生成一条长调用指令(L C A L L )转到相应的中断入口地址执行相应的中断服务程序,与此同时清除置位的I E x (x 取0或1)外部中断请求标志位;当按键释放时,外部中断0或1的引脚上出现上升沿,再次置位I E x (x 取0或1),此时单片机正在执行中断服务程序,待中断服务程序执行完返回主程序后,由于I E x (x 取0或1)置位导致单片机再次进入中断㊂如果真的是这样的过程,对于采用这种触发方式进行按键处理和A /D转换数据处理时就会带来致命错误,尤其是对从S T C 89系列或其他普通51单片机移植过来的程序来说,这种错误更容易发生,必须引起足够重视㊂图3 判断I E 0在进入中断服务程序后的状态2.2 S T C 15系列单片机下降沿+上升沿触发方式验证为了弄清楚S T C 15系列单片机外部中断0或1的下降沿+上升沿触发方式的操作机理,特设计下面实验进行验证㊂2.2.1 中断请求标志位在进入中断时是否被清零以外部中断0为例进行说明㊂在开总中断和允许外部中断0中断的情况下,当外部中断0满足中断条件时,I E 0被置1向C P U 申请中断,C P U 响应该中断后把I E 0清0并生成一条长调用指令转到外部中断0的矢量地址0003H 去执行程序㊂由于I E 0是内部信号,故设计图3所示程序,以判断I E 0在进入中断服务程序后的状态㊂仍然沿用图1所示电路,把图3中程序汇编后下载到S T C 15F 2K 60S 2单片机中,按下接外部中断0引脚的K 1按键,可以发现在K 1按键按下的同时P 1.0所接的L E D 点亮,说明在进入中断服务程序后I E 0已经被清0㊂2.2.2 下降沿之后的上升沿是否被记忆在上述实验中已经验证I E 0在进入中断服务程序后被清0,但并不能说明按键释放后I E 0是否又被置1,从而再次进入中断服务程序㊂为此又设计如图4(a )所示程序进行实验,延时程序D E L A Y 1000M S 同图2(e)㊂图4 判断下降沿之后上升沿是否置位I E 0实验程序同样把图4(a )所示程序汇编后下载到S T C 15F 2K 60S 2单片机中,按下就马上松开接外部中断0引脚的K 1按键,观察到的现象是:接在P 1.0上的L E D 先是点亮约1s,然后熄灭1s ,接着又再次点亮㊂这个实验现象说明当按键按下后单片机进入中断服务程序,且I E 0是被清0的,由于按键按下后马上就松开了,这个过程的时间小于中断服务程序的执行时间,在中断服务程序的第一个1s 延时后再去读I E 0,此时I E 0又被置1了,这就是实验现象中L E D 先点亮约1s ,然后熄灭1s 的原因㊂接下来L E D 又再次点亮说明单片机中断返回后马上又再次进入中断㊂即S T C 15F 2K 60S 2单片机的外部中断0在下降沿触发中断后还能记忆上升沿的触发标志㊂为进一步验证该现象又设计了如图4(b )所示的程序,把这个程序汇编后下载到单片机中,按下并立即释放按键K 1发现接在P 1.0的发光二极管D 1在按下按键K 1的同时熄灭了,然后发光二极管D 1马上又点亮的同时接在P 1.1的发光二极管D 2熄灭了㊂延长按键按下的持续时间,可以清楚地发现:在按键K 1按下的同时,发光二极管D 1开始点亮并持续到按键K 1释放;按键K 1释放的同时,发光二极管D 1熄灭,而发光二极管D 2点亮㊂用S T C 15F 2K 60S 2单片机的外部中断1重复实验,实验现象与此相同㊂此实验现象充分说明S T C 15F 2K 60S 2单片机的外部中断0和外部中断1在下降沿触发中断后还能记忆上升沿的触发标志㊂用类似的方法也可以验证S T C 15F 2K 60S 2单片机的外部中断0和外部中断1在上升沿触发中断后也能记忆下降沿的触发标志,这里不再赘述㊂3 S T C 15系列单片机下降沿+上升沿触发方式的应用及注意事项S T C 15系列单片机外部中断0和外部中断1在单片机上电复位后的默认触发方式是下降沿+上升沿触发方式㊂由于S T C 15系列单片机外部中断0和外部中断1对下降沿和上升沿均能触发中断并能对下降沿(上升沿)随后的上升沿(下降沿)触发信号记忆,在使用时需要注意以下事项㊂3.1 用于键盘中断由于S T C 15系列单片机外部中断0和外部中断1的上述新特性,在触发中断后并不能区分是下降沿还是上升沿触发的中断,而且还会对下降沿(上升沿)随后的上升沿(下降沿)触发信号记忆㊂而普通51单片机在上电复位后的外部中断的默认触发方式是低电平触发,这种触发方式是每个机器周期都去采样外部中断引脚上的电平信号,但并不对该信号做记忆,当单片机正在执行该外部中断服务程序或其他同优先级/高优先级中断服务程序时,即使采样到低电平信号,也不会置位相应中断标志位,而是直接丢弃该中断申请,只有在中断返回后采样到外部中断引脚上的低电平信号,才会置位相应中断标志位㊁向C P U 申请中断㊂因此在普通51单片机中只要在中断服务程序返回前外部引脚上的低电平信号消失,就不会引发二次中断㊂因此,在键盘中断应用中使用S T C 15系列单片机外部中断0或外部中断1将会出现按键按下时进入中断,执行一次中断服务程序,在按键释放时还会进入中断,并再次执行中断服务程序㊂因此在键盘中断应用中如果不能很好考虑到这种触发特性,将导致键码或按键功能被识别或执行两次,从而引起系统功能错误㊂这种错误经常发生在由普通51单片机改型为S T C 15系列单片机的使用者身上,可以在这类应用中将特殊功能寄存器T C O N 中的I T x (x 取0或1)设置为1,即使用外部中断的下降沿触发方式㊂3.2 用于A /D 转换的数据处理许多A D C 芯片具有转换结束输出信号E O C ,如A D C 0809㊁T L C 2543等,常把该信号接到单片机的外部中断引脚,以便于及时对采样到的数据进行处理㊂以A D C 0809为例,一般是把E O C 信号经非门接到单片机的外部中断引脚,假设接到外部中断0引脚[5-6]㊂如果使用S T C 15系列单片机的默认触发方式,就会出现在A D C 开始转换和A D C 转换结束分别进入中断,进行两次数据处理,如果是直接使用单次转换结果还比较容易发现错误,可是如果在数据处理上使用了一些滤波算法就不容易发现该错误㊂因此千万不要认为S T C 15单片机外部中断0和外部中断1的默认触发是下降沿或者上升沿都可以,而没有深入认识到这种单片机外部中断触发特性的真正机理,就直接使用这种默认触发模式,会给系统调试带来困难㊂在这类应用中也推荐将特殊功能寄存器T C O N 中的I T x (x 取0或1)设置为1,使用外部中断的下降沿触发方式㊂3.3 用于单片机低功耗模式唤醒S T C 15系列单片机外部中断0和外部中断1的下降沿+上升沿触发方式特别适合于单片机低功耗省电模式的唤醒,在外部中断0或外部中断1的引脚上无论出现下降沿还是上升沿,都能把单片机从掉电模式或空闲模式唤醒㊂外部中断0或外部中断1引脚上的信号可以由按键动作给出,也可以是其他系统给出的下降沿或上升沿信号,还可以由串行通信信号给出,特别适合于需要上升沿唤醒单片机掉电模式的应用场景㊂3.4 用于正负脉冲宽度及矩形波周期的测量普通的51单片机通过定时/计数器的门控位可以直接进行正脉冲宽度的测量,如果要对一个矩形波的周期或负脉冲进行测量,一般需要外加硬件电路才能实现㊂由于S T C 15系列单片机外部中断0和外部中断1在I T x (x 取0或1)置0的模式下,可以由上升沿或下降沿触发新特性,再结合定时/计数器的门控位,使用定时器应该可以对输入的矩形波进行正脉冲和负脉冲宽度以及周期的测量㊂这里不做展开,留待后续的应用中进行深入探讨㊂4 结 语S T C 15系列单片机外部中断0和外部中断1的默认下降沿+上升沿触发方式是一种全新的触发方式,与普通51单片机外部中断0和外部中断1默认触发方式存在较大差异,通过几个实验程序对S T C 15系列单片机外部中断触发新特性的执行机理进行了分析和验证㊂S T C 15系列单片机的这种新特性可以较好地应用于单片机掉电模式的唤醒,但也会让熟悉普通51单片机的使用者先入为主地认为S T C 15系列单片机只是多了一种上升沿触发方式,使程序设计出现一种隐性错误㊂通过文中的分析可以清楚了解到S T C 15系列单片机的外部中断0和外部中断1的默认触发方式可以对下降沿(或上升沿)随后的上升沿(或下降沿)进行记忆,对于键盘中断㊁A /D 转换中断等的处理上会使中断服务程序执行两次,导致结果出错㊂文中的分析与讨论对于新接触S T C 15系列单片机或经常使用普通51单片机的人来说具有很好的指导意义,对于从普通51单片机升级到S T C 15系列单片机的系统移植也具有参考意义㊂对S T C 15系列单片机这种新特性的具体应用给出了参考思路,在后续的研究中再进行深入探讨㊂参考文献[1]张毅刚,赵光权,刘旺.单片机原理及应用[M ].3版.北京:高等教育出版社,2016:12.[2]马淑华,王凤文,张美金.单片机原理与接口技术[M ].2版.北京:北京邮电大学出版社,2011:146147.[3]江苏国芯科技有限公司(宏晶科技).S T C 89C 51R C /R D+系列单片机器件手册[E B /O L ].[202010].h t t p://w w w.s t c -m c u d a t a .c o m /d a t a s h e e t /s t c /S T C A D P D F /S T C 15.pd f .[4]江苏国芯科技有限公司(宏晶科技).S T C 89C 51R C /R D +系列单片机器件手册[E B /O L ].[202010].h t t p://w w w .s t c m c u d a t a .c o m /d a t a s h e e t /s t c /S T C A D P D F /S T C 89C 51R C R D .pd f .[5]Te x a s I n s t r u m e n t s I n c o r po r a t e d .A D C 0808/A D C 08098B i t P C o m p a t i b l e A /D C o n v e r t e r s w i t h 8C h a n n e l M u l t i pl e x e r d a t a s h e e t (R e v .H )[E B /O L ].[202010].h t t ps ://w w w .t i .c o m /l i t /d s /s y m l i n k /a d c 0809n .pd f ?t s =1603095063975&ref _u r l =h t t ps %253A %252F %252F w w w .t i .c o m%252F p r o d -u c t %252F A D C 0809N .[6]T e x a s I n s t r u m e n t s I n c o r p o r a t e d .12B i t A n a l o g t o D i gi t a l C o n v e r t e r s W i t h S e r i a l C o n t r o l a n d 11A n a l o g I n pu t s d a t a s h e e t (R e v .F )[E B /O L ].[202010].h t t ps ://w w w.t i .c o m /l i t /d s /s y m l i n k /t l c 2543.pd f ?t s =1603095199651&ref _u r l=h t t p s %253A%252F %252F w w w.t i .c o m%252F pr o d u c t %252F T L C2543%253F k e yM a t c h %253D T L C 2543%2526t i s e a r c h %253D S e a r c hE Ne v e r y-t h i n g%2526u s e c a s e %253D G P N.刘宝成(副教授),主要研究方向为嵌入式系统㊁智能仪器仪表设计㊁自动化控制等㊂(责任编辑:薛士然 收稿日期:2020-10-29)参考文献[1]牛跃听.C A N 总线嵌入式开发:从入门到实战[M ].北京:北京航空航天大学出版社,2016.[2]陈海燕.支持多主通信的星载C A N 总线应用协议设计[J ].航天器工程,2014(4).[3]曾青林.反熔丝F P G A 在多路数据采集存储系统中的应用[J ].计算机测量与控制,2011(11).[4]王福友.舰船导航系统C A N 总线网络设计的关键技术[J ].中国造船,2008(2).[5]李云.基于S J A 1000的C A N 总线控制节点的设计与实现[J ].空军工程大学学报(自然科学版),2003(3).[6]岳奎.S J A 1000内寄存器的V H D L 语言读写设计与应用[J ].计算机与数字工程,2009(10).[7]尤程瑶.C A N 通信电路的干扰分析与抗干扰措施[J ].电子测量技术,2017(11).[8]崔艳召.TM S 320L F 2407系统设计及外扩C A N 总线设计[J ].航天返回与遥感,2008(2).刘志宏(工程师),主要研究方向为空间遥感器嵌入式系系统开发㊂(责任编辑:薛士然 收稿日期:2020-07-31)儒卓力和英飞凌扩大合作关系自2020年10月1日起,儒卓力成为原赛普拉斯半导体公司整个产品组合的分销商㊂儒卓力原有的分销协议在英飞凌收购赛普拉斯之后,得以扩展到欧洲㊁中东以及非洲地区㊂英飞凌负责欧洲㊁中东以及非洲地区分销及E M S 管理的M a t h i a s R o e t t je s 解释道: 现有协议的扩展,是我们与儒卓力成功合作重要且必要的一步㊂这不仅扩大了我们的销售网络,同时还能为客户提供更好的支持以满足其系统需求㊂增加的产品组合包括存储器㊁微控制器㊁传感器㊁蓝牙和W i F i 技术㊂对儒卓力而言,此次分销协议的扩展,使其现有产品阵容更加丰富,尤其是在汽车㊁工业㊁电机控制和照明等细分市场中㊂儒卓力半导体产品营销总监T h o m a s U l i n s k i 表示:这使得我们能够为客户提供其应用所需的更加优化的全方位解决方案㊂这次产品组合的扩展还巩固了我们作为主动㊁被动㊁无线和机电等元器件分销商的领先地位㊂关于儒卓力儒卓力(R u t r o n i k E l e k t r o n i s c h e B a u e l e m e n t e G m b H )是欧洲第三大分销商(资料来源:E u r o pe a n 分销报告2017)以及世界第十一大分销商(资料来源:S o u r c e T o d a y,2018年5月)㊂作为宽线产品分销商,儒卓力可提供半导体㊁无源和机电组件以及显示屏㊁嵌入式主板㊁存储解决方案和无线解决方案等㊂公司的主要目标市场是汽车㊁医疗㊁工业㊁家用电器㊁能源和照明业㊂儒卓力通过R U T R O N I K E M B E D D E D ㊁R U T R O N I K S MA R T ㊁R U T R O N I K P OW E R 及R U T R O N I K A U T OMO T I V E 系列提供定制的综合性产品和服务,为客户满足其应用的需求㊂对产品开发及设计的专业技术支持㊁物流和供应链管理解决方案,以及综合服务使得儒卓力的服务日趋完善㊂。
外部中断实验遇到的问题和解决方法一、实验背景外部中断是指由外部设备或者其他引起的中断请求,例如按键、传感器等。
在单片机开发中,外部中断是非常重要的一种中断方式,它可以使单片机在执行某些任务时可以及时响应外界的事件。
二、实验目的本实验旨在通过使用STM32F103C8T6开发板和Keil uVision 5软件,学习如何配置和使用STM32F103C8T6外部中断,并解决在实验过程中可能遇到的问题。
三、实验步骤1. 硬件连接将STM32F103C8T6开发板上的PB0引脚连接到按键上,并将按键另一端连接到GND引脚上。
2. 配置GPIO口初始化首先需要配置PB0引脚为输入模式,并且使能其时钟。
具体代码如下:```RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB, ENABLE); // 使能GPIOB口时钟GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0; // PB0引脚GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IPU; // 输入模式,带上拉GPIO_Init(GPIOB, &GPIO_InitStructure); // 初始化PB0口```3. 配置NVIC初始化需要配置NVIC(Nested Vector Interrupt Controller)初始化,使能外部中断并设置优先级。
具体代码如下:```NVIC_InitStructure.NVIC_IRQChannel = EXTI0_IRQn; // 外部中断0对应的中断通道NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 1; //抢占优先级为1NVIC_InitStructure.NVIC_IRQChannelSubPriority = 1; // 子优先级为1NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE; // 使能中断通道NVIC_Init(&NVIC_InitStructure); // 初始化NVIC```4. 配置外部中断初始化需要配置外部中断初始化,设置外部中断触发方式。
1)初始化IO 口为输入。
外部中断输入的IO 口的状态,可以设置为上拉/下拉输入,也可以设置为浮空输入,但浮空的时候外部一定要带上拉,或者下拉电阻。
否则可能导致中断不停的触发。
在干扰较大的地方,就算使用了上拉/下拉,也建议使用外部上拉/下拉电阻,这样可以一定程度防止外部干扰带来的影响。
①使能IO口的时钟②清除原来的相应的设置③设置成上拉输入0x80④把GPIO_ODR相应的位设置成 12)开启IO 口复用时钟,设置IO 口与中断线的映射关系。
STM32 的IO 口与中断线的对应关系需要配置外部中断配置寄存器EXTICR,这样我们要先开启复用时钟,然后配置IO 口与中断线的对应关系。
才能把外部中断与中断线连接起来。
①使能复用时钟RCC_APB1ENR第0位AFIOEN:辅助功能IO时钟使能RCC->APB1ENR |= 1<<0②设置外部中断配置寄存器(AFIO_EXTICR1)总共有三个配置寄存器,分别对应着15个中段线。
每个寄存器存放四个。
如上图。
在设置这些位时仍然2步:首先:清除原来的设置。
AFIO->EXTICR[0]&=~(0x000F<<0); //清除中断线0的原来的设置然后:设置映射到那个端口。
AFIO->EXTICR[0]|=0<<0;//设置引脚为0000也就是A口扩展:事件控制寄存器(AFIO_EVCR)位7 EVOE:允许事件输出(Event output enable) 位7 该位可由软件读写。
当设置该位后,Cortex的EVENTOUT将连接到由PORT[2:0]和PIN[3:0]选定的I/O口。
位6:4PORT[2:0]:端口选择000:选择PA 001:选择PB 010:选择PC 011:选择PD 100:选择PE位3:0 PIN[3:0]:引脚选择(x=A…E)0000:选择Px0 0001:选择Px1 0010:选择Px2 0011:选择Px3 0100:选择Px4 0101:选择Px5 0110:选择Px6 0111:选择Px7 1000:选择Px8 1001:选择Px9 1010:选择Px10 1011:选择Px11 1100:选择Px12 1101:选择Px13 1110:选择Px14 1111:选择Px153)开启与该IO 口相对的线上中断/事件,设置触发条件我们要配置中断产生的条件,STM32 可以配置成上升沿触发,下降沿触发,或者任意电平变化触发,但是不能配置成高电平触发和低电平触发。
单片机外部中断技术原理及应用案例单片机是一种微型电脑,它集成了处理器、内存和输入输出接口等功能,广泛应用于各种电子设备中。
在单片机的应用过程中,外部中断技术起到了重要的作用。
本文将介绍单片机外部中断技术的原理,以及一些应用案例。
一、单片机外部中断技术原理单片机外部中断技术是通过对外部信号的检测和响应,实现单片机与外设之间的交互。
当外部信号满足特定条件时,单片机将进入中断服务程序,执行相应的操作。
单片机外部中断主要包括中断源、中断触发方式和中断向量表等几个关键要素。
1. 中断源:中断源是指引起中断的外部信号。
常见的中断源有外部按键、传感器信号等。
当外部信号满足特定条件时,会触发中断信号,从而引起单片机进入中断状态。
2. 中断触发方式:中断触发方式主要有两种,即电平触发和边沿触发。
- 电平触发:当外部信号保持在高电平或低电平时,单片机将进入中断状态。
电平触发的稳定性较好,在噪声较多的环境中有较好的抗干扰能力。
- 边沿触发:当外部信号从低电平变为高电平(上升沿)或从高电平变为低电平(下降沿)时,单片机将进入中断状态。
边沿触发灵敏度较高,适合对信号变化较快的应用场景。
3. 中断向量表:中断向量表存储了每个中断源对应的中断服务程序的入口地址。
当中断发生时,单片机会自动根据中断源的编号在中断向量表中查找相应的入口地址,并跳转到该地址执行中断服务程序。
二、单片机外部中断应用案例为了更好地理解单片机外部中断技术的应用,下面将介绍两个常见的案例。
1. 按键中断:在很多电子设备中,我们经常会见到按键的应用。
通过单片机外部中断技术,可以实现对按键的检测和响应。
以一个简单的LED闪烁控制器为例,假设有一个按键连接到单片机的外部中断引脚上。
当按键按下时,外部中断触发,单片机进入中断状态,执行相应的中断服务程序。
在中断服务程序中,可以控制LED的闪烁频率或状态。
这种按键中断的应用案例在很多电子设备中常见,比如遥控器的按键控制、电子游戏手柄的按键检测等。
外部中断工作原理的阐述
外部中断是一种在计算机系统中发生的事件,它会打断正在执行的程序,并转移到一个特定的程序段去处理该事件。
产生中断的事件可以是来自外部设备的信号,例如按下键盘上的某个按键,鼠标的移动等。
外部中断的工作原理可以总结为以下几个步骤:
1. 检测中断信号:计算机系统会不断地检测外部设备是否发出中断信号。
这个过程通常由硬件电路来完成,它会监测与外部设备的连接,例如中断请求(IRQ)线路。
2. 响应中断信号:当外部设备发出中断信号时,计算机系统会立即响应这个中断请求。
这可以通过向处理器发出一个中断请求信号来实现。
处理器会停止正在执行的程序,并保存当前的执行现场(例如程序计数器、寄存器等)。
3. 转移中断处理程序:一旦处理器接收到中断请求,它会根据中断请求信号的优先级,决定是继续执行当前程序还是转移到一个新的中断处理程序。
这个中断处理程序通常是事先编写好的,用于处理特定的中断事件。
4. 执行中断处理程序:转移到中断处理程序后,处理器开始执行这段程序。
中断处理程序可以读取和处理来自中断事件的数据,并执行相关的操作。
例如,如果是键盘中断,中断处理程序可以读取键盘缓冲区的内容来获取用户输入。
5. 恢复执行现场:当中断处理程序执行完毕后,处理器会恢复之前保存的执行现场,并继续执行原来的程序。
它会通过读取之前保存的寄存器值来恢复程序计数器的值,从而继续执行原来中断发生之前的程序。
外部中断的工作原理允许计算机系统实现对多个外部设备的并行处理,并及时响应这些设备的事件。
这在处理实时任务和交互性较高的应用中非常重要。
总结按键输入外部中断请求信号存在的问题
与解决方法
外部中断是嵌入式系统中常见的一种事件响应机制,可以通过外部设备发出的中断信号来触发处理器执行相应的中断服务程序。
在实际的应用中,按键输入作为一种常见的外部中断源,经常被应用于用户交互和控制系统中。
然而,按键输入外部中断请求信号也会带来一些问题,包括抖动、冲突以及消隐等,并且需要针对这些问题采取相应的解决方法。
按键输入外部中断请求信号存在的问题主要包括抖动、冲突和消隐,下面将逐一介绍这些问题及解决方法。
一、抖动问题
按键抖动是指在按下或释放按键的瞬间,由于机械结构的弹性特性或者接触点的不良接触,会导致按键信号在短时间内多次震动,造成中断信号的多次触发,使得系统产生误操作或者多次中断的情况。
解决按键抖动问题的方法主要包括软件滤波和硬件滤波。
1、软件滤波
软件滤波是通过在中断服务程序中增加延时、状态检测等手段来解决按键抖动问题的方法。
通过在中断服务程序中增加延时等操作,可以排除由于按键抖动造成的多次中断信号的干扰,确保系统的稳定性和可靠性。
然而,软件滤波需要占用处理器的执行时间和资源,容易影响系统的实时性和响应速度。
2、硬件滤波
硬件滤波是采用电路设计来解决按键抖动问题的方法。
通过在按键输入信号的引脚上接入RC滤波电路、反嵌二极管等元件,可以有效地减少按键抖动造成的中断信号的干扰,确保系统对按键输入信号的正确响应。
相比于软件滤波,硬件滤波可以减轻处理器的负担,提高系统的实时性和响应速度。
二、冲突问题
按键冲突是指在多个按键同时按下或释放的情况下,会产生错误的中断信号或者无法正确识别所触发的按键,导致系统的误操作或功
能执行异常。
解决按键冲突问题的方法主要包括硬件防抖和编码解码电路。
1、硬件防抖
硬件防抖是通过在按键输入信号的引脚上接入双稳态触发器或者滤波电路等元件来解决按键冲突问题的方法。
通过这些电路设计,可以确保在多个按键同时按下或释放的情况下,系统可以正确识别并执行相应的中断服务程序,确保系统的稳定性和可靠性。
2、编码解码电路
编码解码电路是通过将多个按键输入信号进行编码和解码的过程来解决按键冲突问题的方法。
通过在按键输入信号的引脚上接入编码器和解码器等元件,可以确保系统在多个按键同时按下或释放的情况下,能够正确识别并执行相应的中断服务程序,确保系统的稳定性和可靠性。
三、消隐问题
按键消隐是指在相邻按键被按下的情况下,会产生部分按键无法
触发中断信号的问题,造成按键输入信号的丢失或误操作。
解决按键
消隐问题的方法主要包括矩阵键盘设计和多级触发器。
1、矩阵键盘设计
矩阵键盘设计是通过将多个按键输入信号进行排列和编码的方式
来解决按键消隐问题的方法。
通过这种设计,可以确保系统在相邻按
键被按下的情况下,能够正确识别并执行相应的中断服务程序,确保
系统能够正确响应用户的操作和指令。
2、多级触发器
多级触发器是通过在按键输入信号的引脚上接入多级触发器元件
来解决按键消隐问题的方法。
通过这些电路设计,可以确保系统在相
邻按键被按下的情况下,能够正确识别并执行相应的中断服务程序,
确保系统能够正确响应用户的操作和指令。
综上所述,按键输入外部中断请求信号存在的问题主要包括抖动、冲突和消隐,针对这些问题的解决方法主要包括软件滤波、硬件滤波、硬件防抖、编码解码电路、矩阵键盘设计和多级触发器等。
通过合理
地应用这些方法,可以有效地解决按键输入外部中断请求信号存在的问题,确保系统的稳定性和可靠性,提高系统的实时性和响应速度,满足不同应用场景的需求。