外部中断实验-单片机

单片机程序实验报告

                                                                    

                                                               

实验四 外部中断实验

一、实验目的

1.学习8051单片机的中端原理及编程方法;

2.掌握中断处理程序的编程方法和调试方法。

二、实验原理

MCS-51中断系统有5个中断请求源:

① /INT0----外部中断0请求,低电平有效。通过P3.2引脚输入。

② /INT1 ----外部中断1请求,低电平有效。通过P3.3引脚输入。

③ T0 ----定时器/计数器0溢出中断请求。

④ T1 ----定时器/计数器1溢出中断请求。

⑤ TX/RX ----串行口中断请求。当串行口完成一帧数据的发送或接收时,便请求中断。

与外部中断相关的特殊功能寄存器有TCON、IE和IP。应根据INT0、INT1管脚的信号特征设定中断的触发方式(边缘/电平触发)。

部分标志位解读

TF1----定时器/计数器T1的溢出中断请求标志位。当启动T1计数以后,T1从初值开始计数,计数器产生溢出时,由硬件使TF1置1,并向CPU发出中断请求。当CPU响应中断时,硬件将自动对TF1清0。

IE1----外部中断1的中断请求标志。当检测到INT1引脚上存在有效的中断请求信号时,由硬件使IE1置1。当CPU响应该中断请求时,由硬件使IE1清0。

TI----串行口发送中断请求标志。CPU将一个数据写入发送缓冲器SBUF时, 就启动发送。每发送完一帧串行数据后,硬件置位TI。但CPU响应中断时,并不清除T1, 必须在中断服务程序中由软件对TI清0

RI----串行口接收中断请求标志。在串行口允许接收时,每接收完一个串行帧, 硬件置位。CPU响应中断时不会清除RI, 必须用软件对其清0。

三、实验电路图及参数对照表

中断允许寄存器IE:

中断优先级寄存器IP:

中断入口地址表:

实验连接:

四、实验设备

微型计算机、单片机仿真器、实验仪、示波器(各一台)

实验连线:若干

五、实验内容

P1口作为输出口,连接8位发光二极管。按键1与按键2节单片机的两个外部中断管脚。按一次按键1,发光二极管循环左移显示;按一次按键2,发光二极管循环右移显示。移位的状态间隔时间为0.5秒,要求用外部中断处理按键事件。

程序流程:

未接受中断时(初始时刻)标记为2,(输出FC)仅仅使得最后两盏灯亮,接收中断,判断是0中断还是1中断,0中断则标记为,0,左移一位输出,1中断则标记为1,右移一位输出。之后调用延时子程序,最后回到大循环,继续下一次的判断。

由于没有工具绘制成程序流程图,仅以语言描述恐有遗漏,有不详近的地方请见谅。

汇编语言程序代码:

     ORG          0000H

      AJMP        START

      ORG          0003H

      AJMP        EXINT1

      ORG          0013H

      AJMP        EXINT2

      ORG          0030H

START:

      MOV         SP,#60H                      ;设置堆栈

      SETB         IT0                             ;分别开启T0和T1的中断

      CLR           IE0

      SETB         EX0

      SETB         IT1

      CLR           IE1

      SETB         EX1

      SETB         EA

      MOV         R1,#02H                     ;设置操作标志             

LOOP:

      MOV         R0,A

      MOV         A,R1

      SUBB         A,#00H                      ;判断是否是00H

      JZ              TTRL

      SUBB         A,#01H                      ;判断是否是01H

      JZ              TTRR

      MOV        A,#0FCH

      MOV         P1,A

      AJMP        LOOP

TTRL:

      MOV        A,R0                           ;左移的操作

      RL             A

      MOV        P1,A

      ACALL       DELAY

      AJMP        LOOP

TTRR:

      MOV         A,R0                                ;右移的操作

      RR             A

      MOV        P1,A

      ACALL       DELAY

      AJMP      LOOP                               ;未接到中断的时候循环等待

EXINT1:

      MOV         R1,#00H

      RETI

EXINT2:

      MOV         R1,#01H

      RETI    

DELAY:

      MOV         R7,#5

DELAY1:

      MOV         R6,#200

DELAY2:

      MOV         R5,#250

      DJNZ       R5,$

      DJNZ        R6,DELAY2

      DJNZ         R7,DELAY1

      RET

