实验七 外部中断实验

贵 州 大 学 实 验 报 告 纸

实验七  外部中断实验

一、实验目的

学习外部中断技术的基本使用方法。

二、实验内容

1、INT0端接单次脉冲发生器。按一次脉冲产生一次中断,CPU使P1.0状态发生一次反转,P1.0接LED灯,以查看信号反转。

2、修改程序,实现用一位开关产生外部中断1,每产生一次,调用一个流水灯方式,按顺序4次一个周期后重复

三、实验要求

根据实验内容编写一个程序,并在实验仪上调试和验证。

四、实验说明和电路原理图

1)外部中断的初始化设置共有三项内容:中断总允许即EA=1,外部中断允许即EXi=1(i=0或1),中断方式设置。中断方式设置一般有两种方式:电平方式和脉冲方式,本实验        选用后者,其前一次为高电平后一次为低电平时为有效中断请求。因此高电平状态和低电平状态至少维持一个周期,中断请求信号由引脚INT0(P3.2)和INT1(P3.3)引入。

2)中断服务的关键:

a、保护进入中断时的状态。

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

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

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

3)中断控制原理:中断控制是提供给用户使用的中断控制手段。实际上就是控制一些寄存器,51系列用于此目的的控制寄存器有四个:TCON 、IE 、SCON 及IP。

4)中断响应的过程:首先中断采样然后中断查询最后中断响应。采样是中断处理的第一步,对于本实验的脉冲方式的中断请求,若在两个相邻周期采样先高电平后低电平则中断请求有效,IE0或IE1置“1”;否则继续为“0”。所谓查询就是由CPU测试TCON和SCON中各标志位的状态以确定有没有中断请求发生以及是那一个中断请求。中断响应就是对中断请求的接受,是在中断查询之后进行的,当查询到有效的中断请求后就响应一次中断。

本实验需要用到CPU模块(F3区)和八位逻辑电平显示模块(B5区)、单次脉冲模块(E3区)。

五、实验程序

        ;//*************************************************

;文件名: EXint for MCU51

;功能: 外部中断实验

;接线: 导线连接单次脉冲模块的输出端到CPU模块的P32,   

;      CPU模块的P10接八位逻辑电平显示模块的L0灯。

;//*************************************************

       org     0

       ljmp    Start

       org     3

       LJMP    Interrupt0

       ORG     0100H

Start:

       mov     TCON, #01h  ; 外部中断0下降沿触发

       mov     IE, #81h    ; 打开外部中断允许位(EX0)及总中断允许位(EA)

OK:  

       MOV    R2,#04H

       MOV    R1,#0

LOP1:

       CJNE   R2,#0,LOP1

       ljmp    OK

Interrupt0:

Output1:

       CJNE  R1,#0,Output2

       mov   a, #0fEH

       mov   R5, #8 

loop1:

       mov   P1, a

       rl    a

       Acall  Delay

       djnz  R5, loop1

       LJMP  JIES     

Output2: 

       cjne  r1,#1,Output3

       mov   a, #07fH

       mov   R5, #8 

loop2:

       mov   P1, a

       rr    a

       Acall Delay

       djnz  R5,loop2

       LJMP  JIES

Output3:

       CJNE  R1,#2,Output4

       mov   a, #0FFH

       mov   R5, #9

loop3:

       CLR   C

       mov   P1, a

       RRC   a

       Acall  Delay

       djnz  R5, loop3

       mov   R5, #8 

loop4:

       SETB  C

       RLC   A

       MOV   P1,A

       Acall  Delay

       djnz  R5, loop4

       LJMP  JIES    

Output4:

       CJNE  R1,#3,JIES

       MOV   R3,#00H

       MOV   R4,#09H

       MOV   DPTR, #tab              ; 表首址  

loop5:

       MOV   A,R3          

       MOVC  A, @A+DPTR              ; 查表读取第一个字节

       MOV   P1,A

       INC   R3

       ACALL DELAY

       DJNZ  R4,loop5

       LJMP  JIES

Delay:

       mov   r6,#0         

DelayLoop1:

       mov   r7,#0

DelayLoop2:

       NOP  

       NOP           

       djnz  r7,DelayLoop2

       djnz  r6,DelayLoop1

       ret

JIES:

       INC  R1

       DEC  R2

       RETI

tab:

       DB  0FFH,0E7H,0C3H,81H,00H,81H,0C3H,0E7H,0FFH

       End

