单片机 外部中断0

合集下载

单片机原理外部中断实验

单片机原理外部中断实验

单片机原理实验报告实验题目外部中断实验一、实验目的1.掌握用外部中断方式实现控制的方法。

2.掌握中断优先级的使用方法。

3. 掌握用Proteus实现单片机系统仿真的方法。

二、实验预备知识外部中断信号由P3.2(P3.3)管脚输入,当中断触发方式控制位ITO(IT1)为1时,CPU 在每个机器周期的S5P2采样P3.2(P3.3)管脚,如果连续两次采样,前一次采样为高电平,后一次采样为低电平,则认为有中断申请,随即使中断标志位IE0(IE1)置1,向CPU申请中断,直到该中断被CPU响应。

当定时器以计数方式工作,计数初值为满量程,在计数输入端T0(T1)输入负跳变信号时,计数器将加1并产生溢出,随即使溢出标志位TF0(TF1)置1,向CPU申请中断,直到该中断被CPU响应。

三、实验内容P1口做输出口,接八只发光二极管,利用手控单脉冲信号作为外部中断信号,编写控制程序,使八只发光二极管按一定的规律循环点亮。

1.程序1: 从外部中断0请求输入端(P3.2)输入脉冲信号2.程序2: 从定时器0的外部输入端(P3.4)输入脉冲信号四、实验参考电路P1口接发光二极管的阴极,P1口的管脚输出低电平时对应的发光二极管点亮,实验电路图如图4-1所示。

图4-1 外部中断实验电路五、实验参考程序ORG 0003HAJMP INT00 ORG 0013H AJMP INT11 ORG 0050H MAIN:SETB EASETB EX0SETB EX1SETB PX1SETB IT0SETB IT1MOV A,#0FEH LP1:MOV P1,ALCALL DELAY RL ASJMP LP1ORG 0100H INT00:PUSH ACCMOV A,#0FCH MOV R1,#7 LP2:MOV P1,A LCALL DELAY RL ADJNZ R1,LP2 POP ACCRETIORG 0150H INT11:PUSH ACCMOV A,#3FH MOV R2,#7 LP3:MOV P1,ALCALL DELAY RR ADJNZ R2,LP3 POP ACCRETIORG 0200H DELAY:MOV R3,#20 L1:MOV R7,#200 L2:MOV R6,#123 NOPL3:DJNZ R6,L3 DJNZ R7,L2 DJNZ R3,L1 RETEND六、实验分析与总结。

外部中断计数实验报告

外部中断计数实验报告

一、实验目的1. 理解单片机外部中断的工作原理和触发条件。

2. 掌握如何通过外部中断实现计数功能。

3. 学习中断服务程序的设计方法。

4. 提高单片机编程和调试能力。

二、实验环境1. 单片机:80C512. 开发工具:Keil uVision3. 实验电路:按键、LED灯、单片机及其相关外围电路三、实验原理外部中断是指单片机通过外部引脚接收到的中断信号,使得CPU暂停当前程序,转而执行中断服务程序。

本实验通过外部中断实现计数功能,具体原理如下:1. 将单片机的某个外部引脚(如P3.2)设置为外部中断0(INT0)的触发引脚。

2. 在外部中断0的中断服务程序中,设置一个计数变量,每次中断发生时,计数变量加1。

3. 将计数变量的值通过LED灯显示出来,以观察计数过程。

四、实验步骤1. 创建Keil uVision项目,并添加80C51固件库。

2. 编写C语言程序,实现以下功能:- 初始化外部中断0,设置中断触发方式为下降沿触发。

- 初始化定时器,用于产生中断。

- 编写外部中断0的中断服务程序,实现计数功能。

- 编写主函数,用于设置单片机的工作状态和显示计数结果。

3. 编译并下载程序到单片机。

4. 连接实验电路,包括按键、LED灯和单片机及其相关外围电路。

5. 观察实验现象,验证计数功能是否实现。

五、实验结果与分析1. 实验现象:按下按键,LED灯显示的计数值加1。

2. 分析:- 外部中断0的中断服务程序被正确调用。

- 计数变量在每次中断发生时加1。

- LED灯能够正确显示计数结果。

六、实验总结1. 本实验成功实现了通过外部中断实现计数功能,验证了单片机外部中断的工作原理。

2. 通过编写中断服务程序,掌握了中断编程方法。

3. 实验过程中,遇到了一些问题,如中断服务程序编写错误、程序编译错误等,通过查阅资料和调试,最终解决了问题。

4. 通过本次实验,提高了单片机编程和调试能力,加深了对单片机外部中断的理解。

单片机外部中断实验程序

单片机外部中断实验程序

单片机外部中断实验程序单片机外部中断是一种常用的硬件中断方式,可以使单片机在执行主程序的同时,及时响应外部设备的信号,并进行相应的处理。

