51单片机外部中断处理源程序

2022-12-26  

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

#include

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

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

sbit led1=P1^1;

sbit led2=P1^2;

sbit led3=P1^3;

sbit led4=P1^4;

sbit P32=P3^2;

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

//全局变量及位标志定义

bit FINT0;

bit FINT1;

bit FT0;

bit FT1;

bit FT2;

unsigned char T0_10ms;

unsigned char T0_50ms;

unsigned char T0_100ms;

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

//固定函数声明

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

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

void timer_0(); //定时器中断1

void timer_1(); //定时器中断2

void serial_1(); //串行中断1

void serial_2(); //串行中断2

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

//用户函数声明

void initial(); //初始化

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

void main(){

initial();

while(1){

P32=0; //为了使按'取消'、'确定'键能够产生INT0及INT1中断

//led4=0; //上一句等价于此句

if(FINT0){ //中断0来到要做什么事情

FINT0=0;

led1=0; //INT0中断时点亮

led2=0;

led3=0;

led3=0; //可以在此设一个断点

}

if(FINT1){ //中断1来到要做什么事情

FINT1=0;

led1=1; //INT1中断时熄灭

led2=1;

led3=1;

}

if(FT0){

FT0=0;

if(++T0_10ms>30){

T0_10ms=0;

//定时多少做什么事,未初始化里定时器尚未设置

}

}

}

}

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

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

{

FINT0=1;

}

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

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

void int_1() interrupt 2 using 1

{

FINT1=1;

}

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

//定时器0中断

void timer_0() interrupt 1 using 2

{

FT0=1;

}

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

//定时器1中断

void timer_1() interrupt 3 using 3

{

FT1=1;

}

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

//串行中断1

void serial_1() interrupt 4

{

}

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

//定时器2中断

void timer_2() interrupt 5

{

FT2=1;

}

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

1. 项目文件夹:

先关闭其它Project,,新建一个Project,, 保存在EXT_C文件夹,此Project包含的

所有源程序文件都放在这个文件夹,统一编辑修改和编译。

2. 仿真芯片选择:

硬件仿真必须选择特定的CPU,软件仿真只需要选择一般的52系列,这里

选择常用的Atmel 89C52

3. 系统初始化文件Startup.A51:

主要是内存清零,模拟堆栈安排等系统初始化操作,有时需要修改这个宏汇编

文件, 这个Project里没有加入这个文件。

4. 单步、全速运行到中断:

编译后可以用仿真器单步查看运行结果,在判断外部中断0或1到来的地方

设置断点,全速运行,如果有外部中断(P3.2/P3.3变低或有一个下降沿),那么

程序就停在设置的断点处。


文章来源于:电子工程世界    原文链接
本站所有转载文章系出于传递更多信息之目的,且明确注明来源,不希望被转载的媒体或个人可与我们联系,我们将立即进行删除处理。