实验二 外部中断实验

合集下载

外部中断实验原理

外部中断实验原理

外部中断实验原理一、实验原理外部中断是计算机科学中的一个重要概念,它允许程序在特定的事件发生时被唤醒或中断。

外部中断对于实现实时计算、多任务处理、异常处理等重要功能具有关键作用。

本实验旨在深入理解外部中断的工作原理,并通过实例分析来揭示其实际应用中的关键点。

二、详细内容分析1. 中断触发机制外部中断是由特定事件触发的,例如输入输出操作完成、定时器溢出、硬件错误等。

当中断触发条件满足时,硬件会保存当前程序的状态,并将控制权转移到指定的中断处理程序。

2. 中断优先级当多个中断同时发生时,系统需要根据一定的优先级规则来确定执行哪个中断处理程序。

中断优先级的高低取决于具体应用的需求,通常可以根据重要性和实时性要求来设定。

3. 中断处理程序中断处理程序(Interrupt Service Routine, ISR)是一段特定的代码,用于在发生中断时处理事件并做出响应。

ISR通常包括保存寄存器状态、处理中断事件、恢复寄存器状态以及执行相应的操作等步骤。

4. 中断嵌套与处理器状态在多任务操作系统中,可能存在多个中断同时发生的情况。

此时,系统需要根据优先级逐一处理中断,并保存每个中断处理前的处理器状态,以便在处理完中断后恢复到原来的状态。

5. 中断屏蔽与唤醒某些情况下,系统可能需要暂时屏蔽某些中断,以避免干扰关键任务的执行。

同时,某些中断可能需要唤醒睡眠状态的进程或线程。

这些操作需要通过特定的指令或机制来实现。

三、实例分析以一个简单的例子来说明外部中断的工作流程:假设我们有一个基于Linux 系统的嵌入式系统,当某个硬件设备完成一项任务(如数据传输)时,会触发一个外部中断。

系统会保存当前的任务状态,并执行相应的中断处理程序(ISR)。

ISR会读取硬件设备的数据,并执行相应的操作(如数据处理、任务调度等)。

在ISR执行完毕后,系统会恢复之前保存的任务状态,并继续执行之前的任务。

这个例子中,我们看到了外部中断如何被用于实时处理任务、唤醒睡眠状态的进程以及调度任务等操作。

实验二--外部中断实验报告

实验二--外部中断实验报告

桂林电子科技大学一、实验目的1 学习外部中断指令的基本使用方法;2 学习外部中断处理程序的编程方法。

二、实验内容1在实验一内容的基础上增加允许急救车优先通过的要求;2 急救车到达时(产生外部中断),交通信号为全红,以便让急救车通过3 急救车通过路口时间为10秒(四个红灯亮10秒)。

急救车通过后,交通灯恢复原状态(中断前的状态);4 中断申请信号为单脉冲“”。

三、实验原理图四、实验程序框五、实验步骤1、检查试验仪,确认相应单片机放置位置,确认无误后将试验仪的USB 数据线连接电脑;2、打开单片机电源开关,运行MEFlash 软件,确认电脑与试验仪连接成功;3、将A T89S52的P0和P2口用短接线LED 灯的端口相连;4、运行KC 编辑软件,调整好程序,并生成相应的.HEX 文件;5、使用MEFlash 软件,将生成的.HEX 文件烧录到单片机中,运行成功;6、测试中断是否运行正常,进行调试,确保程序正常运行。

六、实验程序清单#include<reg51.h>//*******延时1ms 秒********void delay(unsigned int i){unsigned int j;while(i--)交通灯程序的流程图{//对于11.0592M晶振延时越是1msfor(j=0;j<125;j++){{;}}}}//*****延时结束*******// k 代表黄灯闪烁的次数void blink(unsigned int k){for(;k>0;k--) //黄灯闪烁5次{P2=0xF0;delay(300);P2=0xFF;delay(300);}}//******主函数******//******主函数******void main(){P0=0x0F; //初始状态东西南北红灯全亮P2=0xFF;delay(2000) ;EA=1; //开启中断IT0=0 ;EX0=1;//D27到D24分别代表东西南北绿灯//D07到D04分别代表东西南北红灯// D23到D20四灯代表黄灯while(1){P0=0xCF; //南北红灯亮P2=0x3F; //东西绿灯亮delay(2000) ;P2=0xFF; //东西绿灯灭,黄灯闪烁5次blink(5);P0=0x3F; //东西红灯亮P2=0xCF; //南北绿灯亮delay(2000) ;P0=0x3F; //东西红灯亮,黄灯闪烁5次blink(5);}}void int0(void)interrupt 0{unsigned int Temp0;unsigned int Temp2;EA=0;Temp0=P0; //储存初始端口状态Temp2=P2;P0=0x0F; //东西红灯亮P2=0xFF; //南北绿灯亮delay(2000) ;P0=Temp0; //返回中断前端口状态P2=Temp2;EA=1;}七、实验分析该实验主要是检查外部中断的用法及其注意的事项(比如中断时要保护现场和恢复现场)。

汇编外部中断及NE555计数实验实验报告

汇编外部中断及NE555计数实验实验报告