在本实验中,我们将编写一段简单的程序,用于实现单片机外部中断的功能。

首先,我们需要明确实验的硬件配置。

本实验中,我们使用的是STC89C52单片机,其中P3.2引脚作为外部中断0的引脚。

接下来,我们将详细介绍实验的步骤。

首先,在主程序中,我们需要首先对单片机的外部中断进行初始化设置。

具体的设置步骤如下:1.设置外部中断引脚的工作方式。

我们需要将P3.2引脚设置为外部中断0的工作模式。

可以通过将P3.2引脚对应的P3CON寄存器位设置为1来实现。

2.设置外部中断的触发方式。

单片机外部中断可以通过电平触发或边沿触发来响应外部设备的信号。

在本实验中,我们选择边沿触发方式。

可以通过将IE寄存器中的EX0位设置为1来实现。

然后,在程序的主循环中,我们可以编写一个简单的实验程序,用于验证外部中断的功能。

具体的步骤如下:1.在主循环中,我们可以设置一个循环延时函数,用于模拟主程序的执行过程。

2.在循环延时函数的适当位置,可以编写一段代码来模拟外部设备的信号触发。

可以通过向P3.2引脚输出一个高电平信号来触发外部中断。

3.在外部中断的中断服务函数中,我们可以编写一段简单的代码,用于处理外部中断触发时的操作。

可以通过向LED等外设输出一个特定的信号,以验证中断服务函数的正确性。

最后,在程序的尾部,我们可以添加一个死循环,用于保证程序的持续运行。

具体的代码如下所示:```#include<reg52.h>sbit LED=P1^0;void delay(unsigned int t){unsigned int i,j;for(i=t;i>0;i--)for(j=110;j>0;j--);}void ExternalInterrupt0()interrupt0{LED=~LED;delay(100);}void main(){IT0=1;//设置外部中断0为边沿触发EX0=1;//允许外部中断0EA=1;//允许总中断while(1){//主循环中的其他操作delay(1000);}}```通过以上的程序,我们可以实现单片机的外部中断功能。

单片机实验报告四 外部中断实验

单片机实验报告四 外部中断实验

南昌大学实验报告学生姓名:学号:专业班级:实验类型:⃞验证⃞综合⃞设计⃞创新实验日期:2019. 4.30 实验成绩:实验四外部中断实验(一)实验目的1.掌握单片机外部中断原理;2.掌握数码管动态显示原理。

(二)设计要求1.使用外部中断0和外部中断1;2.在动态数码管上显示中断0次数,中断1用作次数清0,数码管采用74HC595驱动。

(三)实验原理1.中断:计算机执行主程序过程中,由于临时重要事件,需要暂停当前程序的运行,转到中断服务程序去处理临时事件,处理完后又返回原程序的断点处继续运行。

图1STC15单片机的中断系统包含21个中断源,2个中断优先级,二级中断服务嵌套,中断允许寄存器IE、IE2和INT_CLKO控制中断允许。

中断优先级寄存器IP、IP2管理中断优先级。

同优先级中断同时提出中断请求时,由内部的查询逻辑确定响应次序。

中断请求源中的外部中断0(INT0)和外部中断1(INT1)详述如下:1)外部中断0(INT0):中断信号由P3.2引脚输入。

通过IT0来设置中断请求的触发方式。

当IT0为“1”时,外部中断0为下降沿触发;当IT0为“0”时,无论是上升沿还是下降沿,都会引发外部中断0.一旦输入信号有效,则置位IE0标志,向CPU申请终端。

2)外部中断1(INT1):中断信号由P3.3引脚输入。

通过IT1来设置中断请求的触发方式。

当IT1为“1”时,外部中断0为下降沿触发;当IT1为“0”时,无论是上升沿还是下降沿,都会引发外部中断0.一旦输入信号有效,则置位IE0标志,向CPU申请终端。

2.LED数码管是显示数字和字母的常见显示器件,由8个发光二极管构成,结构如图2:图2段码:a、b、c、d、e、f、g、dp段的二进制代码(a为最低位),控制显示字型。

位选:公共端com,控制数码管是否显示。

3.数码管动态显示原理:任何时刻只有一个数码管处于显示状态,单片机采用“扫描”方式控制各个数码管轮流显示,通常将所有数码管段码线的相应段并联在一起,由一个8位I/O 端口控制。

单片机学习经验——interrupt

单片机学习经验——interrupt

