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

合集下载

单片机外部中断实验(附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<reg52.h>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();}}}。

单片机 程序 外部中断中断

单片机 程序 外部中断中断

实验四外部中断与一位数码管静态显示实验一、实验目的1、通过实验掌握静态显示的工作原理;2、通过实验掌握如何设置控制外部中断的特殊功能寄存器;3、通过实验掌握外部中断的工作原理。

二、实验内容注:实验前先将矩阵按键模块的INT0和INT1插针用短路套短接。

1、根据电路图图1-6编写程序,由P1口控制八个LED,按键INT0和按键INT1控制八个LED循环点亮的方向。

初始状态八个LED全部熄灭,如果按键INT0按下,由电路板上LED7→LED0逐个移位点亮(每一时刻只有一个点亮),到LED0后停止;如果按键INT1按下,由电路板上LED0→LED7逐个移位点亮(每一时刻只有一个点亮),到LED7后停止;2、根据电路图图1-6编写程序,由P1口控制八个LED,按键INT0和按键INT1控制八个LED循环点亮的方向。

初始状态八个LED全部熄灭,如果按键INT0按下,由电路板上LED7→LED0逐个移位点亮(每一时刻只有一个点亮),到LED0再由LED7→LED0逐个移位点亮;如果按键INT1按下,由电路板上LED0→LED7逐个移位点亮(每一时刻只有一个点亮),到LED7再由LED0→LED7逐个移位点亮;3、根据电路图图1-6编写程序,由P1口控制八个LED,按键INT0和按键INT1控制八个LED循环点亮的方向。

初始状态八个LED由LED7→LED0逐个移位点亮,如果按键INT0按下,循环点亮的方向向右(每一时刻只有一个点亮);如果按键INT1按下,循环点亮的方向向左(每一时刻只有一个点亮),无论哪个LEDx正在被点亮,都从该位LEDx开始反向循环点亮;4、根据电路图图1-6编写一个P0口控制段选信号和P2.7引脚控制位选信号的一位数码管静态显示程序,初始状态显示“0”;如果按键INT0按下,显示加一后的数值;如果按键INT1按下,显示减一后的数值;如果加到“9”再加一,显示“0”;如果减到“0”再减一,显示“9”;5、根据电路图图1-6编写一个P0口控制段选信号和P2.7引脚控制位选信号的一位数码管静态显示程序,初始状态显示全灭;如果按键INT0按下,数码管的显示段被逐个移位点亮的方向“a段→f段”(每一时刻只有一段点亮,数码管顺时钟作画圈动画);如果按键INT1按下,数码管的显示段被逐个移位点亮的方向“f段→a段”(每一时刻只有一段点亮,数码管逆时钟作画圈动画);6、自己编写程序,设计数码管动态显示和按键的创意实验。

外部中断实验

外部中断实验

外部中断实验一、实验目的1. 掌握51单片机外部中断的应用。

2. 掌握中断函数的写法。

3. 掌握XL400实验板的使用。

二、实验内容1. 用外部中断改变流水灯的方式。

2. 用外部中断0测量负跳变信号的累计数,同时在八位LED数码管上显示出来。

三、实验步骤说明参考实验指导书第一部分实验工具简介中,XL400实验板的使用。

着重掌握外部中断0和外部中断1,本此实验使用外部中断0。

外部中断0请求,由P3.2管脚输入,通过IT0位来决定是低电平有效还是下降沿有效。

一旦输入信号有效,即向CPU申请中断,并建立IE0中断标志。

以外部中断0为例,开放中断源采用以下语句:EA=1; //开放中断总允许位EX0=1; //开放外部中断0允许位IT0=1; //置外部中断为边沿(下边沿)触发方式中断函数结构如下:void int_0() interrupt 0 // interrupt 0表示该函数为中断类型号0的中断函数{}1. 用外部中断改变流水灯的方式。

中断前:实验板上P20~P27的8个显示灯全亮。

外部中断0:实验板上P20~P27的左右4个显示灯闪烁循环8次。

外部中断1:实验板上P20~P27的8个显示灯依次循环点亮。

中断的方式:用导线或者金属触碰AT89S52芯片P3.2管脚。

改变中断优先级和保护现场,观察运行结果2. 用外部中断0测量负跳变信号的累计数,同时在八位LED数码管上显示出来。