外部中断及NE555计数实验11103070315 李青【实验内容】1、利用外部按键中断计数并用数码管显示计数值2、用51单片机T0、T1定时计数器对NE555产生的脉冲信号进行频率计数,频率送LCD显示(或数码管显示)【需要了解的知识】1、GPIO设定2、LCD显示原理,输入与输出及其原理3、定时计数器工作原理及频率测量4、NE555工作原理【实验预习】预读实验指导电子文档的实验十六、七及其前面的实验流程【实验设备】Keil C51软件、ICE52 仿真驱动、MEFlash编程软件、USB驱动程序【实验过程】实验一外部中断实验任务:利用单片机的外部中断功能进行计数,然后将计数值输出到数码管上显示。

K5键—计数值加1(外部中断0)K6键—计数值加1(外部中断1)3位数码管显示,最大计数值255实验步骤:1)首先在硬盘上建立一个文件夹;2)启动Keil C51软件;3)执行Keil C51软件的菜单“Project|New Project……”,弹出一个名为“Create New Project”的对话框。

输入工程文件名,选择保存路径uv2后缀,点击“保存”按钮;4)紧接着弹出“Options for Target‘Target 1’”,为刚才的项目选择ATMEL 的AT89S52的CPU。

选择之后,点击“确定”按钮;5)接下来弹出一个对话框提示你是否要把标准8051的启动代码添加项目中去,此时,点击“否”按钮;6)执行菜单“File|New……”,出现一个名为“Text1”的文档。

接着执行菜单“File|Save”弹出一个名为“Save As”的对话框,将文件名改为“.asm”后缀,然后保存;7)添加源程序文件到工程中,一个空的源程序文件建成。

单击Keil C51软件左边项目工作窗口“Target1”上的“+”,将其展开。

然后右击“Source Group1”文件夹弹出下拉菜单,单击其中的“Add Files to Group‘Source Group1’”项;8)在弹出的对话框中先选择文件类型为“Asm Source file (*.s*;*.src;*.a*)”,这时对话框内创建的空的源程序文件已经出现在项目工作窗口的“Source Group1”文件夹中;输入源程序代码;9)点击工具栏“Options for target”按钮,弹出一个对话框,定义“Xtal”为11.0592.下面依序是存储模式、程序空间大小等设置,均用默认值即可。

单片机外部中断实验报告

单片机外部中断实验报告

实验三外部中断实验报告班级:学号:姓名:教师:一、实验目的1、掌握单片机外部中断的原理及过程。

2、掌握单片机外部中断程序的设计方法。

3、掌握单片机外部中断时中断方式的选择方法。

二、实验内容如下图所示,P3.2设为输入,P2设为输出位,连有8个发光二极管D1~D8。

每当发生外部中断时,发光二极管以向下流水灯的方式点亮。

分别选择边沿触发外部中断放是和电平触发外部中断方式两种。

三、编程提示1、P3口是8位准双向口,具有双重功能:第一功能和P1口一样,作为输入输出口,也有字节操作和位操作两种方式,每一位可分别定义为输入或输出;第二功能定义如下:P3.0 RXD 串行输入口P3.1 TXD 串行输出口P3.2 INT0 外部中断0请求输入线P3.3 INT1 外部中断1请求输入线P3.4 T0定时器/计数器T0外部计数器脉冲输入线P3.5 T1定时器/计数器T1外部计数器脉冲输入线P3.6 WR外部数据存贮器写脉冲输出线P3.7 RD外部数据存贮器读脉冲输出线2、各中断服务程序入口地址:外部中断0 03H定时器/计数器T1溢出中断0BH外部中断1 13H定时器/计数器1BH串行口中断23H3、外部中断的产生条件中断允许寄存器IE:EA ES ET1 EX1 ET0 EX0(1)外部中断源允许中断(中断0:EX0=1;中断1:EX1=1)。

(2)CPU开中断(EA=1)。

(3)外部中断方式CPU发出中断申请。

4、外部中断方式的选择控制TCON:TF1 TR1 TF0 TR0 IE1 IT1 IE0 IT0IT0是选择文字则外部中断0请求(INT0)边沿触发方式或电平触发方式的控制位。

前一方式IT0=1,后一方式IT0=0。

IT1是选择外部中断1请求(INT1)为边沿触发方式或电平触发方式的控制位。

前一方式IT1=1,后一方式IT1=0。

当8031复位后,TCON被清0。

5、外部中断电路负脉冲作为中断请求信号时,为了保证中断的唯一性,必须加上消除开关抖动的电路或者去抖动延时程序,保证每次只产生单脉冲,构成边沿触发方式外部中断电路。

实验二、外部中断

实验二、外部中断

实验二外部中断实验一、实验目的1.掌握外部中断技术的基本使用方法2.掌握中断处理程序的编写方法二、实验原理1.外部中断的初始化设置的三项内容:中断总允许即EA=1,外部中断允许即EXi=1(i=0或1),中断方式设置。

中断方式设置一般有两种方式:电平方式和脉冲方式.2.中断服务的关键:(1)保护进入中断时的状态。

堆栈有保护断点和保护现场的功能使用PUSH,在转中断服务程序之前把单片机中有关寄存单元的内容保护起来。

注:中断程序自动保护PC,对其做入栈操作(2)用POP指令恢复中断时的现场。