单片机中断一、Interrupt 0——外部中断:初始化为:EA=1;(开启中断)IT=0;(电平触发方式,IT=1表示下降沿等边沿式触发)EX0=1;(允许中断)例子:#include<reg51.h>#include<intrins.h>sbit P3_0=P3^0;int i;void main( ){… …IT0=0; //设为电平触发方式EA=1; //CPU开放中断EX0=1; //允许中断… …}void int_0( ) interrupt 0 {P3_0=0; //由P3.0输出0_nop_( );_nop_( );P3_0=1; //由P3.0输出1,撤除i=P1; //输入数据… …}二、Interrupt 1——定时器T0溢出:1、初始化:1)、TR0=1;(启动定时器T0)EA=1;(开启中断)ET0=1;(允许T0中断)2)、对于时间的计算:对于晶振为12Mhz的单片机,其一个周期为1微秒。

方式0:TCON D7D0所以这是由十三位计数器组成的,计算方法为:)t/N (213周期注:=-=N X TMOD=OX00;方式1:所以这是由16位计数器组成的,其计算方法为: 例:TMOD=OX01;TH0=(N -65536)/256; TL0=(N -65536)%256; 同理N=t/晶振周期 方式2:TCON D7D0TCON D7D016X=2-N这是8位计数器,计算方法如下:N=82(N=t/晶振周期)X-方式2特别适合于较精确的脉冲信号发生器。

此时TMOD=OX06;例如,利用T0扩展一个外部中断源。

将T0设置为计数器方式,按方式2工作,TH0、TL0的初值均为0FFH,T0允许中断,CPU开放中断。

程序为:TMOD=0x06;//置T0为计数器方式2TL0=0x0FF;//置计数初值TH0=0x0FF;TR0=1;//启动T0工作EA=1;//CPU开中断ET0=1;//允许T0中断对于方式3一般不用所以这里暂不介绍了。

51单片机外部中断详解

51单片机外部中断详解

一.外部中断相关寄存器1.定时器/计数器控制寄存器控制寄存器(TCON)IT0:外部中断0触发方式控制位当IT0=0时,为电平触发方式(低电平有效)当IT0=1时,为边沿触发方式(下降沿有效)IT1:外部中断1触发方式控制位当IT1=0时,为电平触发方式(低电平有效)当IT1=1时,为边沿触发方式(下降沿有效)2.中断允许控制寄存器(IE)EX0:外部中断0允许位;EX1:外部中断1允许位;EA :CPU中断允许(总允许)位。

二.外部中断的处理过程1、设置中断触发方式,即IT0=1或0,IT1=1或02、开对应的外部中断,即EX0=1或EX1=1;3、开总中断,即EA=1;4、等待外部设备产生中断请求,即通过,口连接外部设备产生中断5、中断响应,执行中断服务函数三.程序编写要求:通过两位按键连接外部中断0和1,设定外部中断0为下降沿触发方式,外部中断1为低电平触发方式,按键产生中断使数字加减,用一位共阳极数码管来显示数值。

目的:感受外部中断对程序的影响,体会低电平触发和下降沿触发的区别。

#include<>#define uint unsigned int #define uchar unsigned char uchar code dat[] ={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90};uint num;void main(){EA=1; //开总中断IT0=1; //下降沿触发IT1=0; //低电平触发EX0=1; //外部中断0允许EX1=1; //外部中断1允许while(1){P0=dat[num%10];}}void plus() interrupt 0//外部中断0 {EX0=0;num++;EX0=1;}void minus() interrupt 2//外部中断1{EX1=0;num--;EX1=1;}。

51单片机中断函数

51单片机中断函数

51单片机中断函数单片机的中断是指当单片机在正常运行的过程中,突然接收到来自外部设备或者其他源的信号时,能够立即停止正在执行的程序,转而执行一个特定的子程序,完成接收到的信号处理。

单片机中断函数是在中断发生时执行的一段程序代码。

下面将详细介绍51单片机中断函数的原理和使用方法。

首先,需要了解51单片机的中断原理。

51单片机有5个中断源,分别是外部中断0和1(INT0和INT1),定时器/计数器0和1的中断,以及串口中断(RI/TI)。

每个中断源都有自己的中断标志位,当中断源发生时,相应的中断标志位会被设置为1在单片机的中断函数中,需要首先设置中断使能位,使能相应的中断源。

然后,需要编写中断服务子程序(ISR)的函数体,该函数用于处理中断发生时需要完成的任务。

在ISR中,需要首先清除中断标志位,以防止重复中断。

然后,根据需要进行相关的处理,例如读取外部触发的信号或者发送/接收数据等。

以下是一个简单的外部中断0的中断函数示例:```C#include <reg52.h>void ExtInt0_ISR( interrupt 0//处理中断//...//清除中断标志位EX0=0;//使能外部中断0//...EX0=1;void main//设置中断使能位EA=1;//总中断使能位EX0=1;//使能外部中断0//...while (1)//主程序代码//...}```在上述代码中,`ExtInt0_ISR`函数是外部中断0的中断服务子程序,它使用`interrupt 0`关键字来声明,表示该函数用于处理外部中断0。

在`ExtInt0_ISR`函数体中,可以编写处理中断的代码。

在`main`函数中,首先使用`EA=1`来使能总中断,然后使用`EX0=1`使能外部中断0。

在主程序中的循环中,单片机会一直运行,直到外部中断0发生。

当外部中断0发生时,单片机会立即跳转到`ExtInt0_ISR`函数执行相应的任务。

stc8系列单片机前5个中断源的中断子函数框架

stc8系列单片机前5个中断源的中断子函数框架

stc8系列单片机前5个中断源的中断子函数框架中断是单片机中一种重要的事件处理机制,能够在系统发生某个指定的事件时,立即打断当前的程序执行,转而执行中断服务程序。

STC8系列单片机提供了多种中断源,本文将介绍其中前5个中断源的中断子函数框架。

一、外部中断0外部中断0是通过INT0引脚触发的中断源。

当INT0引脚的电平发生变化时,可触发外部中断0。

以下是外部中断0的中断子函数框架:```Cvoid INT0_ISR() interrupt 0{// 中断服务程序的代码// ...}```二、外部中断1外部中断1是通过INT1引脚触发的中断源。

当INT1引脚的电平发生变化时,可触发外部中断1。

以下是外部中断1的中断子函数框架:```Cvoid INT1_ISR() interrupt 2{// 中断服务程序的代码// ...}```三、定时器0中断定时器0中断是使用定时器0作为中断源。

定时器0可以设定一个计时周期,当计时器溢出时,会触发定时器0中断。

以下是定时器0中断的中断子函数框架:```Cvoid TIMER0_ISR() interrupt 1{// 中断服务程序的代码// ...}```四、定时器1中断定时器1中断是使用定时器1作为中断源。

定时器1可以设定一个计时周期,当计时器溢出时,会触发定时器1中断。

以下是定时器1中断的中断子函数框架:```Cvoid TIMER1_ISR() interrupt 3{// 中断服务程序的代码// ...}```五、串口中断串口中断是通过串口通信接收和发送数据时触发的中断源。

当接收到数据或发送完成时,可触发串口中断。

以下是串口中断的中断子函数框架:```Cvoid UART_ISR() interrupt 4{// 判断中断类型if (RI){// 接收中断// 中断服务程序的代码// ...}else if (TI){// 发送中断// 中断服务程序的代码// ...}}```总结:以上是STC8系列单片机前5个中断源的中断子函数框架。

单片机中断

单片机中断

单片机里面一共有两个中断,一个是中断0,一个是中断1 ,和两个定时器T0,T1,定时器就是你打开它后,它会自动数数,当数到你给它限定的值时,它就会溢出,产生中断让CPU处理IT0 声明外部中断0的类型,IT0=1是边沿触发,0是电平触发边沿触发就是当检测到外部电平发生变化,即由低变高,或者由高变低时,就会产生一个中断,电平触发就是检测到高电平或者低电平时,产生中断IE0 外部边沿触发产生中断后,它的值会变1,当CPU响应后,会自动变为0IT1 和IT0一样的含义IE1 和IT0一样的含义EX0 外部中断0控制器,EX0=1是允许外部中断,0是禁止外部中断,也就是不理会外部中断ET0 这个是定时器中断控制器,ET1=1是允许定时器产生中断,0是禁止EX1,ET1的含义跟上面的都一样。

EA 总中断控制器,1是允许有中断产生,0是禁止所有中断,就算天打雷劈也不理会PX0 外部中断0的优先级控制,假如内外都产生了中断,1就是优先处理外部中断,0就是优先处理内部中断PT0 定时器0优先级控制器,1就是优先相应定时器0PT1 定时器1优先级控制器,1就是优先相应定时器1只是普通的函数加上了interrupt X using Y 了而已,X 的取值是有规定的:如果是外部中断0的中断处理函数,则X为0即void abc() interrupt 0 using n,若是定时器0的中断处理函数,则X 为1,若是外部中断1的中断处理函数,则X 为2若是定时器1的中断处理函数,则X 为3 ,若是串口中断的中断处理函数,则X 为4,n 是中断号,取值范围为0 – 31中断寄存器单片机有10个寄存器主要与中断程序的书写控制有关1.中断允许控制寄存器IE2.定时器控制寄存器TCON3.串口控制寄存器SCON4.中断优先控制寄存器IP5.定时器工作方式控制寄存器TMOD6.定时器初值赋予寄存器(TH0/TH1,TL0/TL1)1、寄存器功能与赋值说明注:在用到中断时,必须要开总中断EA,即EA=1。

51单片机中断原理

51单片机中断原理

51单片机中断原理在单片机的世界里,中断就像是一个随时待命的“紧急事务处理员”。

当单片机正在执行主程序,忙得不可开交时,突然来了一些紧急情况,比如外部设备发来的数据需要立刻处理,或者定时时间到了需要执行特定的操作,这时候中断就发挥作用了。

要理解 51 单片机的中断原理,咱们得先从几个基本概念说起。

首先是中断源。

这可以想象成是引起中断的“源头”。

在 51 单片机中,常见的中断源有外部中断 0、外部中断 1、定时器/计数器 0 溢出中断、定时器/计数器 1 溢出中断,还有串行口中断。

这些中断源就像是不同的“紧急事务”,各自有着特定的触发条件。

比如说外部中断 0 和 1,通常是由外部引脚的电平变化引起的。

当设定的引脚从高电平变为低电平(或者反过来),就会触发相应的外部中断。

定时器/计数器的溢出中断呢,则是当定时器/计数器累计到设定的值时产生的。

这就好比一个闹钟,设定的时间一到,就会响铃提醒。

串行口中断则是在串行通信过程中,出现特定的通信事件时触发。

接下来是中断允许控制寄存器 IE。

它就像是一个“总开关”,决定哪些中断源被允许响应。

如果某个中断源对应的位被设置为 1,就表示允许这个中断源产生中断;如果是 0,就表示禁止。

然后是中断优先级控制寄存器 IP。

在多个中断源同时请求中断时,中断优先级就决定了哪个中断先被处理。

优先级高的中断会先得到响应,处理完后再处理优先级低的中断。

当一个中断发生时,单片机可不是手忙脚乱地随便处理。

它有着一套严格的中断响应流程。

首先,单片机在执行主程序时,会不断检测是否有中断请求。

一旦检测到有中断请求,并且中断是被允许的,单片机会暂停当前正在执行的主程序,把当前主程序的断点地址(也就是接下来要继续执行主程序的位置)保存起来。

这就像是在一张纸上记下当前做到哪一步了,等处理完中断回来还能接着做。

然后,单片机就会跳转到相应的中断服务程序去执行。

中断服务程序就像是专门处理紧急事务的“小分队”,有着特定的任务和处理逻辑。

STC15单片机外部中断的特点及应用研究

STC15单片机外部中断的特点及应用研究

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 系列提供定制的综合性产品和服务,为客户满足其应用的需求㊂对产品开发及设计的专业技术支持㊁物流和供应链管理解决方案,以及综合服务使得儒卓力的服务日趋完善㊂。

51单片机中断系统详解

51单片机中断系统详解

51单片机中断系统详解51 单片机中断系统详解(定时器、计数器)51 单片机中断级别中断源INT0---外部中断0/P3.2 T0---定时器/计数器0 中断/P3.4 INT1---外部中断1/P3.3 T1----定时器/计数器1 中断/P3.5 TX/RX---串行口中断T2---定时器/计数器 2 中断第5 最低4 5 默认中断级别最高第2 第3 第4 序号(C 语言用) 0 1 2 3 intrrupt 0中断允许寄存器IE位序号符号位EA/0 ------ET2/1 ES ET1 EX1 ET0 EX0 DB7 DB6 DB5 DB4 DB3 DB2 DB1 DB0 EA---全局中允许位。

EA=1,打开全局中断控制,在此条件下,由各个中断控制位确定相应中断的打开或关闭。

EA=0,关闭全部中断。

-------,无效位。

ET2---定时器/计数器2 中断允许位。

ET2=1, 打开T2 中断。

ET2=0,关闭T2 中断。

关,。

ES---串行口中断允许位。

关,。

ES=1,打开串行口中断。

关,。

ES=0,关闭串行口中断。

关,。

ET1---定时器/计数器1 中断允许位。

关,。

ET1=1,打开T1 中断。

ET1=0,关闭T1 中断。

EX1---外部中断1 中断允许位。

EX1=1,打开外部中断1 中断。

EX1=0,关闭外部中断1 中断。

ET0---定时器/计数器0 中断允许位。

ET0=1,打开T0 中断。

EA 总中断开关,置1 为开;EX0 为外部中断0 (INT0) 开关,。

ET0 为定时器/计数器0(T0)开EX1 为外部中断1(INT1)开ET1 为定时器/计数器1(T1)开ES 为串行口(TX/RX)中断开ET2 为定时器/计数器2(T2)开ET0=0,关闭T0 中断。

EX0---外部中断0 中断允许位。

EX0=1,打开外部中断0 中断。

EX0=0,关闭外部中断0 中断。

中断优先级寄存器IP位序号位地址------PS/0 PT1/0 PX1/0 PT0/0 PX0/0 DB7 DB6 DB5 DB4 DB3 DB2 DB1 DB0 -------,无效位。

实验二 51单片机外部中断实验报告

实验二 51单片机外部中断实验报告

实验二外部中断实验实验报告
一、实验内容
单片机外部中断0(P3.2)已与独立式键盘中KEY0连接,外部中断1(P3.3)已与KEY1连接,要求在无外部中断时最上面一位发光二极管(LED10)点亮。

请编程实现:当KEY0按下,外部中断0请求中断,控制发光二极管从上到下循环点亮3圈;当KEY1按下,外部中断1请求中断,控制发光二极管闪烁3次。

(要求外部中断1优先级高于外部中断0,即KEY1按下后能够打断流水灯的动作,当外中断1处理完后,恢复外中断0的处理,并且能从上次打断的那个LED开始循环)。

单片机与发光二极管的连接如图2-1所示,独立式键盘原理图如图2-2所示。

图2-1 单片机与发光二极管的连接原理图
2-2 独立式键盘原理图
三、硬件电路分析
1、阅读电路2-1简要分析如何使发光二极管点亮?
当LEDS0 为高电平时,三极管Q6导通,发光二极管的阳极为高电平,此时,当给发光二极管的阴极为低电平时,发光二极管两端存在电位差,发光二极管导通,则发光二极管点亮。

2、简要画出独立式按键电路(一个键),并分析其如何工作?
如图所示,当按键按下时,单片机IO处会由高电平变为低电平,单片机IO口在经过消抖处理之后仍然检测为低电平,则表明按键被按下。

四、程序设计
画出主程序流程图:
画出外部中断0流程图;
五、思考题
六、收获和体会。

stc8系列单片机前5个中断源的中断子函数框架

stc8系列单片机前5个中断源的中断子函数框架

STC8系列单片机是一款广泛应用于嵌入式系统的单片机,它具有丰富的外设和强大的性能,其中中断处理是其重要的特性之一。

在STC8系列单片机中,有五个中断源,每个中断源都有其特定的中断子函数框架,理解并掌握这些中断子函数框架对于熟练掌握单片机编程是非常重要的。

1. 外部中断0外部中断0是STC8单片机中的一个重要中断源,当外部引脚INT0上的电平发生变化时,外部中断0会被触发。

对于外部中断0的中断子函数框架,我们首先需要在程序中定义中断服务函数,然后通过特定的语句将中断服务函数与外部中断0进行关联。

在中断服务函数中,我们可以编写相应的处理代码,比如读取外部引脚的状态或者执行特定的操作。

在实际编程中,我们还需要考虑中断优先级和中断嵌套等问题,以确保程序的稳定性和可靠性。

2. 外部中断1与外部中断0类似,外部中断1也是通过外部引脚INT1来触发。

在程序中,我们需要定义外部中断1的中断服务函数,并将其与外部中断1进行关联。

我们也需要注意外部中断0与外部中断1的优先级关系,以及在实际应用中可能遇到的中断冲突等问题。

3. 定时器0中断定时器0是STC8单片机中常用的一个定时器,它可以通过定时器溢出中断来实现定时和计数功能。

在定时器0中断的中断子函数框架中,我们需要定义定时器0的中断服务函数,并将其与定时器0的溢出中断进行关联。

在中断服务函数中,我们可以编写定时器0溢出时的处理代码,比如更新计数值或者进行特定的操作。

4. 定时器1中断定时器1与定时器0类似,也可以通过定时器溢出中断来实现定时和计数功能。

在定时器1中断的中断子函数框架中,我们同样需要定义中断服务函数,并将其与定时器1的溢出中断进行关联。

在中断服务函数中,我们可以根据实际需求编写相应的处理代码,比如进行定时操作或者控制特定的外设。

5. 串口中断串口中断是STC8单片机中常用的中断源之一,通过串口中断,单片机可以及时响应串口数据的接收和发送。

在串口中断的中断子函数框架中,我们需要定义串口中断的中断服务函数,并将其与串口中断进行关联。

51单片机的中断系统解析

51单片机的中断系统解析

51单片机的中断系统解析在单片机的世界里,中断系统就像是一位高效的调度员,能够让单片机在处理主要任务的同时,及时响应并处理那些紧急或重要的事件。

51 单片机的中断系统就是这样一个强大而实用的功能模块,它为单片机的应用开发提供了极大的灵活性和高效性。

要理解51 单片机的中断系统,首先得知道什么是中断。

简单来说,中断就是单片机在正常执行主程序的过程中,由于内部或外部的事件触发,暂停当前正在执行的程序,转而去执行相应的中断服务程序,处理完中断事件后再返回原来被中断的地方继续执行主程序。

51 单片机的中断源共有 5 个,分别是外部中断 0(INT0)、外部中断 1(INT1)、定时器/计数器 0 溢出中断(TF0)、定时器/计数器 1溢出中断(TF1)和串行口中断(RI 或 TI)。

外部中断 0 和 1 是由单片机外部引脚的电平变化引起的。

当外部中断引脚(P32 对应 INT0,P33 对应 INT1)上的电平从高到低或从低到高发生变化时,就会触发相应的中断。

这在需要实时响应外部事件的场合非常有用,比如按键检测、外部信号的捕捉等。

定时器/计数器 0 和 1 溢出中断则是基于定时器/计数器的计数满溢出而产生的。

通过设置定时器/计数器的工作方式和初值,可以实现精确的定时或计数功能。

当计数器达到设定的值时,就会产生溢出中断,从而可以执行相应的定时处理任务,比如定时采样、定时控制等。

串行口中断是在串行通信过程中产生的。

当串行口接收完一帧数据或者发送完一帧数据时,就会触发相应的中断,以便及时处理接收到的数据或者准备发送下一组数据。

51 单片机的中断系统有两级控制,分别是总中断允许控制位 EA 和各中断源的允许控制位。

总中断允许控制位 EA 就像是一个总开关,只有当 EA 置 1 时,整个中断系统才有可能响应中断。

而各中断源的允许控制位则分别控制着相应中断源的开关,只有当对应的允许控制位也置 1 时,该中断源才能被响应。

单片机实验二_外部中断

单片机实验二_外部中断

一、实验二: 中断实验二、实验目的:三、通过对P3.2、P3.3引脚的电平控制, 实现外部中断处理, 从而控制输出口P1的输出效果变化。

四、实验原理图实验参考电路图如下:五、参考实验程序/用外中断0的中断方式进行数据采集和处理#include<reg51.h> //包含51单片机寄存器定义的头文件sbit S=P3^2; //将S位定义为P3.2,/*******************************************函数功能: 主函数******************************************/void main(void){EA=1; //开放总中断EX0=1; //允许使用外中断IT0=1; //选择负跳变来触发外中断P1=0xff;while(1); //无限循环, 防止程序跑飞}/************************************************************** 函数功能: 外中断T0的中断服务程序**************************************************************/ void int0(void) interrupt 0 using 0 //外中断0的中断编号为0 {P1=~P1; //每产生一次中断请求, P1取反一次。

}实验思考题:(1) 根据指导书中提供的原理图, 自行设计一个外部中断实验, 要求:(2) 两个外部中断全部用上;(3) 实验能体现不同中断优先级的中断源的相应情况;(4) 不同中断处理程序能输出不同的响应效果//用外中断0的中断方式进行数据采集和处理00000000#include<reg51.h> //包含51单片机寄存器定义的头文件sbit S=P3^2; //将S位定义为P3.2,/*******************************************函数功能: 主函数******************************************/void main(void){EA=1; //开放总中断EX0=1; //允许使用外中断IT0=1; //选择负跳变来触发外中断P1=0xf0;PX0=1;// PX1=1;while(1); //无限循环, 防止程序跑飞}/************************************************************** 函数功能: 外中断T0的中断服务程序**************************************************************/ void int0(void) interrupt 0 using 0 //外中断0的中断编号为0 {//P1=~P1;P1=0x01;}void int1(void) interrupt 1 using 1{//P1=~P1;P1=0XFe; }。

