外部中断的检测及其应用

外部中断的检测及其应用
外部中断的检测及其应用

目录

摘要 (1)

1 软件介绍 (2)

1.1 protues仿真软件 (2)

1.2 C编译器Keil介绍 (3)

2 外部中断源的特点及控制 (4)

2.1 IE 寄存器的特点及设置 (4)

2.2 中断标志位TCON的特点及设置 (5)

2.3 外部中断标志的编程方式 (6)

3 定时/计数器 (7)

3.1 定时/计数器的结构和工作原理 (7)

3.2 TMOD定时器/计数器方式寄存器 (7)

3.3 TCON定时器/计数器控制寄存器 (8)

4 定时器/计数器的设计 (10)

4.1 任务分析及设计方案 (10)

4.2 理论分析 (10)

4.3 流程图 (11)

4.4 程序设计 (12)

4.5 Protues仿真 (13)

4.6 仿真结果 (14)

5 小结 (15)

摘要

中断控制是单片机最重要的技术之一,实时控制及人机交换等都是通过中断控制实现的。使用中断控制技术的主要优点表现在:

1)能提高CPU 工作效率。在中断方式下,当计算机需要进行输入/输出操作时,可以启动相应的外部设备,此后计算机继续执行原来的程序;与此同时,相应外部设备启动后能独立进行操作,只有当它需要与CPU 交换信息时,才发出中断申请。

2)能使几个外部设备并行工作。当计算机需要与若干外部设备进行输入/输出操作时,可以分别启动不同外部设备,让它们各自进行自己的工作。当它们准备就绪分别或同时向计算机提出申请时,计算机可根据设置的优先级别,逐个响应外部设备的中断请求,

不会造成紊乱。

3)能进行实时处理。如在监测系统中,对温度、压力、流量、湿度参数的采集,根据捕捉到的信息,利用中断及时进行处理等。由此可见,中断系统越强大,单片机的应用范围就越广。本文主要涉及的内容是单片机外部中断、中断系统的应用及其程序的调试。

本次课程设计的要求是:由中断引脚输入500Hz的脉冲信号,要求每中断一次,P1.0输出一个500us的同步负脉冲,P1.1输出一个1ms的同步正脉冲。完成这个课程设计首先需要编写正确的程序代码,然后通过Keil进行编译,使用Proteus 画出电路图,导入编译生成的hex文件进行仿真。本次课程设计完成了简单的外部中断应用,输出脉冲波形,其中涉及到中断及定时计数等知识。

1 软件介绍

1.1 proteus仿真软件

Proteus 软件是来自英国Labcenter electronics 公司的EDA 工具软件,Proteus 软件有20年的历史,在全球广泛使用。

除了具有和其它EDA 工具一样的原理布图、PCB 自动或人工布线及电路仿真的功能外,Proteus革命性的功能是,它的电路仿真是交互的,可视化的,针对微处理器的应用,还可以直接在基于原理图的虚拟原型上编程,并实现软件源码级的实时调试,如有显示及输出,还能看到运行后输入输出的效果,配合系统配置的虚拟仪器如示波器、逻辑分析仪等,可以测量仿真的波形及记录仿真数据。在不需要硬件设备投入的情况下Proteus 软件可以建立完整的电子学习设计开发环境,缩短研发周期,并且降低开发成本。

Proteus 组合了高级原理布图、混合模式SPICE 仿真,PCB 设计以及自动布线来实现一个完整的电子设计系统。此系统受益于多年来的持续开发,被《电子世界》在其对PCB 设计系统的比较文章中评为最好产品—“The Route to PCB CAD”。Proteus 产品系列也包含了我们革命性的VSM 技术,用户可以对基于微控制器的设计连同所有的周围电子器件一起仿真。用户甚至可以实时采用诸如LED/LCD、键盘、RS232 终端等动态外设模型来对设计进行交互仿真。

其功能模块:—个易用而又功能强大的ISIS 原理布图工具;PROSPICE 混合模型SPICE 仿真; ARESPCB 设计。PROSPICE 仿真器的一个扩展PROTEUS VSM:便于包括所有相关的器件的基于微处理器设计的协同仿真。此外,还可以结合微控制器软件使用动态的键盘,开关,按钮,LED 甚至LCD 显示CPU 模型。Proteus 主要特征:

1)支持许多通用的微控制器,如 ARM,PIC,AVR,以及8051.

2)交互的装置模型包括:LED 和LCD 显示,RS232 终端,通用键盘

3)强大的调试工具,包括寄存器和存储器,断点和单步模式

4) IAR C-SPY 和 Keil uVision4 等开发工具的源层调试

1.2 C编译器Keil介绍

Keil C51是美国Keil Software公司出品的51系列兼容单片机C语言软件开发系统,与汇编相比,C语言在功能上、结构性、可读性、可维护性上有明显的优势,因而易学易用。Keil提供了包括C编译器、宏汇编、连接器、库管理和一个功能强大的仿真调试器等在内的完整开发方案,通过一个集成开发环境(uVision)将这些部分组合在一起。

KeilSoftware公司推出的uVision4是一款可用于多种8051MCU的集成开发环境(IDE),该IDE同时也是PK51及其它开发套件的一个重要组件。除增加了源代码、功能导航器、模板编辑以及改进的搜索功能外,uVision3还提供了一个配置向导功能,加速了启动代码和配置文件的生成。此外其内置的仿真器可模拟目标MCU,包括指令集、片上外围设备及外部信号等。uVision3提供逻辑分析器,可监控基于MCUI/O引脚和外设状态变化下的程序变量。uVision4提供对多种最新的8051类微处理器的支持,包括AnalogDevices的ADuC83x和ADuC84x,以及Infineon的XC866等。

2 外部中断源的特点及控制

80C51 共有5 个中断源,它们在程序存储器中各有固定的中断服务入口地址,当CPU 响应中断时,硬件自动形成各自的入口地址,由此进入中断服务程序,从而实现了正确的转移。其中有2 个来自单片机的外部—外部中断源。对外部中断的控制主要有:1)外部中断的开放或禁止;2)触发电平方式;3)优先级别的选择。这些控制机构分别位于IE 、TCON 和IP 等3 个专用寄存器中。

这些中断源的符号,名称,产生条件及中断服务程序的入口地址见表2.1

表 2.1 外部中断源的特点及控制

2.1 IE 寄存器的特点及设置

IE 寄存器是由一个中断允许总控制位和各中断源的中断允许控制位构成的,由此实现2 级中断允许控制。IE 寄存器中的各位定位如图2.2所示。

表 2.2 IE 寄存器的特点及设置

IE 各位具体说明如下: EA :总开关控制位

EA=0,屏蔽所有中断请求;EA=1,开放中断。

中断源符号

名称 中断引起原因

中断服务程序入口地址

0INT 外部中断0 3.2P 引脚的低电平或下降沿信号 0003H

1INT

外部中断1

3.3P 引脚的低电平或下降沿信号

0013H 0T 定时器0中断 定时/计数器0计数回零溢出 000BH 1T 定时器1中断 定时/计数器1计数回零溢出

001BH

2T

定时器2中断 定时器2中断(TF2或T2EX )信号 002BH /TI RI