(先进后出)3.中断控制原理:中断控制是提供给用户使用的中断控制手段。

实际上就是控制一些寄存器,51系列用于此目的的控制寄存器有四个:TCON 、IE 、SCON 及IP。

TCON格式SCON格式三、实验内容参考实验程序(主程序为P1口输出跑马灯程序),编写中断子程序使得发生外部中断0,且为下降沿触发时,LED灯全亮。

中断结束后LED继续接上次状态进行跑马灯闪烁。

注:注意保护现场。

且编译器不支持工作组寄存器名(R0-R7)入栈,需要对栈地址操作。

例:PUSH 06H ;把R6入栈等同 PHSHU R6四、实验步骤1.使用单片机最小应用系统1模块,P1接发光二极管,INTO接单次脉冲输出端。

2.用串行数据通信线连接计算机与仿真器,把仿真器插到模块的锁紧插座中,请注意仿真器的方向:缺口朝上。

3.打开Keil uVision2仿真软件,首先建立本实验的项目文件,接着添加**.ASM源程序,进行编译,直到编译无误。

4.打开模块电源和总电源,点击开始调试按钮,点击RUN按钮运行程序。

五、参考程序ORG 0000HLJMP STARTORG 0030HSTART: MOV A, #0FEHOUTPUT: MOV P1,ARL AACALL DELAYLJMP OUTPUTDELAY: MOV R6,#0MOV R7,#0MOV R5#5DELAYLOOP: ;延时程序DJNZ R6,DELAYLOOPDJNZ R7,DELAYLOOPDJNZ R5,DELAYLOOP RETEND。

实验二 外部中断实验(南大)

实验二  外部中断实验(南大)

南昌大学实验报告学生姓名:学号:专业班级:卓越通信班实验类型:□验证□综合□√设计□创新实验日期:201303 实验成绩:实验二外部中断实验一.实验目的掌握S3C2410A处理器外部中断的引脚功能设置;掌握中断初始化以及中断服务函数的编写。

二.实验设备硬件:PC机1台MagicARM2410教学实验开发平台1台软件:Windows 98/2000/XP操作系统ADS 1.2集成开发环境三.实验内容设置GPF4引脚为外部中断EINT4功能,下降沿触发模式。

初始化S3C2410A 中断控制器,设置EINT4为IRQ中断,并使能中断允许。

初始化完成后,等待外部中断产生。

中断服务程序里负责把LED1控制口输出信号取反,清除中断标志后退出中断。

四.实验原理a 独立按键KEY1电路使用了GPF4口,设置GPFCON寄存器可以选择GPF4引脚为外部中断EINT4功能,此时通过按下KEY1键即可触发外部中断;b 对于S3C2410A的众多中断源,通过设置INTMOD寄存器可将它们分为IRQ中断或FIQ中断,一般只设置一个中断源为FIQ中断。

对于多个IRQ 中断,通过PRIORITY寄存器可以设置中断的优先级,一般将其设置为0使用默认固定的优先级即可;c 设置INTMSK寄存器使能某个中断源的中断允许,有些中断源还需要设置SUBMASK寄存器使能(比如UART的发送中断和接收中断);d 对于外部中断EINT4~EINT23,由于它们在S3C2410A的中断控制器中不是独立中断源(EINT4~EINT7共用一个中断源,EINT8~EINT23共用另一个中断源),所以还需要设置EINTMASK寄存器来使能某一个外部中断;e 由于S3C2410A的中断控制器不是向量中断控制器,即处理器硬件不能自动获取对应于中断源的中断服务程序地址,所以在IRQ中断服务程序中要通过中断标志寄存器INTPND来获得对应的中断服务程序地址(参考ARM Executable Image for DeviceARM2410工程模板的Target.c文件,其中的IRQ_Exception函数)。

实验二、外部中断

实验二、外部中断

实验二外部中断实验一、实验目的1.掌握外部中断技术的基本使用方法2.掌握中断处理程序的编写方法二、实验原理1.外部中断的初始化设置的三项内容:中断总允许即EA=1,外部中断允许即EXi=1(i=0或1),中断方式设置。

中断方式设置一般有两种方式:电平方式和脉冲方式.2.中断服务的关键:(1)保护进入中断时的状态。

堆栈有保护断点和保护现场的功能使用PUSH,在转中断服务程序之前把单片机中有关寄存单元的内容保护起来。

注:中断程序自动保护PC,对其做入栈操作(2)用POP指令恢复中断时的现场。

(先进后出)3.中断控制原理:中断控制是提供给用户使用的中断控制手段。

实际上就是控制一些寄存器,51系列用于此目的的控制寄存器有四个:TCON 、IE 、SCON 及IP。

TCON格式SCON格式三、实验内容参考实验程序(主程序为P1口输出跑马灯程序),编写中断子程序使得发生外部中断0,且为下降沿触发时,LED灯全亮。

中断结束后LED继续接上次状态进行跑马灯闪烁。

注:注意保护现场。

且编译器不支持工作组寄存器名(R0-R7)入栈,需要对栈地址操作。

例:PUSH 06H ;把R6入栈等同 PHSHU R6四、实验步骤1.使用单片机最小应用系统1模块,P1接发光二极管,INTO接单次脉冲输出端。