51单片机外部中断INT0实例(汇编程序)

51单片机外部中断INT0实例(汇编程序)

51单⽚机外部中断INT0实例(汇编程序);普中51开发板;单⽚机的P3.2(INT0)引脚与按键K3脚连接;⽤汇编语⾔实现:按⼀次K1外部中断INT0响应⼀次,LED显⽰值加1(⼗进制),;前提是共阴数码LED第⼀位,需要设定,由P0⼝控制。

ORG 0000HLJMP STARTORG 0003HLJMP INTT0ORG 0600HSTART: SETB EASETB EX0 ; 打开外部中断0SETB IT0 ; 跳变沿出发⽅式(下降沿)这个⽅法⽐较稳定;CLR IT0 ; 令中断0为电平触发,这个⽅式需要有延时程序,;否则,单⽚机处理速度快,按⼀下按键,;已经处理了很多个低电平中断了。

CLR P2.2 ;段位选择第⼀位CLR P2.3CLR P2.4CLR1: MOV R0,#00HDISPLAY: MOV DPTR,#TAB ;给字形表的初地址MOV A,R0 ;将要显⽰的数给A;/////////////////////////MOV B, A ;save a valueCLR CSUBB A, #10H ;如果已计数到15,说明⼀次循环结束MOV A, B ;load a valueJNC CLR1 ;C=1,重新开始,R0=00H,若等于0,回displayMOVC A,@A+DPTR ;在字形表中取数放到AMOV P0,A ;假设是P0⼝输出要显⽰的数据把A放到P0中SJMP DISPLAY ;循环显⽰等待中断INTT0: INC R0 ;中断中有按键着加1RETITAB: DB 3FH,06H,5BH,4FH,66H ;字形表0-15DB 6DH,7DH,07H,7FH,6FHDB 77H,7CH,39H,5EH,79H,71HEND。