串行口中断

串行通信完成一帧数据发送或接受引起中断

0023H

EA

-

ET2 ES ET1 EX1

ET0 EX0

中断总控 允/禁

不用 T2 允/禁

串行口 允/禁

T1 允/禁

1INT

允/禁 T0 允/禁

0INT

允/禁

只有开放总中断后,各中断源的申请才可能被响应。

EX0 :外部中断0中断允许位

EX0=0 禁止外部中断0 申请中断;EX0=1 允许外部中断0 申请中断。

EX1 :外部中断1 中断允许位

EX1=0 禁止外部中断1 申请中断;EX1=1 允许外部中断1 申请中断。

对外部中断请求的设置,可用位操作指令,也可用字节操作指令,如开放外中断0。用位操作指令:SETB EA,CPU 打开总中断;SETB EX0,允许外部中断0 中断。用字节操作指令:MOV IE,#81H 或MOV A8H,#81H。

比较这2 种指令对IE 的赋值方法,显然用位指令赋值直观性强,但书写麻烦些;用字节指令赋值,直观性差,但书写简单。在实际运用中,采取哪种方式,可根据自己对指令系统掌握的熟练程度来选择。

2.2 中断标志位TCON的特点及设置

80C51 还为每个中断源设置有标志位,2 个外部中断源的标志位锁存在专用寄存器TCON 之中,如图2.3。

表2.3 TCON的特点及设置

TF1 TR1 TF0 TR0 TE1 IT1 IE0 IT0

T1请求有/无T1工作

有/无

T0请求

有/无

T0工作

有/无

INT请求

有/无

INT1方式

下沿/低电平

INT请求

有/无

INT方式

下沿/低电平

各控制位的含义:

IE0 :外部中断0 中断请求标志

IT0 :外部中断0 中断触发方式控制位

IT0=0,外部中断0 为电平触发方式(低电平有效);IT0=1 ,外部中断0 为边沿触发方式(下降沿有效)

IE1 :外部中断1 中断请求标志

IT1 :外部中断1 中断触发方式控制位

IT1=0 ,外部中断1 为电平触发方式;IT1=1 ,外部中断1 为边沿触发方式。

电平触发方式适合于外部中断输入以低电平输入且中断服务程序能清除外部中断请求源的情况,而边沿触发方式适合于以负脉冲形式输入的外部中断请

求。在运用中,可根据具体情况合理选择。

2.3 外部中断标志的编程方式

合理编写程序是实现对中断控制的最基本方法,外部中断标志的编程方式有中断方式和查询方式。

中断方式是指CPU 在接收到外部中断请求时,暂时停止主程序的执行,转去处理相关的服务程序,之后再返回继续运行原程序。中断方式下的编程一般有如下步骤:1)开中断;2)设置中断优先级;3)中断源的相关控制;4)编写中断服务程序。

查询方式就是CPU 主动地监测中断源的状态并做出相应反应。其编程步骤如下:1)关中断;2)中断源的相关设置;3)关中断查询及相关处理。

2 种方式的特点是:在中断方式下,CPU 除了响应中断之外的时间都用于执行主程序,中断源与CPU实现了并行工作。而在查询方式下,除初始化工作外,CPU 完全用于处理中断标志的查询及中断标志有效后的处理,中断一直占用着CPU 的时间,并没有处于并行工作状态。

3 定时/计数器

3.1 定时/计数器的结构和工作原理

8XX51单片机的定时/计数器T1由寄存器TH1、TL1组成,T0由寄存器TH0、TL0组成。他们均为8位寄存器,在特殊功能寄存器中占地址8AH-8DH。他们用于存放定时或计数的初始值。此外,内部还有一个8位的方式寄存器TMOD和一个8位的控制寄存器TCON,用于选择和控制定时/计数器的工作。

定时/计数器实质上是一个加1计数器,它可以用于定时方式,也可以用于计数方式,这两种工作方式实质上都是对脉冲计数,只不过所记脉冲的来源不同。

1)定时器/计数器为计数工作方式

计数器T0,T1的计数脉冲分别来自于引脚T0(P3.4)或引脚T1(P3.5)上的外部脉冲。计数器对外部脉冲的下降沿进行加1计数,直到记满预订值回零,置位定时/计数器中断标志位TF0(或TF1),产生溢出中断。由于检测一个由“1”到“0”的跳变需要两个机器周期,前一个机器周期测出“1”,后一个周期测出“0”,故计数脉冲的最高频率不得超过fosc/24。

2)定时器/计数器为定时工作方式

计数器的加1信号由振荡器的12分频信号产生,即每过一个机器周期,计数器加1,直至计满溢出为止。显然,定时器的定时时间与系统的振荡频率有关。因一个机器周期等于12个振荡周期,所以计数频率fcount=1/12osc。如果晶振为12MHz,则计数周期为:

T=1/(12×106)Hz×1/12=1μs

这是最短的定时周期。若要延长定时时间,则需要改变定时器的初值,并要适当选择定时器的长度(如8位、13位、16位等)。

3.2 TMOD定时器/计数器方式寄存器

定时器方式控制寄存器TMOD在特殊功能寄存器中,字节地址为89H,无位地址。其高4位用于选择T1的工作方式,低4位用于选择T0的工作方式。

TMOD的格式如表3.1所示。

表 3.1 TMOD定时器/计数器方式寄存器

D7 D6 D5 D4 D3 D2 D1 D0

符号GATE C/T M1 M0 GATE C/T M1 M0

各控制位的含义:

GATE:门控信号。GATE=0,TRx=1时启动定时/计数器工作;GATE=1,TRx=1,INTx=1时启动定时/计数器工作。

C/T:定时器/计数器选择位。C/T=1,为计数器方式;C/T=0,为定时器方式。

M1M0:工作方式选择位。定时器/计数器的4种工作方式由M1M0设定。其工作方式如表3.2所示:

表 3.2 TMOD工作方式

M1M0 工作方式功能描述

00 工作方式0 13位计数器

01 工作方式1 16位计数器

10 工作方式2 自动再装入8位计数器

11 工作方式3 定时器0:分成两个8位计数器;

定时器1:停止计数

定时器/计数器方式控制寄存器TMOD不能进行位寻址,只能用字节传送指令设置定时器工作方式,低半字节定义为定时器0,高半字节定义为定时器1。复位时,TMOD所有位均为0。

3.3 TCON定时器/计数器控制寄存器

TCON在特殊功能寄存器中,字节地址为88H,位地址(由低位到高位)为88H 一8FH。TCON是一个多功能的寄存器,其格式如表3.3所示:

表 3.3 TCON定时器/计数器控制寄存器TCON

地址8FH 8EH 8DH 8CH 8BH 8AH 89H 88H

符号位TF1 TR1 TF0 TR0 IE1 IT1 IE0 IT0

在TCON寄存器中,定时/计数器的控制仅用了其中的高4位,其意义如下:TF1:T1溢出中断请求标志

TF1=1,T1有溢出中断请求;TF1=0,T1无溢出中断请求。

TR1:T1运行控制位

TR1=1,启动T1工作;TR1=0,停止T1工作。

TF0:T0溢出中断请求标志