跳变信号由P3.0给出(提示:P3_0=1;延时;P3_0=0),跳变信号加之管脚P3.2。

实验时,可用导线或者导电金属将AT89S52芯片P3.0和P3.2管脚相连即可。

实验板XL400的8位数码管:0x28, 0x7E, 0xA2, 0x62, 0x74, 0x61, 0x21, 0x7A, 0x20, 0x60,0xff为0,1,2,3,4,5,6,7,8,9,关显示,数码管码表。

0x7f,0xbf,0xdf,0xef,0xf7,0xfb,0xfd,0xfe 为8位数码管位选码。

51单片机培训—C语言版外部中断

51单片机培训—C语言版外部中断

完 处理 引 P3.2 中 脚的 , 断了 主 我回 了 程序
P3.2脚信号引 发的中断程序
取反P0.7
取反P0.7,改变P0.7引脚上接的LED小灯亮灭状 态,实现LED小灯闪烁
中断程序返回
执行RETI从P3.2引脚中断服务子程序中返回主程序
程序清单
• 汇编语言程序

ORG 0000H • SJMP START • ORG 0003H • AJMP INTERRUPT0 • ORG 0030H ;---------------------------初始化---------------------START:MOV SP, #60H • MOV P0, #0FFH • CLR IT0 • SETB EX0 • SETB EA ;---------------------------主程序---------------------MAIN:SJMP MAIN ;-------------------中断子程序-----------------------INTERRUPT0:CPL P0.7 • RETI • END
EA 空 ET2 ES ET1 EX1 ET0 EX0
使能外部中断0(P3.2)
使能外部中断1(P3.3)
中断总使能
• • •
例如:想使用中断0(P3.2引脚输入的中断信号) MOV IE , #10000001B 或SETB EX0 IE=0X81; EX0=1;

SETB EA
EA=1;
TMOD的设置
查询法程序清单
• • • • • • • • • • • • • • • •

#include<reg51.h> void main() { TMOD=0X1; TH0=0X4C; TL0=0X0; TR0=1; while(1) { if(TF0==1) { P0=~P0; TF0=0; } } }

单片机实验之外部中断应用实验

单片机实验之外部中断应用实验

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

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

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

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

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

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

三、电路原理图六、实验总结通过本实验能够准确安排各种类型的中断服务程序入口,中断源提出中断申请后,却执行到相应的中断服务程序。

弄清楚了中断服务程序与子程序的共同点和不同点。

七、思考题1、在P1.2口线上产生周期为100mS,占空比为2:5的连续矩形波,要求只采用按键K0来控制其开启和关闭。

答:程序见程序清单。

四、实验程序流程框图和程序清单。

1、在单片机的P1.2口线上产生周期50mS的连续方波。

P1.0口线上接按键K0 ,作为外部中断源0使用,用于开启波形, P1.1口线上接按键K1,作为外部中断源1使用,用于关闭波形。

汇编程序:ORG 0000H START: LJMP MAINORG 0003HLJMP EXT0ORG 000BHLJMP TTCOORG 0013HLJMP EXT1ORG 0100HMAIN: MOV TMOD, #01HMOV TCON, #01HMOV IE, #87HMOV TH0, #9EHMOV TL0, #58HSETB PX1HERE: LJMP HEREEXT0: SETB TR0RETIEXT1: CLR TR0RETITTCO: CPL P1.2MOV TH0, #9EHMOV TL0, #58HRETIENDC语言程序:#include<reg51.h>sbit P12=P1^2;main(){TMOD=0X01;EA=1;EX0=1;EX1=1;ET0=1;PX1=1;TCON=0X01;TH0=0X9E;TL0=0X58;while(1);}void EXT0() interrupt 0{ TR0=1;}void EXT1() interrupt 2{ TR0=0;}void TTC0() interrupt 1{ P12=!P12; TH0=0X9E;TL0=0X58;}2、在P1.2口线上产生周期为100mS,占空比为2:5的连续矩形波,要求只采用按键K0来控制其开启和关闭。

外部中断的实验报告

外部中断的实验报告

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

2. 掌握外部中断的编程方法。

3. 熟悉中断处理程序的设计和调试。