2.用串行数据通信线连接计算机与仿真器,把仿真器插到模块的锁紧插座中,请注意仿真器的方向:缺口朝上。

3.打开Keil uVision2仿真软件,首先建立本实验的项目文件,接着添加**.ASM源程序,进行编译,直到编译无误。

4.打开模块电源和总电源,点击开始调试按钮,点击RUN按钮运行程序。

五、参考程序ORG 0000HLJMP STARTORG 0030HSTART: MOV A, #0FEHOUTPUT: MOV P1,ARL AACALL DELAYLJMP OUTPUTDELAY: MOV R6,#0MOV R7,#0MOV R5#5DELAYLOOP: ;延时程序DJNZ R6,DELAYLOOPDJNZ R7,DELAYLOOPDJNZ R5,DELAYLOOP RETEND。

计算机原理实验-外部中断实验

计算机原理实验-外部中断实验

计算机原理与应用实验实验名称:外部中断实验学院:信息与通信工程学院班级: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 所示。

实现中断功能_实验报告(3篇)

实现中断功能_实验报告(3篇)

第1篇一、实验目的1. 理解中断的概念和作用。

2. 掌握单片机中断系统的基本原理和配置方法。

3. 学会编写中断服务程序,实现外部中断和定时器中断的应用。

4. 通过实验加深对中断系统在实际应用中的理解。

二、实验原理中断是计算机系统中一种重要的机制,它允许CPU在执行程序过程中,响应某些外部或内部事件,从而暂停当前程序的执行,转而处理这些事件。

单片机的中断系统主要包括外部中断和定时器中断两种类型。

三、实验环境1. 单片机:80C512. 开发环境:Keil for 80513. 仿真软件:Proteus4. 实验电路:外部按钮电路、LED灯电路、定时器电路四、实验内容1. 外部中断实验(1)实验目的:学习外部中断的工作原理,掌握外部中断的配置和编程方法。

(2)实验步骤:a. 创建80C51固件项目,并在Keil中编写程序。

b. 配置外部中断源,设置中断优先级。

c. 编写外部中断服务程序,实现LED灯的闪烁。

d. 在Proteus中搭建实验电路,并进行仿真测试。

(3)实验结果:当按下按钮时,LED灯闪烁,松开按钮后LED灯熄灭。

2. 定时器中断实验(1)实验目的:学习定时器中断的工作原理,掌握定时器中断的配置和编程方法。

(2)实验步骤:a. 创建80C51固件项目,并在Keil中编写程序。

b. 配置定时器工作模式,设置定时时间。

c. 编写定时器中断服务程序,实现LED灯的闪烁。

d. 在Proteus中搭建实验电路,并进行仿真测试。

(3)实验结果:定时器中断触发后,LED灯闪烁,达到设定时间后停止闪烁。

五、实验分析1. 外部中断实验分析通过外部中断实验,我们了解了外部中断的工作原理和配置方法。

在实验中,我们设置了外部中断源,并编写了中断服务程序,实现了LED灯的闪烁。

这表明外部中断可以有效地响应外部事件,并执行相应的操作。

2. 定时器中断实验分析通过定时器中断实验,我们掌握了定时器中断的配置和编程方法。

实验二 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流程图;
五、思考题
六、收获和体会。

实验2-外部中断实验

实验2-外部中断实验
①先点击S0、再点击S1,观察L0、L1亮的现象,分析中断的发生情况。
②先点击S1、再点击S0,观察L0、L1亮的现象,分析中断的发生情况。
③改变连线,把P3.2、P3.3引脚相连接;点击S0或S1,则 和 应该同时中断,观察L0、L1亮的现象,分析中断的发生情况。
3)观察中断优先级和中断嵌套
去掉P3.2、P3.3引脚之间的连接线,恢复P3.2引脚与S0相连,P3.3引脚与S1相连。修改主函数中的中断优先级控制寄存器IP,设置 (或 )为高优先级、 (或 )设为低优先级,编译下载程序,然后全速运行。
单片机、电阻、发光二极管、按钮在器件库中的名字分别为:AT89C51、RES、LED-RED(红)、button。
(2)编写程序
需要分别编写主函数和两个外中断服务函数。
主函数:置两个外中断均为下降沿方式触发(对TCON寄存器);设置两个外中断优先级均为低级(对IP寄存器);开两个外中断和中断总控位(对IE寄存器);最后使程序一直处于等待中断状态。
①先点击S0、再点击S1,观察中断现象,分析中断嵌套情况。
②先点击S1、再点击S0,观察中断现象,分析中断嵌套情况。
③使用短路连接块,把P3.2、P3.3引脚相连接;点击S0或S1,则 和 应该同时中断,观察中断现象,分析中断嵌套情况。
④不改变P3.2、P3.3引脚相连接;修改主函数中的中断优先级控制寄存器IP,使 、 的优先级交换;点击S0或S1,则 和 应该同时中断,观察中断现象,分析中断嵌套情况。
//3、T0中断,产生基本延时2.5ms,并且调用显示函数
//根据以上功能,该文件为进一步编写实验程序、实际应用程序,提供了基础
#include<reg52.h>
#definedelay5ms(x){delay_xms=x*2;while(delay_xms<255);}//用于延时的宏,x的1个数值对应延时5ms。x<=127。