TF0=1,T0有溢出中断请求;TF0=0,T0无溢出中断请求。

TR0:T0运行控制位

TR0=1,启动T0工作;TR0=0,停止T0工作。

4 定时器/计数器的设计

4.1 任务分析及设计方案

由题目要求由中断引脚输入脉冲信号,所以既可以采用外部中断也可以采用计数器中断。我采用的是计数器中断,在计数器中断设计过程通过T1对脉冲进行计数,利用T0进行定时。

本次设计使用PROTUES软件进行仿真,在电路设计中要对软件里的各元件的属性有一定的了解,对元件的选择也要仔细,在使用WAVE仿真器仿真时候要把每个生成的HEX文件保存好,然后把所写的程序烧写到硬件电路中,这样就可以在硬件电路中显示结果。

8XX51的定时/计数器件,使用前应现对其内部的寄存器进行设置,以对它进行控制,这称为初始化编程,8XX51的定时/计数器初始化编程步骤:

(1)根据定时器时间要求或计数器要求计算计算器初值;

(2)将工作方式控制字写入TMOD寄存器;

(3)将计数器初值写入THx和TRx寄存器;

(4)启动定时器(或计数器),即将TRx置位。

4.2 理论分析

初态p1.0输出高电平(系统复位时实现),P1.1输出低电平,T0选用方式2计数方式(记一个脉冲,初值为FFH)。当加在P3.4上的外部脉冲负跳变时,T0加1,计数器溢出,程序查询到TF0为1时,改变T0为500us定时工作方式,并且P1.0输出0,P1.1输出1。T0第一次定时500us溢出后,P1.0恢复1,T0第二次定时500us溢出后,P1.1恢复0,T0恢复计数方式,对P3.4上的外部脉冲计数,重复前述过程。

设定时500us的初始值为X,则

(256-X)*2us=500us

X=6

4.3 流程图

开始

P1.1取0

T0为方式2计数器

装入初值并启动T0

N

检测跳变信号

关闭T0

设定T0为500us定时

P1.1置1,P1.0清0

启动定时器

N

检测第一个500us

P1.0恢复0

N

检测第二个500us

P1.1复0

关闭T0

返回开始

图4.3 程序设计流程图

4.4 程序设计

BEGIN:MOV TMOD,#6H ;设T0为方式2计数器

MOV TH0,#0FFH ;计数一个脉冲

MOV TL0,#0FFH

SETB P1.0

CLR P1.1 ;P1.1初值为0

SETB TR0 ;启动计数器

DELL:JBC TF0,RESP1 ;检测外跳变信号

AJMP DELL

RESP1:CLR TR0

MOV TMOD,#02H ;重置T0为500us定时

MOV TH0,#06H ;重置定时初值

MOV TL0,#06H

SETB P1.1 ;P1.1置一

CLR P1.0 ;P1.0清零

SETB TR0 ;启动定时/计数器

DEL2:JBC TF0,RESP2 ;检测第一次500us到否 AJMP DEL2

RESP2:SETB P1.0 ;P1.0恢复1

DEL3:JBC TF0,RESP3 ;检测第二次500us到否 AJMP DEL3

RESP3:CLR P1.1 ;P1.1复0

CLR TR0

AJMP BEGIN

4.5 Protues 仿真

根据程序设计和理论分析设计原理图如下图4.2所示:

图4.2 电路仿真图

元件及其主要参数设置: 单片机:AT89C51 晶振6MHZ

电阻:R1,R2,R3 阻值都为220欧姆 无极电容:C1,C2 都为33PF 极性电容:C3 10uF 500HZ 脉冲:幅度 5V

XTAL2

18

XTAL1

19

ALE 30EA

31

PSEN 29RST

9

P0.0/AD039P0.1/AD138P0.2/AD237P0.3/AD336P0.4/AD435P0.5/AD534P0.6/AD633P0.7/AD732P1.01P1.12P1.23P1.34P1.45P1.56P1.67P1.78

P3.0/RXD 10P3.1/TXD 11P3.2/INT012P3.3/INT113P3.4/T014P3.7/RD

17

P3.6/WR 16P3.5/T115P2.7/A1528P2.0/A821P2.1/A922P2.2/A1023P2.3/A1124P2.4/A1225P2.5/A1326P2.6/A1427U1

AT89C51

X1

CRYSTAL

C1

33pF

C2

33pF

C3

10u

R1220

R2

220

R3

220

VCC

500HZ 脉冲

A B C D

4.6 仿真结果

电路仿真结果如下图4.3所示:

图4.3 电路仿真结果

示波器显示的波形依次为脉冲信号的波形,P1.0端口和P1.1端口。

上述示波器的设置:水平方向每格为1mS,垂直方向每格代表5mV。从示波器显示的波形可以看出每中断一次,P1.0输出一个500us的同步负脉冲,P1.1输出一个1ms的同步正脉冲。通过仿真我们实现了程序和硬件的统一。

根据脉冲信号的频率和P1.0,P1.1的脉冲时间可得占空比为1/4,和1/2,与示波器的波形一致。

5 小结

做这次课程设计之前,我们也曾用Protues仿真过,但是这么就没用,已经觉得很陌生了。通过此次的课程设计,我认真的看了很多方面关于Protues仿真和单片机中断方面的书,我深深的体会到看书学习才是硬道理。这次课设我最大的收获是培养了自己独立思考的能力,同时也认识到自己的不足,自己的理论知识还是太少,在以后的学习中我应多看书多学习让自己在学识方面更加的充实。

作为一名电子信息工程专业的大三学生,我觉得做单片机课程设计是十分有意义的,而且是十分必要的。在已度过的大学时间里,我们大多数接触的是专业课。我们在课堂上掌握的仅仅是专业课的理论知识,而类似课程设计就给了我们很大的平台,让我们锻炼了实践能力,也学会把课堂上的基础知识应用到实际中去。在此,我要感谢我的室友在此次课设当中给了我很大的支持和帮助,在他们的帮助下我顺利的完成了课程设计。同时也要感谢我的母校能给我这次机会让我锻炼自己。

在设计的过程中有许多问题,比如自己的不足之处,对以前所学过的知识理解得不够深刻,掌握得不够牢固等。我们通过查阅大量有关资料,并在小组中互相讨论,交流经验和自学,若遇到实在搞不明白的问题就会及时请教老师,使自己学到了不少知识,也经历了不少艰辛,但收获同样巨大。

参考文献

[1] 李全利,迟荣强.单片机原理及接口技术[M].北京:高等教育出版社,2005:94-103.

[2] 杜洪林,周绍平.51 系列单片机中断方法分析与应用[J].机械与电器,2009(3):44.

[3] 李珍,付植桐.单片机原理与应用技术[M].北京:清华大学出版社,2003:94-107.

[4] 毕万新.单片机原理与接口技术[M].大连:大连理工大学出版社,2005:100-122.

[5] 吴飞青,丁晓,李林功,等.单片机原理与应用实践指导[M].北京:机械工业出版社,2009:2-12.

实验五 外部中断应用实验