二、实验原理外部中断是指由外部设备或信号产生的中断,用于处理与CPU无关的事件。

在微机系统中,外部中断通常用于处理输入/输出设备的中断请求。

外部中断分为可屏蔽中断和不可屏蔽中断两种类型。

三、实验环境1. 开发平台:Keil uVision 52. 微控制器:STM32F103C8T63. 外部设备:按钮、LED灯4. 连接方式:通过GPIO引脚连接四、实验步骤1. 设计外部中断电路(1)将按钮连接到STM32F103C8T6的GPIO引脚,例如PA0引脚。

(2)将LED灯连接到STM32F103C8T6的另一个GPIO引脚,例如PB0引脚。

2. 编写外部中断初始化程序(1)在Keil uVision 5中创建一个新项目,并添加STM32F103C8T6的起始代码。

(2)在主函数中编写初始化程序,包括以下步骤:a. 配置PA0引脚为输入模式,设置为浮空输入。

b. 配置PB0引脚为输出模式,用于控制LED灯。

c. 使能中断,设置中断优先级。

d. 配置NVIC(嵌套向量中断控制器)以允许外部中断。

3. 编写外部中断处理程序(1)在项目中添加一个新的C文件,用于编写外部中断处理程序。

(2)编写外部中断处理函数,当按钮按下时,触发中断,控制LED灯闪烁。

a. 初始化外部中断处理函数,设置中断优先级和中断触发方式。

b. 在外部中断处理函数中,编写LED灯控制代码,实现LED灯闪烁。

4. 编译并下载程序(1)编译项目,生成.hex文件。

(2)将.hex文件下载到STM32F103C8T6开发板上。

5. 测试实验结果(1)将按钮按下,观察LED灯是否闪烁。

(2)松开按钮,LED灯停止闪烁。

五、实验结果与分析1. 实验结果实验过程中,当按钮按下时,LED灯闪烁;松开按钮后,LED灯停止闪烁。

实验结果表明,外部中断能够正确地处理外部设备的中断请求,并控制LED灯的亮灭。

单片机外部中断实验程序

单片机外部中断实验程序

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

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

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