合泰单片机外部中断程序

合泰单片机外部中断程序

合泰单片机外部中断程序;;内容:按下PA3 接的按键进中断LED 灯左移一位;LED 接法PD 口;源码下载:51hei/f/htwzd.rar;1.开中断;2.中断中防抖includeHT66F50.incORG0000HJMPA1ORG04H;外部中断0 入口地址JMPZD01;ORG30H;A1:MOVA,00000000B;MOVPRM1,A;设置外部中断0 的管脚为PA.3MOVA,00000010B;MOVINTEG,A;设置外部中断0 为下降沿触发CLRACERL;设置PA 口不为AD 输入口SETPAPU.3;设置PA.3 上拉SETPAC.3; 设置PA.3 为输入口MOVA,08H;MOVCP0C,A;设置PA3 不为比较器输入口CLRPDC;设置PD 口为输出口MOVA,01H;设置PD 口初始状态MOVPD,A;PD口显示初始状态CLRINT0F;清中断0 标志SETINT0E;使能外部0 中断SETEMI; 使能总中断JMP$;*************************************************;外部中断0 服务子程序;*************************************************ZD01:RLPD;左移PD 口显示SNZPA.3;判断PA3 是否为高电平(去抖)JMP$-1;是低电平则返回判断CALLM001;延时防止抖动SNZPA.3;JMP$-4;CLRINT0F;清中断标志RETI;中断返回;**************************************;延时子程序;**************************************M001:MOVA,1MOV[85H],AM002:MOVA,10MOV[86H],AM003:MOVA,250MOV[87H],AM004:SDZ[87H]JMPM004 SDZ[86H]JMPM003SDZ[85H]JMPM002 RETENDtips:感谢大家的阅读,本文由我司收集整编。