外部中断应用实验 设计性试验 2012年11月28日星期三第三四节课 一、实验目的 1、掌握中断系统外部中断源的使用方法。 2、掌握延时程序的编程及使用方法。 3、掌握Proteus软件与Keil软件的使用方法。 4、掌握单片机系统的硬件和软件设计方法。 二、设计要求 1、用Proteus软件画出电路原理图,在单片机的P1.0口线上接按键K0 ,作为外部中断源0使用,用于开启波形,在单片机的 P1.1口线上接按键K1,作为外部中断源1使用,用于关闭波形。 2、在单片机的P1.2口线上产生周期50mS的连续方波,在P1.2口线上接示波器观察波形。 三、电路原理图

四、实验程序流程框图和程序清单及实验结果 /******************** 实验五外部中断应用实验 要求:(1)在单片机的P1.0口线上接按键K0 ,作为外部中断源0使用,用于开启波形,在单片机的 P1.1口线上接按键K1,作为外部中断源1使用,用于关闭波形。 (2)在单片机的P1.2口线上产生周期50mS的连续方波,在P1.2口线上接示波器观察波形。 **********************/ ORG 0000H START: LJMP MAIN ORG 0003H LJMP EXINT0 ORG 0013H LJMP EXINT1 ORG 000BH LJMP TTC0 ORG 0100H MAIN: MOV SP, #2FH ;堆栈指针初始化 MOV IE, #10000111B;EA - - ES ET1 EX1 ET0 EX0 MOV TMOD, #01H ;设置定时器T/C0为工作方式1 MOV TH0, #9EH ;设置定时器T0的计数初值为25ms MOV TL0, #58H SETB IT0 ;设置外部中断0为脉冲触发 SETB IT1 ;设置外部中断1为脉冲触发 HERE: LJMP HERE ;等待中断 /*定时器T0中断服务程序*/ ORG 0200H TTC0: CPL P1.2

外部中断实验

1 外部中断实验 一、实验目的 1掌握外部中断技术的基本使用方法 2掌握中断处理程序的编写方法 二、实验说明 1、外部中断的初始化设置共有三项内容:中断总允许即EA=1,外部中断允许即EXi=1(i=0或1),中断方式设置。中断方式设置一般有两种方式:电平方式和脉冲方式,本实验选用后者,其前一次为高电平后一次为低电平时为有效中断请求。因此高电平状态和低电平状态至少维持一个周期,中断请求信号由引脚INT0(P3.2)和INT1(P3.1)引入,本实验由INT0(P3.2)引入。 2、中断服务的关键: a 、保护进入中断时的状态。 堆栈有保护断点和保护现场的功能使用PUSH 指令,在转中断服务程序之前把单片机中有关寄存单元的内容保护起来。 b 、必须在中断服务程序中设定是否允许中断重入,即设置EX0位。 c 、用POP 指令恢复中断时的现场。 3、中断控制原理: 中断控制是提供给用户使用的中断控制手段。实际上就是控制一些寄存器,51系列用于此目的的控制寄存器有四个:TCON 、IE 、SCON 及IP 。 4、中断响应的过程: 首先中断采样然后中断查询最后中断响应。采样是中断处理的第一步,对于本实验的脉冲方式的中断请求,若在两个相邻周期采样先高电平后低电平则中断请求有效,IE0或IE1置“1”;否则继续为“0”。所谓查询就是由CPU 测试TCON 和SCON 中各标志位的状态以确定有没有中断请求发生以及是那一个中断请求。中断响应就是对中断请求的接受,是在中断查询之后进行的,当查询到有效的中断请求后就响应一次中断。 INT0端接单次脉冲发生器。P1.0接LED 灯,以查看信号反转。 三、实验内容及步骤 1、使用单片机最小应用系统1模块,P1.0接发光二极管,INTO 接单次脉冲输出端。 2、安装好仿真器,用串行数据通信线连接计算机与仿真器,把仿真头插到模块的单片机插座中,打开模块电源,打开仿真器电源。 3、启动计算机,打开Keil 仿真软件,进入仿真环境。选择仿真器型号、仿真头型号、CPU 类型。 4、打开 中断.ASM 源程序,编译无误后,全速运行程序,连续按动单次脉冲产生电路的按键,发光二极管每按一次状态取反,即隔一次点亮。 5、可把源程序编译成可执行文件,烧录到89C51芯片中。 四、流程图及源程序 1、流程图 保护现场 设置初始状态 设置中断控制寄存器 开始 中断入口

Atmega128外部中断程序

//static unsigned char tel[11]; static unsigned char zz=1; unsigned char ATma[20]; static unsigned char zz0=1; static unsigned char mmm=0; void exteral_interrupt6()//外部中断服务函数初始化 { CLI(); //关闭中断 // DDRE&=~(1<

51单片机独立按键程序查询法和外部中断两种

//以下程序都是在VC++6.0 上调试运行过的程序,没有错误,没有警告。 //单片机是STC89C52RC,但是在所有的51 52单片机上都是通用的。51只是一个学习的基础平台,你懂得。 //程序在关键的位置添加了注释。 //用//11111111111111111代表第一个程序。//2222222222222222222222222代表第二个程序,以此类推 //1111111111111111111111111111111111111111111111111111111111111111111 //1111111111111111111111111111111111111111111111111111111111111111111 /****************************************************************************** * * 实验名: 左右流水灯实验 * 使用的IO : LED使用P2,键盘使用P3.1 * 实验效果: 按下K1键, * 注意: ******************************************************************************* / #include #include #define GPIO_LED P2 sbit K1=P3^1; void Delay10ms( ); //延时10ms /****************************************************************************** * * 函数名: main * 函数功能: 主函数 * 输入: 无 * 输出: 无 ******************************************************************************* / void main(void) { unsigned int i,j; j=0xfe; //1111_1110 while(1) { GPIO_LED=j; if(K1==0) //检测按键K1是否按下 { Delay10ms(); //消除抖动 if(K1==0) {

实验3:外部中断实验指导书

《—嵌入式系统原理与应用—》实验指导书 黄鹏程、谢勇编写 适用专业:计算机科学与技术 物联网工程 厦门理工学院计算机与信息工程院(系) 2016 年 3 月

实验3:外部中断实验 实验学时:2 实验类型:(演示、验证√、综合、设计研究) 实验要求:(必修√、选修) 一、实验目的 1. 理解中断的概念及其在嵌入式系统中的应用; 2. 熟悉LPC1700系列CortexM3 微控制器的NVIC的配置; 3. 熟悉LPC1700系列CortexM3 微控制器外部中断的控制。 二、实验内容 在EasyARM1768开发板的硬件平台上,基于流水灯显示实验,结合向量中断控制器NVIC和外部中断,设计并实现外部中断实验。要求实现三种方式的流水灯实现,并且通过三个按键利用通过外部中断实现三种不同方式的切换。 三、实验原理、方法和手段 中断对嵌入式系统来说是很重要的一个概念,利用中断,可以开发出很接近产品的嵌入式系统。市场上大部分的不带嵌入式操作系统的嵌入式系统都采用了“前后台系统”来实现产品功能,这其中的前台就是中断机制。故我们要理解中断的概念,并且能够应用中断到实际的嵌入式系统中来。 图1 前后台系统

