天天招生网
您的位置:首页 >> 职业技能 >> 单片机 >> 名师讲堂 >> 单片机外部中断使用

单片机外部中断使用


电子工程世界 2010-7-25 12:11:28 点击: 次  发表评论

很多人都知道51单片机中中断的重要性,但是书中的长篇累牍让我们一下子理解有点很不适应。所以我们尽可能简化51单片机的中断,目前我们是要学会单片机中断的使用就可以了,而不是从原理基本说起。

  在51单片机中有2个外部中断,这两个外部中断口处于低电平的时候开始触发中断信号,使得程序可以进入中断处理中断部分的程序。

  我们还是老规矩,先看看硬件电路:

 在图上的单片机原理图中,S0,S1分别接的是单片机的外部中断1和外部中断2,我们特意将两个发光二极管放在上面进行指示,以便我们可以看到中断运行的情况,此时我们可以设置中断程序的要求:

1、 指示灯平时没有中断按下的时候不进行工作,保持原有状态;

2、 当外部中断0响应的时候,我们就点亮D0,让外部中断0响应的条件就是按下S0按键。

  下面就是汇编程序:

ORG 0000H

LJMP MAIN ;主程序

ORG 0003H

LJMP W_INT0 ;进入中断子程序

  ORG 0100H

MAIN:MOV SP, #50H ;设置堆栈指针

SETB EA ;CPU所有中断开(IE最高位MSB)

SETB EX0 ;INT0中断开

CLR IT0 ;INT0低电平触发(为1则为下降沿触发)

MOV P1, #0FFH

JMP $

W_INT0:CLR P1.0

RETI

END

如下是c51的程序:

//---------------------------------------------------

#include

//---------------------------------------------------

//重定义I/0引脚名称

sbit led1=P1^0;

//---------------------------------------------------

//固定函数声明

void int_0(); //外部中断0

//---------------------------------------------------

void main(){

P1=0X0FF;

EA=1; // CPU所有中断开(IE最高位MSB)

EX0=1; // INT0中断开

IT0=0; // INT0低电平触发(为1则为下降沿触发)

while(1){

{

;

}

}

//-------------------------------------------------------------------

//INT0中断 由P3.2引脚产生

void int_0() interrupt 0 using 0

{

led0=0;

}

在上面的程序中,我们可以看出外部中断使用的方法,现在我们学会了使用中断0,那么我们现在开始学使用外部中断1吧。

首先我们来设置程序的要求:

1、 外部中断0点亮D0,关闭D1

2、 外部中断1点亮D1,关闭D0

我们先看看汇编语言的程序:

;---------------------------------------------------------------------

LED0 EQU P1.0

LED1 EQU P1.1

ORG 0000H

LJMP main

ORG 0003H

LJMP W_INT0

ORG 00013H

LJMP W_INT1

ORG 0100H

main:

SETB EA ;CPU所有中断开(IE最高位MSB)

SETB EX0 ;INT0中断开

CLR IT0 ;INT0低电平触发(为1则为下降沿触发)

SETB EX1 ;INT1中断开

CLR IT1 ;INT1低电平触发(为1则为下降沿触发)

MOV P1, #0FFH

JMP $

W_INT0:

SETB LED1 ;关闭LED1

CLR LED0 ;点亮LED0

RETI

W_INT0:

CLR LED1 ;点亮LED1

SETB LED0 ;关闭LED0

RETI

END

这是c51的程序:

//---------------------------------------------------

#include

//---------------------------------------------------

//重定义I/0引脚名称

sbit LED0=P1^0;

sbit LED1=P1^1;

//---------------------------------------------------

//固定函数声明

void int_0(); //外部中断0

void int_1(); //外部中断1

//---------------------------------------------------

void main(){

EA=1; // CPU所有中断开(IE最高位MSB)

EX0=1; // INT0中断开

IT0=0; // INT0低电平触发(为1则为下降沿触发)

EX1=1; // INT1中断开

IT1=0; // INT1低电平触发(为1则为下降沿触发)

while(1){

{

;

}

}

//-------------------------------------------------------------------

void initial(){

EA=1; // CPU所有中断开(IE最高位MSB)

EX0=1; // INT0中断开

IT0=0; // INT0低电平触发(为1则为下降沿触发)

EX1=1; // INT1中断开

IT1=0; // INT1低电平触发(为1则为下降沿触发)

return;

}

//-------------------------------------------------------------------

//INT0中断 由P3.2引脚产生

void int_0() interrupt 0 using 0

{

Led1=1; //关闭D1

LED0=0; //点亮D0

}

//-------------------------------------------------------------------

//INT1中断 由P3.3引脚产生

void int_1() interrupt 2 using 1

{

LED0=1; //关闭D0

LED1=0; //点亮D1

}

  这样,通过程序和实践,我们就可以很轻易学会了外部中断的使用方法。

 



阅读上一篇:定时器中断培训
阅读下一篇:暂无

专题推荐

三百六十行,欢迎各培训机构加盟

您想拥有一个全功能动态的独立网站吗