实验外部中断实验报告

实验外部中断实验报告

实验三定时中断实验一、实验目得1、掌握51单片机外部中断得应用。

2、掌握中断函数得写法。

3、掌握定时器得定时方法。

4、掌握LED数码管得显示。

二、实验内容1、用外部中断0测量负跳变信号得累计数,同时在LED数码管上显示出来。

2、用外部中断改变流水灯得方式。

3、用定时器T1得方式2控制两个LED以不同周期闪烁。

使用定时器T1得方式2来控制P0、0、P0、1引脚得两个LED分别以1s与2s得周期闪烁。

三、实验仿真硬件图在Proteus软件中建立如下图所示仿真模型并保存。

}同级自然优先级:外部中断0→定时器T0中断→外部中断1→定时器T1中断→串行口中断。

中断优先级别得设定:实验二要求:初始状态为P0、0~P0、7得8个LED显示灯依次循环点亮;外部中断0服务程序为8个LED灯,左4个,右4个闪烁8次,外部中断1服务程序8个LED灯,间隔闪烁8次。

⑴设定外部中断0为高优先级,先执行外部1中断,过程中用外部0中断来将其中断,反之不行。

注意保护现场。

⑵设定外部中断1为高优先级,先执行外部0中断,过程中用外部1中断来将其中断,反之不行。

注意保护现场。

实验三(调试下列程序,在错误行后面注明错误及改正方法):#include <reg51、h>#define ucharunsigned char;sbit D0=P1^0;sbitD1=P1^1;uchar a,b;void main(){EA=1;ET1=1;TMOD=0x20;ﻩTL1=6;ﻩTR0=1;a=0;ﻩb=0;ﻩwhile(1);}void t1()interrupt 1{ﻩa++;ﻩb++;if(a=1000){D0=~D0ﻩa=0;}if(b=4000)ﻩ{ﻩD1=~D1;ﻩﻩb=0;}写出源程序,并注释实验报告格式实验三定时中断实验学院: 专业:年级: 实验时间: 姓名: 学号: 指导教师:一、实验目得1、掌握51单片机外部中断得应用。

实验二 外部中断实验

实验二 外部中断实验

实验二外部中断实验一、实验目的1.学会使用Keil μVision3和Proteus软件进行单片机汇编语言和C语言程序设计与开发。

了解和掌握MCS-51单片机的中断组成、中断控制工作原理、中断处理过程、外部中断的中断触发方式, 掌握中断功能的编程方法。

二、实验内容1.单片机的P1.0引脚连接LED指示灯D0。

单片机的P3.2引脚(INT0)连接按键开关K, 作为中断源, 每次按键都会触发INT0中断。

在INT0中断服务程序中将P1.0端口的信号取反, 使LED指示灯D0在点亮和熄灭两种状态间切换, 产生LED指示灯由按键开关K控制的效果。

三、实验程序ORG 0000H ;MCS-51复位入口AJMP MAIN ;转入主程序ORG 0003H ;INTO中断入口AJMP EX_INTO ;转入中断服务程序ORG 0100H ;主程序入口MAIN: MOV SP,#40H ;中断初始化设置堆栈SETB IT0 ;中断请求信号设置为边沿触发方式 SETB EA ;开放总中断SETB EX0 ;允许INTO中断HERE: SJMP HERE ;原地踏步(处理其他事务)等待中断到来ORG 0200H ;中断服务程序EX_INTO:CPL P1.0 ;改变指示灯状态RETI ;中断返回END四、实验原理图五、实验仿真及结果当开关断开时,LED指示灯D1熄灭,如图1所示:图1当按键开关接通时, LED指示灯D1点亮, 如图2所示:图2六、实验总结通过本次实验, 进一步熟悉了对Keil μVision3软件的操作, 另外还接触到了Proteus软件。

掌握了中断功能的编程方法, 加上两个上述软件, 使得单片机汇编语言得以仿真。

进一步深化了解和掌握MCS-51单片机的中断的相关知识, 包括中断的组成、工作原理、处理过程以及外部中断的中断触发方式。

实验外部中断实验报告

实验外部中断实验报告

实验三 定时中断实验一、 实验目得1、 掌握5 1单片机外部中断得应用。

2、 掌握中断函数得写法。

3、 掌握定时器得立时方法。

4、掌握LED 数码管得显示。

二、 实验内容1、 用外部中断0测量负跳变信号得累计数,同时在LED 数码管上显示出来。

2、用外部中断改变流水灯得方式。

3、 用定时器T1得方式2控制两个LED 以不同周期闪烁。

使用立时器T1得方式2来控制P0、0、P0、1引脚得两个LED 分别以Is 与2s 得 周期闪烁。

三、 实验仿真硬件图在Pr o 2 us 软件中建立如下图所示仿真模型并保存。

同级自然优先级:外部中断0 —宦时器TO 中断一外部中断1 -泄时器T1中断一串行口中断。