图2 中断处理流程示意图 1、 中断向量控制器(NVIC ) 嵌套向量中断控制器(NVIC )是 Cortex-M3 处理器的一个内部器件,它与 CPU 内核紧密耦合,共同完成对中断的响应,降低了中断延时,使得最新发生的中断可以得到高效处理。 它能够管理中断的各种事务,比如使能或禁止外设中断源的中断,设置外设中断源的优先级,挂起中断,查看外设中断源的中断触发状态等。然后把中断信号给ARM 内核。NVIC 的应用示意图如下所示: 图3 NVIC 的作用

阅读实例演练

A Of all systems of symbols,language is the most highly developed. It has been pointed out that human beings,by agreement,can make anything stand for anything. Human beings have agreed,in the course of centuries of mutual (相互的)dependency,to let the various noises that they can produce with their lungs,throats,tongues,teeth,and lips systematically stand for certain happenings in their nervous system. We call that system of agreements language. There is no necessary connection between the symbol and that which it stands for. Just as social positions can be symbolized by feathers worn on the head,by gold on the watch chain,or by a thousand other things according to the culture we live in,so the fact of being hungry can be symbolized by a thousand different noises according to the culture we live in. However obvious these facts may appear at first glance,they are actually not so obvious as they seem except when we take special pains to think about the subject. Symbols and the things they stand for are independent of each other,yet we all have a way of feeling as if,and sometimes acting as if,there were necessary connections. For example,there are people who feel that foreign languages are unreasonable by nature:foreigners have such funny

单片机外部中断实验(附C语言程序)

单片机外部中断实验(附c程序) 一、实验目的 掌握外部中断的C语言和汇编语言编程方法,会用外部中断解决实际应用问题。 。 二、实验内容 8051C51单片机P2.0接一个发光二极管LED1、P2.1接一个发光二极管LED2,P3.2接一个开关、P3.3接一个开关要求实现以下功能: (1)合上、P3.3断开时LED1闪烁 (2)P3.2断开、P3.3合上时LED2闪烁 (3)P3.2合上后(不断开)再合上P3.3,LED1闪烁LED2不闪烁 (4)P3.3合上后(不断开)再合上P3.2,LED2不闪烁LED1闪烁 试编写C语言和汇编语言程序 使用自然优先级就可以 也可 XO 高级X1低级PX0=1 PX1=0 四、实验电路 五、参考程序(自己完成) C程序: Include Sbit P2_0=P2^0; Sbit P2_1=P2^1; Sbit P3_2=P3^2; Sbit P3_3=P3^3; void delay02s(void) //延时0.2秒子程序 { unsigned char i,j,k; for(i=20;i>0;i--) for(j=20;j>0;j--) for(k=248;k>0;k--); }

Void main { EA=1; EX0=1; EX1=1; ITO=1; IT1=1; PX0=1; PX1=0; While(1); } Void int0(void) interrupt 0 { if(!P3_2) { While(1) { P2_0=1; delay02s(); P2_0=0; delay02s(); } } } Void int1(void) interrupt 2 { if(!P3_3) { While(1) { P2_1=1; delay02s(); P2_1=0; delay02s(); } } }

单个外部中断实验

一、 实验要求 在单片机的外中断输入引脚INT0————(或INT1———— ),接一个按键开 关来产生外部中断请求,通过P1口连接的8个LED 发光二极管的状态,来反映外中断的作用。 中断未发生时,P1口连接的8个LED 为流水状态,当按键 开关按下,即外部中断请求产生时,8个LED 呈现闪烁状态。按键开关松开,8个LED 又为流水状态。 二、 实验目的 (1) 理解掌握外部中断源、中断请求、中断标志、中断入口 等概念。 (2) 掌握中断程序的设计方法。 程序如下: ORG 0000H //程序入口 LJMP MAIN //跳入主程序入口MAIN ORG 0003H //INT0中断入口 LJMP INT0P ORG 0030H MAIN: SETB EA //中断允许总开关控制位 SETB EX0 //允许外部中断0中断 SETB PX0 //外部中断0中断为高优先级 START:MOV R2,#8 MOV A,#0FEH //为点亮引脚发光二极管需写入P1口的点亮控制码 LOOP: MOV P1,A //点亮控制码写入P1口,点亮相应的LED

LCALL DELAY //调用延时子程序 RL A //点亮控制码循环左移,点亮下一位 DJNZ R2,LOOP //判断左移是否超过8位,未超过继续循环 LJMP START //左移循环已8次,再重新进行下一次循环点亮 INT0P: PUSH PSW //保护现场 PUSH Acc NOLIG: JNB IE0,IT0R MOV P1,#00H LCALL DELAY MOV P1,#0FFH LCALL DELAY LJMP NOLIG IT0R:RETI DELAY: MOV R5,#60 //延时子函数 D1: MOV R6,#20 D2: MOV R7,#248 D3: DJNZ R7,D3 DJNZ R6,D2 DJNZ R5,D1 RET END 程序如图:

基于51单片机的外部中断实例

51单片机一般有两个外部中断输入端,并允许外部中断源以低电平或负边沿两种触发方式输入中断请求信号。本例就是利用一只按钮,在按下时产生的负边沿触发外部中断。 1 硬件设计 将一只按钮接在外部中断输入0(12脚),八支发光二极管分别接在P0.0~P0.7,其电路如下图所示。 ⒉软件设计 通过按下按钮SW触发外部中断,从而改变发光二极管D1~D8的亮、灭,当第一次按下按钮时,只有D1发光二极管亮;第二次按下按钮时,只有D2发光二极管亮;第三次按下按钮时,只有D3发光二极管亮;……第八次按下按钮时,只有D8发光二极管亮;第九次按下按钮时,D1~D8发光二极管全亮;第十次按下按钮时,D1~D8发光二极管全都不亮;第十一次按下按钮时,只有D1发光二极管亮; 按钮SW触发外部中断,从而控制D1~D8亮灭的详细C51程序如下。 /***************外部中断****************/ #include unsigned char count=0; //外部中断计数 unsigned char F0=0; main(){ F0=0;

IE=0X81;//打开外部中断0和总中断使能或者(EX0=1;EA=1) IT0=1; //标志位清零,开中断 ,边沿激活(或者TCON|=0X01) while(1) { while(F0==0); switch(count%10){ case(0): P0=0XFF;break; case(1): P0=0XFE;break; case(2): P0=0XFD;break; case(3): P0=0XFB;break; case(4): P0=0XF7;break; case(5): P0=0XEF;break; case(6): P0=0XDF;break; case(7): P0=0XBF;break;case(8): P0=0X7F;break; case(9): P0=0X00;break; } F0=0; } } void int_int0() interrupt 0 //外部中断 { count++;F0=1; }

ATMega16单片机外部中断的使用

ATMega16单片机外部中断的使用[日期:2010-09-24 ] [来源:本站原创作者:佚名] [字体:大中小] (投递新闻) // Crystal: 7.3728Mhz ,功能:学习外部中断0的程序 #include #include #define LED_COM PORTA ^= (1 << PA6) // void port_init(void) { PORTA = 0x40; DDRA = 0x40; PORTB = 0x00; DDRB = 0x00; PORTC = 0x00; //m103 output only DDRC = 0x00; PORTD = 0x04; DDRD = 0x00; } #pragma interrupt_handler int0_isr:2 void int0_isr(void)

