51单片机中关于中断函数interrupt的使用

#include<reg52.h>

void main()
{
	P1 = 0x0f;// 0000 1111 下面四个灯亮 上面四个灯灭
	EX1 = 1;//INT1中断允许
	EA = 1;//全局中断打开
	IT1 = 1;//触发方式为下降沿触发
	while(1);
}

void jump_low()	 interrupt 2
{
	P1 = ~P1;  //位反转
}

关于interrupt函数用法:


void +函数名+interrupt +数字0~4


0 表示外部中断0


1 表示定时器/计数器(T0)


2外部中断1


3:定时器/计数器(T1)


4:串行口

 

51单片机中设置中断服务函数(ISRs,Interrupt Service Routine)一般涉及以下几个步骤: 1. **定义中断源**: 确定你要使用中断源,例如定时器溢出中断(Timer1 Overflow)、外部中断(INT0或INT1)或其他芯片特有的中断。 2. **启用中断**: 在系统复位后,使用适当的指令开启中断。例如,对于51单片机,如果你要启用某个外设的中断,需要写入相应的中断允许寄存器。 3. **设置中断向量表**: 中断向量表是一个存储中断服务函数地址的地方。每个中断源都有一个对应的向量地址,在这里指定实际的ISR函数位置。 4. **编写中断服务函数**: 编写用于处理特定中断函数函数通常接收一个参数(中断标志位),并在这个函数内处理中断相关的任务,比如更新计数器、操作GPIO等。 ```c void Timer1_ISR() { // 这里处理定时器1溢出后的操作,如计数器加1、LED切换等 } ``` 5. **入口点声明**: 为了让编译器知道这个函数是一个中断服务函数,你需要在`interrupt`关键字后面加上函数名,如`__interrupt void Timer1_ISR(void)`。 6. **处理中断标志**: 在中断结束后,记得清除中断标志,以便下一次中断到来时能正常响应。 ```c void __attribute__((naked)) interrupt TIMER1_VECTOR() { asm("push ACC"); asm("push PSW"); // 调用中断服务函数 call Timer1_ISR // 清除中断标志并返回到主程序 asm("pop PSW"); asm("pop ACC"); iret(); } ``` 在C语言层面,你需要包含中断相关的头文件,然后在适当的位置调用`sei()`(使能全局中断)和`cli()`(禁止全局中断)来管理中断开闭。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值