实验二:外部中断实验 一、实验目的 1.掌握外部中断技术的基本使用方法; 2.掌握中断处理程序的编写方法; 3、进一步掌握Keil和Proteus软件的用法。 二、实验说明 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”。所谓查询就是由CPU测试TCON和SCON中各标志位的状态以确定有没有中断请求发生以及是那一个中断请求。中断响应就是对中断请求的接受,是在中断查询之后进行的,当查询到有效的中断请求后就响应一次中断。 INT0端接单次脉冲发生器。P1口接LED的并行口JD3,以查看LED在每次中断时的移位过程。 三、实验内容及步骤 1、用Keil软件编辑中断控制应用程序,采用P3.2接入开关K0,P3.3接入开关K1引入外部中断0和1,外部中断0服务程序点亮8支LED,外部中断1服务程序实现P1口驱动流水灯,0.5s变换一次。 2、用proteus软件绘制实验所需硬件电路,并进行仿真运行。 3、用试验箱载入程序并运行程序: 用P1口做输出口,接八位逻辑电平显示,P3.2,P3.3接开关输入外部中断信号,中断程序功能使发光二极管循环点亮。 (1)最小系统中插上80C51核心板,用扁平数据线连接MCU的P1口与八位逻辑电平显示模块JD3。 (2)用串行数据通信线连接计算机与实验箱的RS232串口,将实验箱RS232串口的端子RXD和TXD插到实验芯片模块的P3.0和P3.1插孔中,建立PC机与实验箱单片机芯片的串行通信联系。 (3)打开电脑桌面上的Keil uVision4仿真软件,建立实验的项目文件夹和项目文件,在项目文件的源文件界面上输入实验源程序,并对源程序进行编译,直到编译无误,并连接生成hex目标文件。 (4)打开电脑桌面上的STC烧录软件,下载并装载目标程序到实验单片机芯片,然后上电全速运行程序,观察程序运行的结果:程序功能使发光二极管循环点亮的流水灯的效果。 四、源程序 实验程序一: #include<reg51.h> void delay(unsigned int d) //定义延时子函数 { while(--d>0); } void main() { P1=0xff; //熄灭LED EA=1; EX0=1; EX1=1; IT0=1; IT1=1; for(;;) {;} } void INT0_ISR() interrupt 0 //外中断0服务函数 { P1=0x00; PX0=0; PX1=1; } void INT1_ISR() interrupt 2 //外中断1服务函数 { while(1) { delay(15000); P1=0xfe; delay(15000); P1=0xfd; delay(15000); P1=0xfb; delay(15000); P1=0xf7; delay(15000); P1=0xef; delay(15000); P1=0xdf; delay(15000); P1=0xbf; delay(15000); P1=0x7f; PX0=1; PX1=0; } }
这个程序错在哪里?
|