《初学者C51自学笔记》之中断(外部中断0)

概念:

       CPU在处理某一事件A时,发生了另一事件B请求CPU迅速去处理(中断发生);CPU暂时中断当前的工作,转去处理事件B(中断响应和中断服务);待CPU将事件B处理完毕后,再回到原来事件A被中断的地方继续处理事件A(中断返回),这一过程称为中断 。

(P3.2)可由IT0(TCON.0)选择其为低电平有效还是下降沿有效。当CPU检测到P3.2引脚上出现有效的中断信号时,中断标志IE0(TCON.1)置1,向CPU申请中断。

低电平有效:P3.2=0时中断;

下降沿有效:从高电平跳变为低电平时中断;

优先级:

中断源:

中断源符号

名称

中断引起原因

中断号

/INT0

外部中断0

P3.2引脚低电平或下降沿信号

0

T0

定时器0中断

定时/计数器0计数回0溢出

1

/INT1

外部中断1

P3.3引脚低电平或下降沿信号

2

T1

定时器1中断

定时/计数器1计数回0溢出

3

TI/RI

串行口中断

串行通信完成一帧数据发送或接收引起中断

4

中断响应条件:1、中断源有中断请求;2、此中断源的中断允许位为1;3、CPU开中断(即EA=1)。

外部中断0程序:

EA=1;//打开总中断开关

EX0=1;//开外部中断0

IT0=0/1;//设置外部中断的触发方式

void int0 () interrupt 0 using  1
{
	
}

void:中断是无返回值得;

int0是命名随便写(只要不是关键词);

interrupt:表示现在用的是中断函数(必须加上);0 :中断号;

using:寄存器(可不加);1:哪个寄存器;

 

#include<reg52.h>
#define uchar unsigned char 
#define uint unsigned int 

sbit led0=P0^0;

unsigned char code smg_du[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71,0x00};
unsigned char code smg_we[]={0x08,0x18,0x28,0x38,0x48,0x58,0x68,0x78};

//************************************************
//延时函数,在12MHz的晶振频率下
//大约50us的延时
//************************************************
void delay_50us(uint t)
{
	uchar j;
	for(;t>0;t--)
        for(j=19;j>0;j--);
}

//************************************************
//延时函数,在12MHz的晶振频率下
//大约50ms的延时
//************************************************
void delay_50ms(uint t)
{
	uint j;
	for(;t>0;t--)
	for(j=6245;j>0;j--);
}

void main()
{
	uchar i;

	EA=1;	 //开总中断开关
	EX0=1;	 //打开外部中断0开关
	IT0=1;	 //触发方式设置(下降沿)

	while(1)
	{
		for(i=0;i<10;i++)
		{
		P1=smg_du[i];
		delay_50ms(10);
		}
	}
} 

void int0 () interrupt 0
{
	led0=0;
	delay_50ms(20);
	led0=1;
}

 

  • 20
    点赞
  • 53
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值