相关主题
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
DL1:
MOV R6,#1AH
DL0:
MOV R5,#0B9H
DJNZ R5,$
DJNZ R6,DL0
DJNZ R7,DL1
RET
END
#include <reg51.h>
#include <intrins.h>
//用SST单片机进行单步跟踪仿真时,加上下面这句话
//下载程序时,这句话可以注释掉
unsigned char code byTemp[3] _at_ 0x0023;
SJMP LOOP
INT0_SERVICE:
PUSH ACC;保护现场
PUSH PSW;保护现场
MOV P1, #0FFH;熄灭所有发光二极管
MOV 30H, R5;把R5-R7这三个寄存器的值保存起来,为什么?
MOV 31H, R6
MOV 32H, R7
MOV R3, #3
LOOP1:
LCALL DELAY1S;调用延时1秒钟的子程序3次
SETB EX0;外部中断0源允许
SETB PX0;将外部中断0设置为高优先级中断
SETB EA;中断总允许
MOV A,#0FEH;初始化累加器A的值,准备点亮第1个发光二极管
LOOP:
MOV P1,A;将累加器A的值送P1,点亮发光二极管
RL A;累加器A的值左移1位
LCALL DELAY1S;延时1秒钟
P1 = byTemp;
}
{
unsigned char a,b,c;
for(c=95;c>0;c--)
for(b=26;b>0;b--)
for(a=185;a>0;a--);
}
void main()
{
unsigned char data byTemp = 0xFE;
SP = 0x30;
IT0 = 1;//采用下降沿触发中断
PX0 = 1; //将外部中断0设置为高优复R5-R7这三个寄存器的值,为什么?
MOV R6, 31H
MOV R7, 32H
POP PSW;恢复现场
POP ACC;恢复现场
MOV P1, ACC;恢复现场
RETI
DELAY1S: ;误差-0.00000000024us
MOV R7,#5FH
ORG 0000H
SJMP MAIN
ORG 0003H;外部中断0的中断服务程序入口地址
LJMP INT0_SERVICE
ORG 0023H;串口中断服务程序入口地址保留3个字节,调试用
DS 3
ORG 0030H
MAIN:
MOV SP, #40H ;堆栈指针设置为40H,即数据从41H单元开始存放
SETB IT0;外部中断0采用下降沿触发
EX0 = 1; //开外部中断0
EA = 1;//开总中断
while(1)
{
P1 = byTemp;
byTemp = _crol_(byTemp,1);
Delay1s();
}
}
void inter_key() interrupt 0 using 0
{
P1 = 0xFF;
Delay3s();//延时5s
/***************一秒延时子程序******************/
void Delay3s(void) //误差0us
{
unsigned char a,b,c;
for(c=85;c>0;c--)
for(b=188;b>0;b--)
for(a=85;a>0;a--);
}
void Delay1s(void) //误差0us
相关文档
最新文档