LED_COM; } //call this routine to initialize all peripherals void init_devices(void) { //stop errant interrupts until set up CLI(); //disable all interrupts port_init(); MCUCR = 0x00; GICR = 0x40; TIMSK = 0x00; //timer interrupt sources SEI(); //re-enable interrupts //all peripherals are now initialized } void main() { init_devices(); while(1)

外部中断实验

实验二外部中断实验 一.实验目的 1.学习外部中断技术的基本使用方法; 2.学习中断处理程序的编程方法。 二.实验设备及器材配置 1.单片机仿真实验系统。 2.计算机。 3.导线。 三.实验内容 在以下实验题目中任选一个或由老师指定。 1.P1口做输出口,接八只发光二极管,编写程序,使其循环点亮。以单脉冲输出端做为中断申请,当第一次产生外部中断时,使发光二极管全亮,延时1秒后返回中断之前的状态;当第二次产生外部中断时,使发光二极管全灭,延时1秒后返回中断之前的状态;以后如上述一直循环下去。 2.以单脉冲输出端做为中断申请,自行设计连线,用实验箱上的红、绿、黄发光二极管模拟交通灯控制。当有急救车通过时,两交通灯信号为全红,以便让急救车通过,延时10秒后交通灯恢复中断前状态。 四.实验原理说明 本实验中中断处理程序的应用,最主要的地方是如何保护进入中断前的状态,使得中断程序执行完毕后能返回中断前P1口及发光二极管的状态。除了保护累加器A、程序状态字PSW外、P1口的状态外,还要注意主程序中的延时程序和中断程序的延时程序不能混用,本实验中,主程序延时程序用的寄存器和中断延时用的寄存器也不能混用。 五.连线方法及实验电路 8031的P1.0—P1.7分别接发光二极管L0—L7,P3.2接单脉冲输出端“ ” 外部中断实验电路如图1-3所示。

图1-3 外部中断实验电路 六.思考题及实验报告要求 1.思考题 (1).试说明51系列单片机外部中断如何使用。 (2).修改程序,外部中断产生时,使发光二极管闪亮移位方向改变。 2.实验报告要求 (1).给出自行设计的程序清单、程序流程图。 (2). 总结实验过程中调试所遇到的问题和解决方法,写出编程调试的经验和体会。 VW集成调试软件使用 1.自建以字母开头的文件夹,推荐在F盘。 2.双击桌面V/W快捷方式 3.左击【文件】-新建文件-保存文件(存于自建文件夹下,以字母开头,后缀为.ASM或.C) 4.左击【文件】-新建项目-(以字母开头,存于自建文件夹下,加入自存的汇编或C源程序) 5.编写程序 6. 左击【项目】-编译,根据提示将提示的错误位置修改,编译,直至程序无错。 7.实验箱断电、连线完毕后,打开实验箱电源开关。左击【仿真器】,在出现的窗口中选择LAB8000\MCS51\8031AH或A T89C51,晶体频率:6000000Hz。 8. 左击【执行】-全速运行,在实验箱上观察运行结果。

单一外中断的应用

单一外中断的应用 在AT89S51单片机的P1口上接有8只LED。在外部中断0输入引脚INT0(P3.2)接有一只按钮开关k1。要求将外部中断0设置为电平触发。程序启动时,P1口上的8只LED全亮。每按一次按钮开关k1,使引脚INT0接地,产生一个低电平触发的外中断请求,在中断服务程序中,让低4位的LED与高4位的LED交替闪烁5次,然后从中断返回,控制8只LED再次全亮。原理电路及仿真结果如图所示。 参考程序如下: #include #define uchar unsigned char void Delay(unsigned int i) //延时函数Delay(),i为形式参数,不能赋初值 { unsigned int j; for(;i>0;i--) for(j=0;j<333;j++) //晶体震荡器为12MHz,j的选择与晶体振荡器的频率有关{;} //空函数 } void main() { EA=1; //总中断允许 EX0=1; //允许外部中断0中断 IT0=1; //选择外部中断0为跳沿触发方式 while(1) //循环 {P1=0;} //P1口的8只LED全亮 } void int0() interrupt 0 using 1 //外部中断0的中断服务函数

