2022年实验二外部中断实验_共页 .pdf
实验二外部中断实验一、实验目的1掌握外部中断技术的基本使用方法2掌握中断处理程序的编写方法二、实验原理1外部中断的初始化设置的三项内容:中断总允许即EA=1,外部中断允许即EXi=1(i=0 或 1),中断方式设置。中断方式设置一般有两种方式:电平方式和脉冲方式.2中断服务的关键:(1)保护进入中断时的状态。堆栈有保护断点和保护现场的功能使用PUSH,在转中断服务程序之前把单片机中有关寄存单元的内容保护起来。注:中断程序自动保护PC,对其做入栈操作(2)用 POP 指令恢复中断时的现场。(先进后出)3中断控制原理:中断控制是提供给用户使用的中断控制手段。实际上就是控制一些寄存器,51 系列用于此目的的控制寄存器有四个:TCON、IE、SCON 及 IP。TF1 TR1 TF0 TR0 IE1 IT1 IE0 IT0 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 格式(触发方式中断控制字)名师资料总结-精品资料欢迎下载-名师精心整理-第 1 页,共 5 页 -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 名师资料总结-精品资料欢迎下载-名师精心整理-第 2 页,共 5 页 -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 ENDC 语言:#include#include sbit P3_2=P32;void delay(unsigned char i);void main()unsigned char ii;unsigned char m;P1=0 xFE;P3_2=1;EA=1;EX0=1;IT0=0;m=0 xFE;while(1)for(ii=0;ii8;ii+)P1=_crol_(m,ii);delay(5);void delay(unsigned char i)/延时函数,无符号字符型变量i 为形式参数 unsigned char j,k,l;/定义无符号字符型变量j 和 k for(l=0;li;l+)for(k=0;k255;k+)/双重 for 循环语句实现软件延时 for(j=0;j255;j+);void int_0()interrupt 0 名师资料总结-精品资料欢迎下载-名师精心整理-第 3 页,共 5 页 -P1=0 x00;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 名师资料总结-精品资料欢迎下载-名师精心整理-第 4 页,共 5 页 -END C 语言:#include#include sbit P3_2=P32;void delay(unsigned char i);void main()unsigned char m;unsigned char n;P3_2=1;EA=1;EX0=1;IT0=1;m=0 xFE;while(1)for(n=0;n8;n+)P1=_crol_(m,n);delay(5);void int_0()interrupt 0 unsigned char ii;unsigned char kk;kk=0 xFE;for(ii=0;ii5;ii+)P1=_crol_(kk,ii);delay(5);void delay(unsigned char i)/延时函数,无符号字符型变量i 为形式参数 unsigned char j,k,l;/定义无符号字符型变量j 和 k for(l=0;li;l+)for(k=0;k255;k+)/双重 for 循环语句实现软件延时for(j=0;j255;j+);名师资料总结-精品资料欢迎下载-名师精心整理-第 5 页,共 5 页 -