51单片机(80951系列)引脚功能说明

一 AT89C51引脚图

在这里插入图片描述

1.0 中断

1.0.1 中断源

AT89C51一共有5个中断源
(1)在这里插入图片描述:外部中断0,外部中断请求信号由在这里插入图片描述引脚输入,低电平或下降沿有效,中断请求标志位IE0。
(2)在这里插入图片描述:外部中断1,外部中断请求信号由引脚在这里插入图片描述输入,低电平或下降沿有效,中断请求标志位IE1。
(3)T0:定时/计数溢出时发出中断请求信号,中断请求标志位TF0(也就是之前说的溢出标志位)。
(4)T1:定时/计数溢出时发出中断请求信号,中断请求标志位TF1(也就是之前说的溢出标志位)。
(5)串行口中断:发出或接收1字节数据以后发出中断请求信号,中断请求标志位发送时为TI,接收时为RI。

1.0.2 控制中断特殊寄存器

控制中断的特殊功能寄存器包括:
(1)定时/计数控制寄存器TCON,
在这里插入图片描述

(2)串行口控制寄存器SCON
在这里插入图片描述

(3)中断允许寄存器IE
在这里插入图片描述

(4)中断优先级寄存器IP
在这里插入图片描述

1.0.3 中断函数

中断函数的格式:函数返回值类型 函数名(形式参数表) interrupt n using m

编写AT89C51单片机中断程序时,应遵循以下规则:
(1)中断函数没有返回值,因此将中断函数类型定义为void类型。
(2)中断函数不包含任何形式参数,形式参数表为空。
(3)在任何情况下都不能直接调用中断函数,否则会产生编译错误。
(4)如果在中断函数中再调用其他函数,则被调用的函数所使用的寄存器区必须与中断函数使用的寄存器区不同。

n是中断号,对应51单片机从外部中断0到串行口的5个中断向量,n的取值为0~4,编译器从8 × n + 3地址处产生中断向量
中断源对应的中断号,中断向量,和中中断优先级默认顺序如下
在这里插入图片描述
AT89C51单片机在内部RAM中可以使用4个工作寄存器区,每个工作区包括8个工作寄存器(R0~R7)
C51拓展了一个关键字using,using后面的m用来选择AT89C51的4个不同的工作寄存器区。
using是一个选项,如果不选用该选项,中断函数中所用工作寄存器的内容将会保持到堆栈中。
关键字using对函数目标代码的影响如下:在中断函数的入口处将当前工作寄存器区的内容保护到堆栈中,函数返回之前将被保护的寄存器区的内容从堆栈中恢复。使用关键字using在函数中确定一个工作寄存器区时必须十分小心,要保证任何工作寄存器区的切换都只在指定的控制区域中发生,否则将产生不正确的函数结果;

不正确的结果举例:如果一个低优先级中断正在被执行,这个中断使用的工作寄存器区是0,另外一个高优先级中断产生并且工作寄存区也0,这个时候就会产生数据紊乱。

1.0.4 中断优先级

低优先级中断可以被高优先级中断打断:一个低优先级中断正在执行,此时一个高优先级中断产生,那么会先执行高优先级中断,执行完高优先级中断再执行低优先级中断。

同级中断不能相互打断

低优先级中断不能打断高优先级中断

1.0.5 外部中断实验

1.0.5.1 电路图

在这里插入图片描述

1.0.5.2 代码
#include<reg51.h>

sbit P1_0 = P1^0;

int main()
{
   
	IT1=1;//设置中断触发方式,下降沿触发
	EX1=1; //开启开外部中断1
	EA=1;//开启总中断
	while(1);
}
void int_1() interrupt 2 		   //外部中断函数1,中断号为2,使用工作寄存器区为0
{
   
	P1_0=!P1_0;	
}
  
 

2.0

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值