欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

89C52单片机中断与 I/O 控制

程序员文章站 2024-02-21 20:44:16
...

这个实验的内容是:通过外部中断控制8个LED灯顺序点亮(像流水灯),采用多个源文件和多个头文件编写C语言程序(即一个源文件对应一个头文件),并在proteus中在仿真。

关于多个源文件和多个头文件的编写规则请参考这篇博客:关于多个.c和.h文件时的相互调用

proteus图如下:
89C52单片机中断与 I/O 控制

具体实现方式请看下面的程序:

#include"main.h"

void main(){
	int1_init();  //初始化外部中断
	while(1);  //等待外部中断
}

#ifndef __MAIN_H__
#define __MAIN_H__

	#include"int1_init.h"
	#include"reg52.h"

#endif
#include"int1_init.h"

void int1_init(){
	IT1=1;//以下降沿为触发信号
	EX1=1;//外部中断控制位
	EA=1;//中断总控制位
}
#ifndef __INT1_INIT_H__
#define __INT1_INIT_H__

	#include"reg52.h"
	void int1_init(void);

#endif
#include"int1_isr.h"

int i=0;

//当按下按键时,进入中断函数执行指令
void int1_isr() interrupt 2{
	if(i<8){
		P0=~(0x01<<i);  //把0x01向左移一位,再按位取反
		i++;
	}
	//当i=8时,又点亮第一个LED灯
	else{
		i=1;
		P0=~(0x01);
	}
}
#ifndef __INT1_ISR_H__
#define __INT1_ISR_H__

	#include"reg52.h"

#endif