中断优先级别得设上:PO.ft'ADOPO.l'ADlXTAL2PO.2AD2 RO3AD3R04.'AO IPO.SAD5 M&ACeRSTR07.AD7P2AA8 P2.伽 ALE EXP2.2A10 P23A11 P24A12P25A13P2.6A14 PZ7.'A15Pi.O P M PJ.OfiXD P3.1TXD P2 P32>F37uPl.3 P33ET Pl 4 P3 4TO Pi .5 P3 5'Tl PM P3A77T1 Pl 7P37«TO39 1, 38 :£37 3835 1 34 I33 32X1 12MU1is 29AT68C51实验二要求:初始状态为P0、0~P0、7得8个LED 显示灯依次循环点亮;外部中断0服务程序为8 个LED 灯,左4个,右4个闪烁8次,外部中断1服务程序8个LED 灯,间隔闪烁8次。

(1)设世外部中断0为髙优先级,先执行外部1中断,过程中用外部0中断来将其中断•反之不行。

注意保护现场。

⑵设泄外部中断1为高优先级,先执行外部0中断,过程中用外部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; }。

外部中断实验遇到的问题和解决方法

外部中断实验遇到的问题和解决方法

外部中断实验遇到的问题和解决方法一、实验背景外部中断是指由外部设备或者其他引起的中断请求,例如按键、传感器等。

在单片机开发中,外部中断是非常重要的一种中断方式,它可以使单片机在执行某些任务时可以及时响应外界的事件。

二、实验目的本实验旨在通过使用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、掌握51单片机外部中断得应用。

2、掌握中断函数得写法。

3、掌握定时器得定时方法。

4、掌握LED数码管得显示。

二、实验内容1、用外部中断0测量负跳变信号得累计数,同时在LED数码管上显示出来。

2、用外部中断改变流水灯得方式。

3、用定时器T1得方式2控制两个LED以不同周期闪烁。

使用定时器T1得方式2来控制P0、0、P0、1引脚得两个LED分别以1s与2s得周期闪烁。

三、实验仿真硬件图在Proteus软件中建立如下图所示仿真模型并保存。

}同级自然优先级:外部中断0→定时器T0中断→外部中断1→定时器T1中断→串行口中断。

中断优先级别得设定:实验二要求:初始状态为P0、0~P0、7得8个LED显示灯依次循环点亮;外部中断0服务程序为8个LED灯,左4个,右4个闪烁8次,外部中断1服务程序8个LED灯,间隔闪烁8次。

⑴设定外部中断0为高优先级,先执行外部1中断,过程中用外部0中断来将其中断,反之不行。

注意保护现场。

⑵设定外部中断1为高优先级,先执行外部0中断,过程中用外部1中断来将其中断,反之不行。

注意保护现场。

实验三(调试下列程序,在错误行后面注明错误及改正方法):#include <reg51、h>#define ucharunsigned char;sbit D0=P1^0;sbitD1=P1^1;uchar a,b;void main(){EA=1;ET1=1;TMOD=0x20;ﻩTL1=6;ﻩTR0=1;a=0;ﻩb=0;ﻩwhile(1);}void t1()interrupt 1{ﻩa++;ﻩb++;if(a=1000){D0=~D0ﻩa=0;}if(b=4000)ﻩ{ﻩD1=~D1;ﻩﻩb=0;}写出源程序,并注释实验报告格式实验三定时中断实验学院: 专业:年级: 实验时间: 姓名: 学号: 指导教师:一、实验目得1、掌握51单片机外部中断得应用。

实验二_单片机P1口输入输出及中断实验

实验二_单片机P1口输入输出及中断实验

单片机P1口输入输出及外部中断实验一、实验目的1、学习P1口的使用方法。

2、学习延时子程序的编写和使用。

3、熟练在汇编软件环境下编写、修改、调试、和运行硬件程序4、熟悉汇编语言二、实验说明1、P1口做输出口,接八只发光二极管,编写程序,使发光二极管循环点亮。

2、P1.0,P1.1作输入口接两个拨动开关,P1.2,P1.3作输出口,接两个发光二极管,编写程序读取开关状态,将此状态,在发光二极管上显示出来。

编程时应注意P1.0,P1.1作为输入口时应先置1,才能正确读入值。

3、用单次脉冲申请中断,在中断处理程序中使P1.0的输出状态发生反转,并通过发光二极管观察P1.0的电平。

三、实验仪器计算机伟福软件(lab2000P )四、实验内容1、P1口是准双向口。

它作为输出口时与一般的双向口使用方法相同。

由准双向口结构可知当P1口用为输入口时,必须先对它置“1”。

若不先对它置“1”,读入的数据是不正确的。

2、8051延时子程序的延时计算问题,计算和估算延时子程序的时间。

3、保护进入中断时的状态,并在退出中断之前恢复进入时的状态。

4、必须在中断程序中设定是否允许中断重入,即设置EXO位。

1> 关于延时子程序的时间计算,查指令表可知MOV和DJNZ指令均需用两个机器周期,在6MHz晶振时,一个机器周期时间长度为12/6MHZ,所以上面延时子程序该的执行时间为:(256×255+2)×2×12÷6 ≈261ms2>采用P1口作输出P1口是准双向口,它作为输出口使用时具有锁存功能。

实验所需要LED电平显示电路如图所示。

3>采用P1口作输入和输出由P1口的准双向口结构可知,当作为输入口时,必须先对它置“1”。

若不先对它置“1”,读入的数据是不正确的。

实验所需要LED电平显示电路和逻辑电平开关电路如图所示。