END

C语言源程序代码:

#include<reg51.h>

extern unsigned char Num,flag=0x02;

void delay()

{

      unsigned int i;

      for(i=0;i<0xffff;i++)

      {

           ;

   }

}

void exint0(void) interrupt 0 using 1

{

      flag=0x00;

}

void exint1(void) interrupt 2 using 1

{

      flag=0x01;

}

void main()

{

      Num=0xfc;                                 //分别开启T0和T1的中断

      IT0=1;

      IE0=0;

      EX0=1;

      IT1=1;

      IE1=0;

      EX1=1;

      EA=1;

      while(1)

      {

           if(flag==0x00)

           {

                 Num=(Num>>7)+(Num<<1);

                 P1=Num;

                 delay();

                 delay();

           }

           if(flag==0x01)

           {

                 Num=(Num<<7)+(Num>>1);

                 P1=Num;

                 delay();

                 delay();

           }

           else

           {

                 P1=Num;

           }

      }

}

六、实验小结

在本实验中,我深入了解了中断的工作原理,及其作用,中断对于单片机的实时控制,软/硬件错误检查等有着重大的意义,是程序的重要功能之一,影响着程序工作方式,同时也可作为初级的人机交互的基础。为以后的复杂程序编程打下了坚实的基础。

另外程序若有什么不对的地方,也请老师批评指正。我即刻修改。

3.20

 

第二篇:3实验三 单片机外部中断的使用

姓名:                       学号:                      日期:           

实验三   单片机外部中断的使用

一、实验名称:单片机外部中断的使用

二、实验目的

    1.掌握在Keil环境下建立项目、添加、保存源文件文件、编译源程序的方法;

    2.掌握运行、步进、步越、运行到光标处等几种调试程序的方法;

    3.掌握在Proteus环境下建立文件原理图的方法;

    4.实现Proteus与Keil联调软件仿真。

三、使用仪器设备编号、部件及备件

    1.实验室电脑;

    2.单片机实验箱。

四、实验过程及数据、现象记录

    1.在Proteus环境下建立如下仿真原理图,并保存为文件;

         原理图中常用库元件的名称:

         无极性电容:CAP           极性电容:CAP-ELEC              单片机:AT89C51          

晶体振荡器:CRYSTAL  电阻:RES                                   按键:BUTTON

发光二极管:红色LED-RED 绿色LED-GREEN 蓝色LED-BLUE 黄色LED-YELLOW

    2.在Keil环境下建立源程序并保存为.ASM文件,生成.HEX文件;

    参考程序如下:

            ORG 0000H

            LJMP MAIN

            ORG     H       ;外部中断0程序入口地址

            LJMP EXINT0

            ORG 0030H

MAIN:   MOV SP,#60H     ;堆栈指针初始化

            SETB            ;设置外部中断0为边沿触发,若改为电平触发用什么指令?

            SETB            ;开外部中断0

            SETB            ;开CPU总中断

            MOV A,#01H

LOOP:   MOV P1,A

            RL A

            CALL DELAY

            SJMP LOOP

DELAY:  MOV R1,#        ;延时250ms子程序

DL1:    MOV R2,#  

DL2:    MOV R3,#  

            DJNZ R3,$

            DJNZ R2,DL2

            DJNZ R1,DL1

                            ;延时子程序返回

EXINT0: PUSH    

            PUSH    

            CLR RS1         ;这条指令起什么作用?

            SETB RS0        ;这条指令起什么作用?

            MOV R0,#  

LP:     MOV P1,#0FFH

            CALL DELAY

            MOV P1,#00H

            CALL DELAY

            DJNZ R0,LP

            POP PSW

            POP ACC

                            ;中断返回

            END

    将以上程序补充完整,流水时间间隔,闪烁时间间隔为250ms。

    3.将.HEX文件导入仿真图,运行并观察结果;

    4.利用Keil软件将程序下载至实验箱,进行硬件仿真,观察实验结果。

五、实验数据分析、误差分析、现象分析

    现象:利用单片机外部中断0,使用边沿触发方式,当P3.2所接按键按下时,流水灯停止流水,闪烁两次,按键抬起时,恢复原来的流水状态。

六、回答思考题

    1.若把边沿触发改为电平触发,有何不同?

    2.如何让流水灯保持原来的状态继续流水?

相关推荐