本实验中,我们使用的是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);}}```通过以上的程序,我们可以实现单片机的外部中断功能。

51单片机外部中断

51单片机外部中断

单片机技术与应用实验报告实验名称:外部中断(交通灯与急救车)姓名:学号:班级:指导老师:完成时间:2012年5月5日一.实验要求以74LS273作为输出口,控制4个双色LED灯(可发红,绿,黄光),模拟交通灯管理,并允许急救车优先通过的要求。

有急救车到达时,两向交通信号为全红,以便让急救车通过。

假定急救车通过路口时间为10秒,急救车通过后,交通灯恢复中断前状态。

本实验以按键为中断申请,表示有急救车通过。

二.实验目的1.学习外部中断技术的基本使用方法。

2.学习中断处理程序的编程方法。

三.实验框图四.实验程序Green_NB0 BIT P1.0Green_DX0 BIT P1.1Green_DX1 BIT P1.2Green_NB1 BIT P1.3Red_NB0 BIT P1.4Red_DX0 BIT P1.5Red_DX1 BIT P1.6Red_NB1 BIT P1.7Scd EQU 30H ;秒ORG 0000HJMP STARTORG 0003HJMP INIT0ORG 000BHJMP TIME0START:MOV Scd, #00HMOV 31H, #00HMOV DPTR, #0F200H ;MOV P1, #69H ;初始亮灯情况:东西绿灯,南北红灯MOV A,P1MOVX @DPTR,ACLR 00HCLR F0MOV TMOD, #01H ;设定定时器1MOV IE, #83H ;设定中断使能定时器中断0、外部中断0和1MOV SP, #60HMOV TH0, #30HMOV TL0, #0B0HSETB TR0LOOP:JNB F0,N0 ;F0用户标志位,此处用作东西绿灯闪烁标识,1为绿灯闪烁CPL Green_DX0 ;绿灯闪三秒CPL Green_DX1MOV A,P1MOVX @DPTR,ACALL DELAY500MSJMP N1N0:JNB 00H,N1 ;00H,值为1时,南北绿灯闪烁CPL Green_NB0 ;绿灯闪三秒CPL Green_NB1MOV A,P1MOVX @DPTR,ACALL DELAY500MSN1:JMP LOOPDELLAY10S:MOV R4,#0BFHD1:MOV R6,#0BDHD0:MOV R5,#89HDJNZ R5,$DJNZ R6,D0DJNZ R4,D1NOPRETDELAY500MS:MOV 57H,#17HDL1:MOV 56H,#98HDL0:MOV 55H,#46HDJNZ 55H,$DJNZ 56H,DL0DJNZ 57H,DL1RETTIME0:MOV TH0,#3CHMOV TL0,#0B0HINC 31HMOV A,31HN: CJNE A,#20,EXIT ;判断是否到一秒MOV 31H,#0INC ScdMOV A,ScdCJNE A,#7,NEXT1 ;判断是否到东西绿灯闪烁时间SETB F0JMP EXITNEXT1: MOV A,ScdCJNE A,#10,NEXT2 ;闪烁3秒后,停止东西绿灯闪烁,开东西黄灯CLR F0MOV P1,#09H ;开东西黄灯MOV A,P1MOVX @DPTR,AJMP EXITNEXT2:MOV A,ScdCJNE A,#13,NEXT3MOV P1,#96H ;半个周期结束,变为:东西红,南北绿MOV A,P1MOVX @DPTR,ANEXT3:MOV A,ScdCJNE A,#20,NEXT4 ;判断是否到南北绿灯闪烁时间SETB 00HJMP EXITNEXT4: M OV A,ScdCJNE A,#23,NEXT5 ;闪烁3秒后,停止南北绿灯闪烁,开南北黄灯CLR 00HMOV P1,#06H ;开南北黄灯MOV A,P1MOVX @DPTR,AJMP EXITNEXT5: MOV A,ScdCJNE A,#26,EXITMOV P1,#69H ;一个周期结束,变为:东西绿,南北红MOV A,P1MOVX @DPTR,AMOV Scd,#0EXIT: RETIINIT0:PUSH PSWPUSH ACCCLR EAMOV R2,P1 ;保存数据MOV P1,#0FH ;ALL REDMOV A,P1MOVX @DPTR,ACALL DELLAY10SMOV P1,R2 ;恢复SETB EAPOP ACCPOP PSWRETIEND五.实验总结通过这次实验,理解了外部中断入口地址的选择及外部中断中断实现的方法。

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

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

南昌大学实验报告学生姓名:学号:专业班级:实验类型:⃞验证⃞综合⃞设计⃞创新实验日期: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 端口控制。

单片机外部中断实验报告

单片机外部中断实验报告

单片机外部中断实验报告实验目的:1、理解单片机外部中断的原理和用途;2、掌握单片机外部中断的配置和使用方法。

实验器材:1、STC15W408AS单片机开发板;2、简单的电路连接器;3、按钮开关。

实验原理:单片机外部中断是通过外部硬件信号触发单片机的中断请求,在单片机运行过程中,当外部信号满足特定条件时,会触发中断,并暂停当前的运行程序,转而执行中断服务程序。

通过外部中断,可以实现对外部事件的实时处理。

实验步骤:1、将按钮开关与单片机开发板连接,将按钮开关的一端与单片机的INT0引脚连接,另一端与GND连接。

2、在开发板上连接好电源并供电。

3、打开Keil软件,新建一个工程,并选择合适的单片机型号。

4、配置单片机的外部中断功能,设置INT0引脚为中断输入。

5、编写中断服务程序,当INT0引脚检测到边沿信号时,执行中断服务程序,并在其中加入相应的处理代码。

6、编写主程序,配置相关的引脚和寄存器,使单片机进入中断模式,接受外部中断信号,并执行中断服务程序。

7、下载程序到单片机开发板上,运行程序。

8、按下按钮开关,触发外部中断,并查看实验结果。

实验结果:当按下按钮开关时,实时触发外部中断,单片机停止当前程序的运行,进入中断模式,并执行中断服务程序中的相应代码。

实验总结:通过这次实验,我对单片机的外部中断有了更深入的理解,并学会了如何使用外部中断实现对外部事件的及时处理。

外部中断广泛应用于各种实时系统和设备中,具有很大的实用价值。

在以后的学习和实践中,我会进一步掌握和应用单片机的外部中断功能。

实现中断功能_实验报告(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. 定时器中断实验分析通过定时器中断实验,我们掌握了定时器中断的配置和编程方法。

单片机 中断实验 实验报告

单片机 中断实验 实验报告

实验三中断实验一、实验内容1.当单片机的INT0端出现负脉冲时,进入相应的中断服务程序,P1口做输出口,接8只发光二极管,通过程序控制发光二极管依次点亮。

2.选择外部中断0(P3.2)接按键INTO到地,按下出现负脉冲时,进入相应的中断服务程序,在中断服务程序中,数码管显示加1,在0-9之间循环。

二、实验目的1、学习外部中断技术的基本使用方法。

2、学习中断处理程序的编程方法。

三、实验原理(中断原理部分参考教材填写)本实验中断处理程序的应用,最主要的地方是如何保护进入中断前的状态,使得中断程序执行完毕后能回到交通灯中断前的状态。

要保护的地方,除了累加器ACC、标志寄存器PSW外,还要注意。

一是主程序中的延时程序和中断处理程序中的延时程序不能混用,本实验中,主程序延时用的寄存器和中断延时用的寄存器应不相同。

四、实验电路(参考学习板说明书Page11)五、接线方式(参考学习板说明书Page11)P1口接发光二极管的L1—L8;单脉冲输出端“”接INI0,即接89C51的P3.2管脚。

六、参考程序程序一、ORG 0030Htmpdate: DB 01H,02H,04H,08H,10H,20H,40H,80H /*定义常量做为输出*/ORG 0000HLJMP MAINORG 0003HLJMP INTMAIN: SETB EA /*首先开启总中断*/SETB EX0 /*开启外部中断0 */SETB IT0 /* 设置成下降沿触发方式*/MOV R7,#8MOV DPTR,#TMPDATEL0: SJMP L0 //等待中断INT: DJNZ R7,L1 /*外部中断0 每按一次主板上的"INT0"键,中断响应,调用该函数,我们从P1口输出点亮发光二极管*/MOV R7,#8L1: MOV A,R7MOVC A,@A+DPTRCPL AMOV P1,ARETIEND程序二、/***************************************************************功能:按下按键,数码管加1,用中断的方法作者:txl时间:2009-04版本:V1.0***************************************************************/#include<reg52.h>#define uint unsigned int#define uchar unsigned charsbit wei1=P2^0;sbit key1=P3^2;uchar code table[]={0xC0,0xF9,0xA4,0xB0,0x99,0x92,0x82,0xF8,0x80,0x90,0x88,0x83,0xC6,0xA1,0x86,0x8E};//共阳数码管码表//全局变量uchar num;//函数声明void delay(uint z);void led_show(uchar temp);void main(){num=0;// IT0=1; //中断以下降沿方式触发IT0=0; //中断以低电平方式触发EX0=1; //允许外部中断0中断EA=1; //总中断开wei1=0;while(1){led_show(num); //显示}}/*************************************************************** 功能:外部中断0入口***************************************************************/ void EX0_Int() interrupt 0{EX0 = 0; //关中断num++;if(num==10)num=0;while(!key1);//消除抖动delay(5);while(!key1);// for(;!key1;); //等待放开EX0 = 1; //开中断}void delay(uint z){uint x,y;for(x=z;x>0;x--)for(y=110;y>0;y--);}void led_show(uchar temp){P0=table[temp];delay(5);}扩展程序三、#include <AT89X52.H> //包含头文件sbit led=P1^0;#define shuma P0 //数码管数据口sbit LED_0=P2^0; //定义数码管4个控制位sbit LED_1=P2^1;sbit LED_2=P2^2;sbit LED_3=P2^3;unsigned char m;unsigned int code ton[7];void display(unsigned char d1,unsigned char d2,unsigned char d3,unsigned char d4);/*=====0-9=====A-G=====*/unsigned char a[16]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0x88,0x83,0xc6,0xa1,0x86,0x8e};//共阳极数码管的段码0 1 2 3 4 5 6 7 8 9 A B C D E F//定时初值计算方法:以5ms为例,5ms=5000us,0xffff-5000/1.085即为TH和TL的值void int1() interrupt 3 //T1中断,时间是5ms{TR1=0; //关中断TH1=0xed; //装定时器初值实现5ms定时TL1=0xff;ET1=1; //开中断TR1=1;display(1,2,3,4); //在中断里显示数字}void main( void ){m=1;TMOD=0x10; //设置为T1定时器TH1=0xed; //装定时器初值TL1=0xff;TR1=1; //开中断ET1=1;EA=1;while(1){}}void display(unsigned char d1,unsigned char d2,unsigned char d3,unsigned char d4) {if(m==1) //每进入一次中断显示1位,用变量m作为显示位标识{LED_0=0; //使能该数码管控制位LED_1=LED_2=LED_3=1; //其他控制位无效shuma=a[d1]; //按照数据点亮该数码管}if(m==2) //第二次中断显示第二位{LED_1=0;LED_0=LED_2=LED_3=1;shuma=a[d2];}if(m==3) //第三次中断显示第三位{LED_2=0;LED_1=LED_0=LED_3=1;shuma=a[d3];}if(m==4) //第四次中断显示第四位{LED_3=0;LED_1=LED_2=LED_0=1;shuma=a[d4];}m++; //数码管位循环扫描if(m>=5) //如果4次中断显示完成,则回到第一重新显示m=1;}。

51单片机c语言中断程序

51单片机c语言中断程序

51单片机c语言中断程序51单片机是一种常用的微控制器,广泛应用于各个领域,包括电子产品、工业控制以及通信等。

其中,中断程序是51单片机中一项关键的功能,它具有重要的指导意义。

中断是指在程序运行过程中,根据外部事件的发生而导致程序的跳转执行其他的代码段。

相比于常规的程序执行方式,中断程序能够实现即时响应、提高程序的实时性以及降低功耗,因此非常有用。

在C语言中,我们可以通过编写中断服务函数来实现对中断事件的处理。

中断服务函数是由编程人员提前定义好的一段代码,在中断事件触发时自动执行。

它可以读取中断源的状态、清除中断标志、保存关键数据等操作,然后采取相应的措施。

为了编写一个生动的中断程序,我们需要明确中断的触发条件以及需要完成的任务。

以一个简单的例子来说明,假设我们需要设计一个温度监测系统,当温度超过设定的阈值时,系统会触发中断程序,通过LED灯进行报警。

首先,我们需要初始化相关的硬件,包括ADC模块用于温度的模拟量转数字量转换,以及LED灯的GPIO口配置等。

然后,我们需要编写一个中断服务函数,命名为“TemperatureAlarm”,用于处理温度超过阈值的情况。

在“TemperatureAlarm”中,我们可以使用ADC模块读取当前的温度数值,并进行判断是否超过阈值。

如果超过阈值,则点亮LED灯,表示报警状态。

同时,我们还可以通过串口打印相关信息,以便后续的调试和记录。

当中断触发后,中断服务函数会自动执行,然后返回到原来的程序执行点继续运行。

在设计中断程序时,我们需要注意以下几个方面:首先,要保证中断服务函数的执行时间尽量短,避免影响正常的程序运行。

这是因为在中断执行期间,其他中断可能会被屏蔽,导致系统的响应速度降低。

其次,要合理选择中断优先级,以确保紧急性较高的中断能够得到及时处理。

对于多个中断源同时触发的情况,我们可以通过设置优先级进行区分。

最后,要注意中断服务函数的执行次数,避免重复执行同一段代码,提高代码的效率。

实验二 外部中断实验

实验二 外部中断实验

实验二外部中断实验一、实验目的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单片机的中断的相关知识, 包括中断的组成、工作原理、处理过程以及外部中断的中断触发方式。

(完整word版)单片机外部中断实验报告

(完整word版)单片机外部中断实验报告
IT1是选择外部中断1请求(INT1)为边沿触发方式或电平触发方式的控制位。前一方式IT1=1,后一方式IT1=0。
当8031复位后,TCON被清0。
5、外部中断电路
负脉冲作为中断请求信号时,为了保证中断的唯一性,必须加上消除开关抖动的电路或者去抖动延时程序,保证每次只产生单脉冲,构成边沿触发方式外部中断电路。边沿触发的最大优点在于不会丢失中断。只要中断请求负跳变的宽度大于1个机器周期,单片机就能够采样到中断请求信号,单片机将采样到的信号琐存到中断请求标志寄存器中,硬件自动置IE0为1,即使单片机暂时不响应,这个标志也不会丢失,只有在外部中断响应之后,硬件才将IE0清除。
三、编程提示
1、P3口是8位准双向口,具有双重功能:
第一功能和P1口一样,作为输入输出口,也有字节操作和位操作两种方式,每一位可分别定义为输入或输出;第二功能定义如下:
P3.0 RXD串行输入口
P3.1 TXD串行输出口
P3.2 INT0外部中断0请求输入线
P3.3 INT1外部中断1请求输入线
P3.4 T0定时器/计数器T0外部计数器脉冲输入线
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
IT0
IT0是选择文字则外部中断0请求(INT0)边沿触发方式或电平触发方式的控制位。前一方式IT0=1,后一方式IT0=0。
P3.5 T1定时器/计数器T1外部计数器脉冲输入线

实验四 80C51单片机外中断实验

实验四 80C51单片机外中断实验

实验四80C51单片机外中断实验一实验目的:了解8051系列单片机的外中断基本工作原理。

掌握8051系列单片机外中断的用法。

二实验原理:中断是在执行正常程序的过程中转去执行临时的任务,此时CPU必须暂停现行的程序而转去处理更加紧急的事件,在处理完毕之后方可返回执行原来的程序。

在8051的中断里面,要涉及到一系列的诸如保护现场,中断响应,现场恢复,中断嵌套以及优先级等问题。

8051有5个中断源,它们分别是两个外部中断请求INT0(P3.2)和INT1(P3.3)、两个片内定时器/计数器溢出中断TF0和TF1,一个片内串行口中断请求TI或RI,这几个中断源由TCON和SCON两个特殊功能寄存器进行控制(如图4-1所示):表4-1TI是8051串行口的发送中断标志。

当串行口发送完一帧数据后请求中断由硬件置位,而清零必须由软件来完成。

RI是串行口接收中断标志。

当串行口接收完一帧数据后请求中断由硬件置位,也是由软件来清零。

8051的对中断的开放和屏蔽是由中断允许寄存器IE控制来实现的,IE的结构格式如图4-2所示。

其中任何一个位置一就是将相应的中断源打开,反之,为0则关闭。

这里EA为CPU的中断控制位,在使用任何一个中断源之前都必须将CPU的中断置1。

表4-28051有两个中断优先级,即高优先级和低优先级。

每个中断源都可设置为高或低中断优先级。

所以中断嵌套有两级,嵌套原则为:正在执行的中断服务程序可以被更高级的中断请求打断,但不能被同一级别或是更低级的中断请求中断。

两级中断通过中断优先级寄存器IP来设置。

IP的格式如图4-3所示,字节地址是B8H。

表4-38051CPU在每一个机器周期顺序检查每一个中断源,在机器周期的S6按优先级处理所有被激活的中断请求。

中断响应的主要内容就是由硬件自动形成转向与该中断源对应的服务程序入口地址。

这些中断源的服务程序入口地址如图4-4所示。

这里要注意的是,在中断服务子程序中,关键字interrupt后面的KeilC中断编号一定要正确。

单片机c语言程序设计---中断与定时器和计数器实验报告

单片机c语言程序设计---中断与定时器和计数器实验报告

单片机c语言程序设计---中断与定时器和计数器实验报告课程名称:单片机c语言设计实验类型:设计型实验实验项目名称:中断与定时器/计数器实验一、实验目的和要求1.掌握单片机的中断的原理、中断的设置,掌握中断的处理及应用2.掌握单片机的定时器/计数器的工作原理和工作方式,学会使用定时器/计数器二、实验内容和原理一.定时器/计数器应用程序设计实验1.计数功能:用定时器1方式2计数,每计数满100次,将P1.0取反。

(在仿真时,为方便观察现象,将TL1和TH1赋初值为0xfd,每按下按键一次计数器加1,这样3次就能看到仿真结果。

)分析:外部计数信号由T1(P3.5)引脚输入,每跳变一次计数器加1,由程序查询TF1。

方式2有自动重装初值的功能,初始化后不必再置初值。

将T1设为定时方式2,GATE=0,C/T=1,M1M0=10,T0不使用,可为任意方式,只要不使其进入方式3即可,一般取0。

TMOD=60H。

定时器初值为X=82-100=156=9CH,TH1=TL1=9CH。

使用定时器定时,每隔10s使与P0、P1、P2和P3端口连接的发光二极管闪烁10次,设P0、P1、P2和P3端口低电平灯亮,反之灯灭。

分析:中断源T0入口地址000BH;当T0溢出时,TF0为1发出中断申请,条件满足CPU响应,进入中断处理程序。

主程序中要进行中断设置和定时器初始化,中断服务程序中安排灯闪烁;TL0的初值为0xB0,TH0的初值为0x3C,执行200次,则完成10s定时。

三、主要仪器设备四、操作方法与实验步骤1.按照硬件设计在protues上按照所给硬件设计绘制电路图。

2.在keil上进行编译后生成“xxx.hex”文件。

3.编译好的“xxx.hex”文件加入AT89C51。

启动仿真,观察仿真结果。

五、实验结果与分析①void Timer1 (void) interrupt 3{TR1=0;P1_0=!P1_0;TR1 = 1; //定时器1开始计数 }②void function(void){while(k--){P0=0x00;P1=0x00;P2=0x00;P3=0x00;Delay(250);P0=0xFF;P1=0xFF;P2=0xFF;P3=0xFF;Delay(250);}k=10;flag=0;TL1 = 0x0B0; //设置定时初始值TH1 = 0x03C; //设置定时初始值TR1 = 1; //定时器1开始计时}int main (void){EA=1;ET1=1;Timer1Init();while(1){if( flag ==1 )function();}}六、讨论和心得。

单片机实验二_外部中断

单片机实验二_外部中断

一、实验二: 中断实验二、实验目的:三、通过对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; }。

湖南工业大学单片机实验报告 2外部中断实验

湖南工业大学单片机实验报告 2外部中断实验

实验二、外部中断实验一、实验目的1. 掌握外部中断技术的基本使用方法2.掌握中断处理程序的编写方法二、实验设备PC机、Keil 软件、Proteus软件。

三、实验内容1.在Proteus中绘制图1电路,加载给定目标代码文件进行调试。

图1 LED灯的开关控制四、实验程序解析#include <AT89X52.H> //包含AT89X52.H头文件sbit S1=P1^5; //定义S1与P1.5位对应sbit LED1=P1^0; //定义LED1与P1.0位对应void main (void){while(1){if(S1==0)LED1=0; // 开关闭合,P1.0=0,LED点亮elseLED1=1; //开关断开,P1.0=1,LED熄灭}}五、实验原理说明1、外部中断的初始化设置共有三项内容:中断总允许即EA=1,外部中断允许即EXi=1(i=0或1),中断方式设置。

中断方式设置一般有两种方式:电平方式和脉冲方式,本实验选用后者,其前一次为高电平后一次为低电平时为有效中断请求。

因此高电平状态和低电平状态至少维持一个周期,中断请求信号由引脚INT0(P3.2)和INT1(P3.3)引入,本实验由INT0(P3.2)引入。

2、中断服务的关键:a、保护进入中断时的状态。

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

b、必须在中断服务程序中设定是否允许中断重入,即设置EX0位。

c、用POP指令恢复中断时的现场。

3、中断控制原理:中断控制是提供给用户使用的中断控制手段。

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

4、中断响应的过程:首先中断采样然后中断查询最后中断响应。

采样是中断处理的第一步,对于本实验的脉冲方式的中断请求,若在两个相邻周期采样先高电平后低电平则中断请求有效,IE0或IE1置“1”;否则继续为“0”。

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

单片机外部中断实验(附c程序)
一、实验目的
掌握外部中断的C语言和汇编语言编程方法,会用外部中断解决实际应用问题。

二、实验内容
8051C51单片机接一个发光二极管LED1、接一个发光二极管LED2,接一个开关、接一个开关要求实现以下功能:
(1)合上、断开时LED1闪烁
(2)断开、合上时LED2闪烁
(3)合上后(不断开)再合上,LED1闪烁LED2不闪烁
(4)合上后(不断开)再合上,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) //延时秒子程序{
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();
}
}
}。

相关文档
最新文档