{ uchar m; //禁止外部中断0中断 EX0=0; //交替闪烁5次 for(m=0;m<5;m++) { P1=0x0f; //低4位LED灭,高4位LED亮 Delay(200); //延时 P1=0xf0; //高4位LED灭,低4位LED亮 Delay(200); //延时 EX0=1; //中断返回前,打开外部中断0中断} }

单片机 实验报告 外部中断应用

一、实验目的 1、学习外部中断技术的基本使用方法。 2、学习中断处理程序的编程方法。 二、实验环境 1、Lab6000通用微控制器实验系统。 2、计算机,W A VE 集成调试软件。 三、实验项目 用单次脉冲申请中断,在中断处理程序中对输出信号进行反转控制直流电机转、停。 四、涉及内容 中断服务程序的关键是: 1、保护进入中断时的状态,并在退出中断之前恢复进入时的状态。 2、必须在中断程序中设定是否允许中断重入,即设置EXO位。 3、选择相应的中断源,并设置中断屏蔽寄存器的相应位。 本实验使用了INTO中断。一般中断程序进入时应保护PSW,ACC以及中断程序使用但非其专用的寄存器。本实验的中断程序保护了PSW寄存器并且在退出前恢复了这个寄存器。另外中断程序中涉及到关键数据的设置时应关中断,即设置时不允许重入。本实验中没有涉及这种情况。 INTO(P3.2)接单次脉冲发生器。P1.0接继电器,以查看信号反转。 主程序框图外部中断子程序框图 五、实验步骤、记录和结果 实验电路连线 1、汇编语言 操作步骤如下: (1)创建一个项目目录:shiyan51。 (2)如实验一的七.2,修改编译器为汇编语言编译器。 (3)执行“新建文件”命令,在开发环境程序窗口中按汇编语言格式输入汇编语言源程序。将程序文件名取为shiyan51.asm保存到目录“shiyan51”。 Output equ P1.0 OutBuf equ 0 ljmp Start org 3 Interrupt0: push PSW ; 保护现场 cpl OutBuf ; 取反LED 连线连接孔1 连接孔2 1 继电器——输入P1.0 2 INT0 单脉冲—— 3 继电器——公共端+5V 4 继电器——常闭L0 5 继电器——常开L3 6 继电器——常开直流电机——至D/A 开始 设置初始状态 设置中断控制 寄存器 中断允许 中断入口保护现场状态位取反状态位输出恢复现场

单片机课程设计外部中断控制流水灯变化

单片机课程设计报告 设计题目:外部中断控制流水灯变化 姓名

一.设计目的 通过学习单片机工作原理和各种工作方式及各管脚的功能,想通过P3口的俩管脚和第二功能,即外部中断来使CPU响应,达到控制流水灯的目的。 二.设计要求 主程序实现8个灯从到依次亮灭,灯与灯 之间间歇约秒.当口是低电平时,灯从到依次亮灭,灯与灯之之间间歇约秒.循环3次返回主程序.当口是低电平时,灯全灭,当口是高电平时,返回主程序.当同时使和为低电平时,灯全灭,因为外部中断0的优先级高于外部中断1的优先级. 三.MCS-51的硬件结构: 四.P3口的状态 P3口是双功能口,默认为第一功能(通用I/O口),通过编程可设置第二功能。

五.中断传送方式: 中断方式则是在外设为数据传送做好准备之后,就向CPU发出中断请求信号(相当于通知CPU)。CPU接收到中断请求信号之后立即作 出响应,暂停正在执行的原程序(主程序),而转去外设的数据输入输 出服务,待服务完之后,程序返回。CPU再继续执行被中断的原程序。六.外部中断 外部中断是指从单片机外部引脚输入请求信号。输入/输出的中断请求、实时事件的中断请求、掉电和设备故障的中断请求都可以作为 外部中断源,从引脚INT0、INT1输入。 外部中断请求、有两种触发方式:电平触发及跳变(边沿)触发。 这两种触发方式可以通过对特殊功能寄存器TCON编程来选择。七.电路原理逻辑图如下:

灯亮情况 00全灭 01全灭 10从到依次亮灭 11从到依次亮灭八.实验硬件电路图如下

九.程序流程图如下 十.程序清单 ORG 0000H AJMP START ORG 0003H AJMP SER ORG 0013H AJMP SER1 ORG 0030H START: MOV IE,#85H ;外部中断0和1都开

外部中断0实验程序

51单片机第十四课外部中断0实验 #include #define uchar unsigned char #define uint unsigned int sbit led0=P0^0; unsigned char code smg_du[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x77,0x7c,0x39,0x5e, 0x79,0x71,0x00}; unsigned char code smg_we[]={0x08,0x18,0x28,0x38,0x48,0x58,0x68,0x78}; //************************************************ //延时函数,在12MHz的晶振频率下 //大约50us的延时 //************************************************ void delay_50us(uint t) { uchar j; for(;t>0;t--) for(j=19;j>0;j--); } //************************************************ //延时函数,在12MHz的晶振频率下 //大约50ms的延时 //************************************************ void delay_50ms(uint t) { uint j; for(;t>0;t--) for(j=6245;j>0;j--); } void main() {

单片机外部中断的使用

哈尔滨理工大学荣成学院 单片机原理及应用Protues 仿真实验 班级: 学号: 姓名: 日期:

实验三单片机外部中断的使用 一、实验名称:单片机外部中断的使用 二、实验目的 1.掌握在Keil环境下建立项目、添加、保存源文件文件、编译源程序的方法; 2.掌握运行、步进、步越、运行到光标处等几种调试程序的方法; 3.掌握在Proteus环境下建立文件原理图的方法; 4..实现Proteus与Keil联调软件仿真。 三、使用仪器设备编号、部件及备件 1.实验室电脑; 2.单片机实验箱。 四、实验过程及数据、现象记录 在Proteus 环境下建立如下仿真原理图,并保存为文件;

原理图中常用库元件的名称: 无极性电容:CAP 极性电容:CAP-ELEC 单片机:AT89C51 晶体振荡器:CRYSTAL 电阻:RES 按键:BUTTON 发光二极管:红色LED-RED 绿色LED-GREEN 蓝色LED-BLUE 黄色LED-YELLOW 在Keil环境下建立源程序并保存为.ASM文件,生成.HEX文件;汇编语言参考程序如下:ORG 0000H

LJMP MAIN ORG H ;外部中断0程序入口地址LJMP EXINT0 ORG 0030H MAIN: MOV SP,#60H ;堆栈指针初始化 SETB ;设置外部中断 0 为边沿触发 SETB ;开外部中断0 SETB ;开CPU总中断MOV A,#01H LOOP: MOV P1,A RL A CALL DELAY SJMP LOOP DELAY: MOV R1,# ;延时250ms子程序DL1: MOV R2,# DL2: MOV R3,# DJNZ R3,$ DJNZ R2,DL2 DJNZ R1,DL1 ;延时子程序返回EXINT0: PUSH PUSH CLR RS1 SETB RS0 MOV R0,# LP: MOV P1,#0FFH CALL DELAY MOV P1,#00H CALL DELAY DJNZ R0,LP POP PSW POP ACC ;中断返回END 将以上程序补充完整,流水时间间隔,闪烁时间间隔为250ms。C51语言参考程序: #include #include #define uchar unsigned char #define uint unsigned int void delay_ms(uint x) { uint i; uchar j; for(i=0;i

外部中断详解

7.1EXTI外部按键中断实验 前面我们学习了,LED灯和按键。实际上对于STM32来说,我们是学习了它的外设GPIO。这一节我们前面学习的内容,学习STM32的EXTI (External interrupt),即外部中断。 前面的按键章节中,我们检测按键是否被按下的方式是轮询检测的方式,这里我们改为使用中断检测的方式,提高CPU的效率。 7.1.1什么是中断 单片机中断系统的概念:什么是中断,我们从一个生活中的例程引入。比如说你在做A 事,但是突然间来了你想起来了更重要的B事,所以你马上去做B事了,做完之后再回来继续做A事,这个就是中断。 7.1.2什么是单片机的中断? 当CPU正在执行一个任务,但突然又发生了一个更高级的任务,CPU必须立即去执行的任务,所以CPU必须中断当前的任务,并保存该任务已经执行的状态和相关信息,然后转而去执行那个更加高级的任务,因此就引入了“中断”这个概念。 中断是指计算机在执行程序的过程中,当出现异常情况或特殊请求时,计算机停止现行程序的运行,转向对这些异常情况或特殊请求的处理,处理结束后再返回现行程序的间断处,继续执行原程序。中断是单片机实时地处理内部或外部事件的一种内部机制。当某种内部或外部事件发生时,单片机的中断系统将迫使CPU暂停正在执行的程序,转而去进行中断事件的处理,中断处理完毕后,又返回被中断的程序处,继续执行下去。 在程序里面也是一样的。举个例子可能会容易懂点,定时中断:比如你定时1ms,主程序在运行,每当1ms时间到后,就跑到定时中断子程序里面执行,执行完后再回到主程序(中断程序是1ms中断一次)。那对于整个系统来说中断能实现什么好处呢?下面我们给以说明:1)提高了CPU的效率 CPU是计算机的指挥中心,它与外围设备(如按键、显示器等)通讯的方法有查询和中断2种:查询的方法是无论外围IO是否需要服务,CPU每隔一段时间都要依次查询一遍,这种方法CPU需要花费一些时间在做查询服务工作。 中断则是在外围设备需要通讯服务时主动告诉CPU,这个时候CPU才停下当前工作去处理中断程序,不需要占用CPU主动去查询的时间,CPU可以在没有中断请求来临之前一直做自己的工作,从而提高了CPU效率。 2)可以实现实时处理 外设任何时刻都可能发出请求中断信号,CPU接到请求后及时处理,以满足实时系统的需要。 3)可以及时处理故障 计算机系统运行过程中难免会出现故障,有许多事情是无法预料的,如电源掉电、存储器出错、外围设备工作不正常等,这时可以通过中断系统向中断源CPU发送中断请求,由CPU及时转到相应的出错处理程序,从而提高计算机的可靠性。 7.1.3STM32中断的初步理解 神舟III号开发板的主芯片是STM32F103ZET6,它采用的是ARM公司的Cortex-M3内核。Cortex-M3内核支持256个中断,具有256级的可编程中断设置。但STM32并没有使用M3