思考题1、改变延时时间,变快或者变慢,观察效果;2、第2个实验在每个端口增加软件延时,延时时间变快或者变慢,观察拨动开关响应效果;3、改变流水灯的运行方向;4、改变流水灯的运行模式,双灯对跑,双灯一起跑。

外部中断应用实验

外部中断应用实验

外部中断应用实验一、实验目的和要求1、掌握中断系统外部中断源的使用方法。

2、掌握延时程序的编程及使用方法。

3、掌握Proteus软件与Keil软件的使用方法。

4、掌握单片机系统的硬件和软件设计方法。

二、设计要求1、用Proteus软件画出电路原理图,在单片机的P1.0口线上接按键K0 ,作为外部中断源0使用,用于开启波形,在单片机的P1.1口线上接按键K1 ,作为外部中断源1使用,用于关闭波形。

2、在单片机的P1.2口线上产生周期50mS的连续方波,在P 1.2口线上接示波器观察波形。

三、电路原理图实验一电路原理图:实验二电路原理图:四、实验程序流程框图和程序清单汇编程序清单:程序框图:实验一:ORG 0000H START: LJMP MAINORG 0100HLJMP LOOP1;ORG 0003HLJMP EXINT0ORG 0013HLJMP EXINT1 MAIN: SETB EASETB IT0SETB IT1SETB EX0SETB EX1MOV SP, #2FH;MOV TMOD, #01H;MOV TH0, #9EH;MOV TL0, #58H; LOOP1: JNB TF0, LOOP1CPL P1.2;CLR TF0MOV TH0, #9EH;MOV TL0, #58H;EXINT0: SETB TR0RETIEXINT1: CLR TR0RETIEND思考题:ORG 0000HLJMP MAINORG 0003HLJMP EXTER0LJMP IPTOMAIN: MOV SP, #60HMOV TMOD, #01HMOV IE, #83HMOV TH0, #0B1HMOV TL0, #0E0HMOV R1, #02H HERE:LJMP HERE DELAY:SETB TR1HEREY:JNB TF1, HEREYCLR TR1CLR TF1MOV TH1, #0D8HMOV TL1, #0F0HRETEXTER0: JBC F0, LLSETB F0SETB TR0LJMP HHLL:CLR F0CLR TR0HH: RETIIPTO: DJNZ R1, LOOP3CPL P1.2CPL ACC.0JNB ACC.0, LOOP2MOV R1, #03HLJMP LOOP3LOOP2: MOV R1, #02H LOOP3: MOV TH0, #0B1HMOV TL0, #0E0HRETIENDC语言程序清单:#define uchar unsigned char #define uint unsigned int#include <reg52.h>sbit P1_2=P1^2;void delay(void) //误差0us {unsigned char a,b,c;for(c=1;c>0;c--)for(b=38;b>0;b--)for(a=130;a>0;a--); }void main(){EA=1;IT0=1;IT1=1;EX0=1;EX1=1;PX0=1;TMOD=0X01;TH0=0X9E;TL0=0X58;while(1){while(!TF0);P1_2=!P1_2;TF0=0;TH0=0X9E;TL0=0X58;}}void INTT0() interrupt 0{TR0=1;}void INTT1() interrupt 2{TR0=0;} 程序框图:思考题程序清单:#define uchar unsigned char #define uint unsigned int#include <reg52.h>sbit P1_2=P1^2;a=0;void main(){EA=1;IT0=1;EX0=1;PX0=1;TMOD=0X01;TH0=0X63;TL0=0XC0;while(1){while(!TF0);P1_2=!P1_2;TF0=0;TH0=0X15;TL0=0XA0;while(!TF0);P1_2=!P1_2;TF0=0;TH0=0X63;TL0=0XC0;}}void INTT0() interrupt 0{ a++;if(a%2)TR0=1;elseTR0=0;}五、实验结果:程序框图:六、实验总结:本次实验中,我学会了外部中断的使用,用按键控制定时器产生波形的开关,外部中断实验中,应该注意的是通过延时来消除抖动。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

实验二外部中断实验
一、实验目的
1.掌握外部中断技术的基本使用方法
2.掌握中断处理程序的编写方法
二、实验原理
1.外部中断的初始化设置的三项内容:中断总允许即EA=1,外部中断允许即EXi=1(i=0或1),中断方式设置。

中断方式设置一般有两种方式:电平方式和脉冲方式.
2.中断服务的关键:
(1)保护进入中断时的状态。

堆栈有保护断点和保护现场的功能使用PUSH,在转中断服务程序之前把单片机中有关寄存单元的内容保护起来。

注:中断程序自动保护PC,对其做入栈操作
(2)用POP指令恢复中断时的现场。

(先进后出)
3.中断控制原理:
中断控制是提供给用户使用的中断控制手段。

实际上就是控制一些寄存器,51系列用于此目的的控制寄存器有四个:TCON 、IE 、SCON 及IP。

TCON格式(中断控制字)
TF1、TF0:定时器/计数器T的溢出中断请求标志位;
TR1、TR0:计数器控制位TR1(TR0)=1启动定时器TR1(TR0)=0停止计数器
IE1:外部中断请求1标志位;
IT1:IT1=0为低电平触发IT1=1为负跳变有效;
IE0:外部中断请求0标志位;
IT0:IT0=0为低电平触发IT0=1为负跳变有效;
复位后TCON被清零,中断请求被禁止。

