实验目的:
利用INT0中断控制LED
实验器材:
Keil、protues
实验原理(给出硬件电路图):
实验原理:
- 关于位定义
2.关于中断服务函数
3.中断系统的结构
4.触发方式
实验步骤:
- 绘制protues中的原理图;
- 利用原理写汇编和C语言;
程序代码及实验结果(含汇编语言代码和C语言代码):
C语言:
#include<reg51.h>
#include<intrins.h>
void delay(int a)//延时函数,增大从一个状态到另一个状态之间的时间,避免因变化过快而超出人眼视觉停留的最佳时间
{
unsigned int t;
while(a--);
for(t=0;t<120;t++);
}
sbit LED = P0 ^ 0; //将单片机的P0.0端口定义为LED
sbit k=P3^2; //将终端按键定义为k,按键k为低电平有效
void main()
{
LED = 1;
EA = 1; //EA-中断允许总控制位。EA=1代表CPU开放所有中断
EX0 = 1; //打开INT0的中断允许
IT0=1; //设置外部中断的触发方式,设置下降沿(从1变为0)触发TCON 硬件可自动清零触发信号
while (1); //等待下降沿的产生,若k按键按下,下降沿产生,立即进入中断服务函数
}
void Interrupt_0() interrupt 0 //INT0的中断号为0
//调用中断服务函数,具体写法如下: void 函数名(void) interrupt 中断号
{
delay(3000); //延时消抖
if(k==0) //判断按键是否按下
{
LED = !LED;//将LED所代表的管脚电平进行翻转,控制LED的亮灭
}
}
汇编语言:
ORG 0000H ; 上电 & 复位 入口地址
LJMP START ;转向主程序
ORG 0003H ;外部 INT0 中断入口地址
LJMP INTT0 ;转向外部 INT0 中断 服务程序
ORG 0600H ;程序从这里开始
START: MOV P1,#0xfe ;设置P1的初始状态为灭
SETB EA ;EA-中断允许总控制位。EA=1代表CPU开放所有中断
;SETB-对位置一
SETB EX0 ; 打开INT0的中断允许
SETB IT0 ; 设置外部中断的触发方式,设置下降沿(从1变为0,检测到引脚为低电平就触发)触发TCON 硬件可自动清零触发信号
SJMP START ;等待下降沿的产生,若k按键按下,下降沿产生,立即进入中断服务函数
INTT0: CPL P0.0 ;对P0.0取反,改变LED灯的状态
RETI ;中断程序返回指令
END