单片机外部中断线的作用

单片机外部中断线的作用 这张图是一条外部中断线或外部事件线的示意图,图中信号线上划有一条斜线,旁边标志19字样的注释,表示这样的线路共有19套。图中的蓝色虚线箭头,标出了外部中断信号的传输路径。 首先外部信号从编号1的芯片管脚进入,经过编号2的边沿检测电路,通过编号3的或门进入中断挂起请求寄存器,最后经过编号4的与门输出到NVIC中断检测电路,这个边沿检测电路受上升沿或下降沿选择寄存器控制,用户可以使用这两个寄存器控制需要哪一个边沿产生中断,因为选择上升沿或下降沿是分别受2个平行的寄存器控制,所以用户可以同时选择上升沿或下降沿,而如果只有一个寄存器控制,那么只能选择一个边沿了。 接下来是编号3的或门,这个或门的另一个输入是软件中断/事件寄存器,从这里可以看出,软件可以优先于外部信号请求一个中断或事件,即当软件中断/事件寄存器的对应位为“1”时,不管外部信号如何,编号3的或门都会输出有效信号。 一个中断或事件请求信号经过编号3的或门后,进入挂起请求寄存器,到此之前,中断和事件的信号传输通路都是一致的,也就是说,挂起请求寄存器中记录了外部信号的电平变化。 外部请求信号最后经过编号4的与门,向NVIC中断控制器发出一个中断请求,如果中断屏蔽寄存器的对应位为“0”,则该请求信号不能传输到与门的另一端,实现了中断的屏蔽。明白了外部中断的请求机制,就很容易理解事件的请求机制了。图中红色虚线箭头,标出了外部事件信号的传输路径,外部请求信号经过编号3的或门后,进入编号5的与门,这个与门的作用与编号4的与门类似,用于引入事件屏蔽寄存器的控制;最后脉冲发生器的一个跳变的信号转变为一个单脉冲,输出到芯片中的其它功能模块。从这张图上我们也可以知道,从外部激励信号来看,中断和事件的产生源都可以是一样的。之所以分成2个部分,由于中断是需要CPU参与的,需要软件的中断服务函数才能完成中断后产生的结果;但是事件,是靠脉冲发生器产生一个脉冲,进而由硬件自动完成这个事件产生的结果,当然相应的联动部件需要先设置好,比如引起DMA操作,AD转换等;

外部中断详解

由于不少同学们,学习51单片机到了中断课程的时候,就开始进入一知半解的状态了,为此,开题一篇,以供大家搞明白,中断这回事。 我们还是用清晰点的逻辑来分析,围绕这四个部分来介绍,当然重点在于3和4部分。通篇我会以让初学者都能看懂的语言来说明。如果有专业一点的术语名词,我也尽量用简单易懂的描述。 注:本文旨在让大家理解什么是中断和怎么去设置。具体的东西有些考虑到深浅问题,则跳过不讲。如需了解,可自行查询资料 1.什么是中断? 2.为什么要有中断? 3.中断怎么触发? 4.怎么设置中断? 什么是中断? 举个老生常谈的例子——接电话。 在一个风和日丽的下午,你在电脑前看着视频,突然间,你桌上的手机来电话了,这时候你就该暂停视频,拿起手机接电话。 OK,回到单片机里来,我们之前写程序,都是在main函数里,甚至main 函数里的while(1)里执行我们的程序。这就相当于这个例子中的【看视频】,而【电话响了】这个过程,就相当于产生了中断,而【接电话】就是你在中断里做的事情。

为什么要有中断? 为什么要有中断,再举一个例子好了。 简单来讲,就是一些程序我们平时不执行,但到了某个特殊时刻,我们才去执行。所以我们就让这个特殊时刻产生一个中断,这时候,就跳去了我们特殊时刻才执行的函数里了。 什么情况会触发中断? 那么,我们什么情况下,单片机才会识别到中断,或者说,什么情况下,单片机才会跳入我们中断的函数里呢? 简单来讲,我们的中断大致分为三种,外部中断、定时器中断、串口中断。这三种的触发方式不一样。 外部中断:

顾名思义,就是单片机外部出现了一定的情况,才进入了中断。89c51有两个外部中断,一个是P3.2引脚,一个是P3.3引脚。分别是外部中断0和外部中断1。我们以外部中断0为例,当P3.2这个脚读到一个低电平(0)或者下降沿(由高电平变低电平)的时候,这时单片机自己就识别到了,所以就会自己跳入中断。 定时器中断: 定时器中断不再这详细说明,大致是讲,我们可以设置一个时间(或者叫闹钟),然后这个单片机会开始计时,当到了这个时间点,单片机就会跳入中断。串口中断: 串口中断也不再这赘述,大致是,当单片机的RX引脚接收到信号的时候,会自动进入中断。 怎么设置中断? OK,在了解这些之后,我们就可以开始来写程序,设置一个中断了。所有中断,如果要开启的话,我们就需要对单片机进行一个【初始化设置】,让单片机知道:“哦,你要老子开启外部中断。” 这时候,我们设置的东西,其实就是在设置单片机里的一些特殊功能寄存器。这时候涉及到一个新名词叫做寄存器,我们这么理解寄存器顾名思义他是存放数据的,需要的时候,我就把他拿出来。

单片机外部中断实验(附C语言程序)复习进程

单片机外部中断实验(附C语言程序)

单片机外部中断实验(附c程序) 一、实验目的 掌握外部中断的C语言和汇编语言编程方法,会用外部中断解决实际应用问题。 。 二、实验内容 8051C51单片机P2.0接一个发光二极管LED1、P2.1接一个发光二极管LED2,P3.2接一个开关、P3.3接一个开关要求实现以下功能:(1)合上、P3.3断开时LED1闪烁 (2)P3.2断开、P3.3合上时LED2闪烁 (3)P3.2合上后(不断开)再合上P3.3,LED1闪烁LED2不闪烁 (4)P3.3合上后(不断开)再合上P3.2,LED2不闪烁LED1闪烁 试编写C语言和汇编语言程序 使用自然优先级就可以 也可 XO 高级X1低级PX0=1 PX1=0 四、实验电路 五、参考程序(自己完成)

C程序: Include Sbit P2_0=P2^0; Sbit P2_1=P2^1; Sbit P3_2=P3^2; Sbit P3_3=P3^3; void delay02s(void) //延时0.2秒子程序{ unsigned char i,j,k; for(i=20;i>0;i--) for(j=20;j>0;j--) for(k=248;k>0;k--); } Void main { EA=1; EX0=1; EX1=1 ; ITO=1 ; IT1=1 ; PX0=1; PX1=0; While(1) ; } Void int0(void) interrupt 0 { if(!P3_2) { While(1) { P2_0=1; delay02s(); P2_0=0; delay02s(); } } } Void int1(void) interrupt 2 { if(!P3_3) {

相关文档
最新文档