六、实验步骤

1)系统各跳线器处在初始设置状态,用导线连接单次脉冲模块的输出端到CPU模块的P32;

CPU模块的P10接八位逻辑电平显示模块的灯。

2)启动PC机,打开THGMW-51软件,输入源程序,并编译源程序。编译无误后,下载程序运行。

3)连续按动单次脉冲产生电路的按键,发光二极管L0每按一次状态取反,即隔一次点亮。

七、实验现象和分析

         运行程序,每按一次脉冲产生按钮,就可以产生一次中断,就调用了一种流水灯方式,而且可以循环的调用。

         程序采用中断的方式来调用流水灯方式,而且是顺序调用,在调用完一次后寄存器R1加1,通过判断R1的值来选择流水灯方式,等循环完四次后,将R1清零这样,就可以重新调用。但程序的编写还有一些缺陷,就是在调用后,流水灯只输出一次,不能重复输出,这样就不能真正的为流水灯,所以还需要改进一下。

八、实验总结

        通过实验进一步掌握了外部中断的使用方法,单片机中断有五个,为外部中断0,外部中断1,定时中断0,定时中断1,串行中断。而外部中断0的对应中断输入引脚为P3.2,在实验中将P3.2连接电路的脉冲输出,这样就可以产生中断信号,启动中断程序。将中断程序的程序入口地址0003H中写入相应的跳转指令,就可以实现中断程序调用。

 

第二篇:实验七 中断实验

实验七  中断实验

一、实验目的

1. 掌握中断程序编程方法。

2.了解蜂鸣器控制方法。

二、实验原理及实验内容

1. 实验原理

本实验主要训练读者对中断原理的理解和对中断的编程。关于中断原理参考第三章有关内容。本实验通过外部中断1所接的轻触开关打开或关断蜂鸣器,循环点亮跑马灯。

2.实验内容

a.  接通J18(控制蜂鸣器跳线),接通J17(控制8位跑马灯跳线)。

b.  在Keil编译环境下,根据流程图编写程序,生成*.HEX文件。

c.  在ISP环境下将生成的*.HEX文件下载到89S52中。

d.  离线运行,观察运行结果。

图7-6中断流程图

三、参考程序

汇编程序:

       BEEP EQU P3.4     /*定义蜂鸣器*/

       ORG  0000H

       AJMP MAIN

       ORG  0013H      

       LJMP INT1PRM    /*转向外部中断1服务子程序*/

MAIN: 

       SETB IT1         /*下降沿触发*/

       MOV  IE,#84H    /*中断控制寄存器设置*/

WAIT:  AJMP $          /*等待中断发生*/

INT1PRM: 

       CPL BEEP        /*蜂鸣器取反*/

       CLR C

       MOV A, #0FFH  /*准备把11111110赋予P0口,首先存入累加器A中*/

       MOV R5,#09H     /*设置循环次数为9*/   /*左移程序*/

XUNH:                  /*流水灯子程序*/

       RLC  A          /*左移一位*/

       MOV P0,A      

       ACALL DELAY    /*调用延时程序,使人能看清楚灯的循环*/

       DJNZ R5,XUNH   /*判断自减后R5是否为0,若是,则跳回按键判断程序,若不是,则继续循环*/

       RETI

DELAY: MOV R6,#0FFH    /*延时程序*/

TT2:   MOV R7,#0FFH

       DJNZ R7,$

       DJNZ R6,TT2

       RET  

       END

C语言程序:

#include<reg52.h>

 sbit Beep=P3^4;  //蜂鸣器

 unsigned char time;  

main()

{ P3=0xff;

  EX1=1;       //外部中断1允许位

  IT1=1;    //下降沿触发

  EA=1;         //开总中断

  Beep = 0x00;

  while(1)

   { ; }

}

void inttrer() interrupt 2

{

 unsigned int i,j;

 Beep=~Beep; //蜂鸣器取反

 time=0x01;

 for(i=0;i<8;i++) //digitled 控制digled 轮流亮

 {  P0 =~ time;

      time = time<<1;

       for(j=5000;j>0;j--){;}

 }

}

四、实验仪器和设备

    Keil软件;AT89S52实验平台;ATMEL ISP在线编程软件;

五、实验结果和数据分析

1.描述中断处理过程。

2.将程序改写成查询方式,要求能达到同样的程序效果,并说明中断和查询的区别。


相关推荐