SCON格式(触发方式中断控制字)
TI:串行口的发送中断请求标志位。

发送1帧串行数据后,硬件自动为TI置1。

注:CPU不会为T1清零,需要在中断程序中用软件为TI清零
RI:串行口接受中断请求标志位。

接收完1帧串行数据后,硬件自动为RI置1。

注:CPU不会为R1清零,需要在中断程序中用软件为RI清零
三、实验内容
参考实验程序(主程序为P1口输出跑马灯程序),编写中断子程序使得发生外部中断0,且为下降沿触发时,LED灯全亮。

中断结束后LED继续接上次状态进行跑马灯闪烁。

注:注意保护现场。

且编译器不支持工作组寄存器名(R0-R7)入栈,需要对栈地址操作。

例:PUSH 06H (累加器支持左移右移不支持压栈出栈; 工作组寄存器不支持左移右移支持压栈出栈);把R6入栈等同PHSHU R6
四、实验步骤
1.使用单片机最小应用系统1模块,P1接发光二极管,INTO接单次脉冲输出端。

2.用串行数据通信线连接计算机与仿真器,把仿真器插到模块的锁紧插座中,请注意仿真器的方向:缺口朝上。

3.打开Keil uVision2仿真软件,首先建立本实验的项目文件,接着添加**.ASM源程序,进行编译,直到编译无误。

4.打开模块电源和总电源,点击开始调试按钮,点击RUN按钮运行程序。

五、参考程序
汇编语言:
ORG 0000H
LJMP START
ORG 0003H
LJMP INT
ORG 0030H
INT: PUSH 05H
PUSH 06H
PUSH 07H
MOV P1,#00H
ACALL DELAY
POP 07H
POP 06H
POP 05H
RETI
START: MOV IE,#81H
MOV TCON, #01H
MOV A, #0FEH
OUTPUT: MOV P1,A
RL A
ACALL DELAY
LJMP OUTPUT
DELAY: MOV R6, #0
MOV R7, #0
MOV R5, #5
DELAYLOOP: ;延时程序
DJNZ R6, DELAYLOOP
DJNZ R7, DELAYLOOP
DJNZ R5, DELAYLOOP
RET
END
C语言:
#include<reg51.h>
#include<intrins.h>
sbit P3_2=P3^2;
void delay(unsigned char i);
void main()
{
unsigned char ii;
unsigned char m;
P1=0xFE;
P3_2=1;
EA=1;
EX0=1;
IT0=0;
m=0xFE;
while(1)
{
for(ii=0;ii<8;ii++)
{
P1=_crol_(m,ii);
delay(5);
}
}
}
void delay(unsigned char i) //延时函数,无符号字符型变量i为形式参数{
unsigned char j,k,l; //定义无符号字符型变量j和k
for(l=0;l<i;l++)
{
for(k=0;k<255;k++) //双重for循环语句实现软件延时
for(j=0;j<255;j++);
}
}
void int_0() interrupt 0
{
P1=0x00;
delay(5);
}
六、附加要求:
将中断内容变为前五个灯进行一次跑马灯,然后中断结束。

汇编语言:
ORG 0000H
LJMP START
ORG 0003H
LJMP INT
ORG 0030H
INT: PUSH ACC
PUSH B
PUSH DPL
PUSH DPH
PUSH 00H
PUSH 01H
PUSH 02H
PUSH 03H
PUSH 04H
PUSH 05H
PUSH 06H
PUSH 07H
MOV R0,#05H
MOV A,#0FEH
INTOUT: MOV P1,A
RL A
ACALL DELAY
DJNZ R0,INTOUT
POP 07H
POP 06H
POP 05H
POP 04H
POP 03H
POP 02H
POP 01H
POP 00H
POP DPH
POP DPL
POP B
POP ACC
RETI
START: MOV IE,#81H
MOV TCON, #01H
MOV A, #0FEH
OUTPUT: MOV P1,A
RL A
ACALL DELAY
LJMP OUTPUT
DELAY: MOV R6, #0
MOV R7, #0
MOV R5, #5
DELAYLOOP:
DJNZ R6, DELAYLOOP
DJNZ R7, DELAYLOOP
DJNZ R5, DELAYLOOP
RET
END
C语言:
#include<reg51.h>
#include<intrins.h>
sbit P3_2=P3^2;
void delay(unsigned char i);
void main()
{
unsigned char m;
unsigned char n;
P3_2=1;
EA=1;
EX0=1;
IT0=1;
m=0xFE;
while(1)
{
for(n=0;n<8;n++)
{P1=_crol_(m,n);
delay(5);
}
}
}
void int_0() interrupt 0
{
unsigned char ii;
unsigned char kk;
kk=0xFE;
for(ii=0;ii<5;ii++)
{
P1=_crol_(kk,ii);
delay(5);
}
}
void delay(unsigned char i) //延时函数,无符号字符型变量i为形式参数{
unsigned char j,k,l; //定义无符号字符型变量j和k
for(l=0;l<i;l++)
{
for(k=0;k<255;k++) //双重for循环语句实现软件延时
for(j=0;j<255;j++);
}
}。

相关文档
最新文档