一 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 中断优先级
低优先级中断可以被高优先级中断打断:一个低优先级中断正在执行,此时一个高优先级中断产生,那么会先执行高优先级中断,执行完高优先级中断再执行低优先级中断。
同级中断不能相互打断
低优先级中断不能打断高优先级中断文章来源:https://www.toymoban.com/news/detail-740554.html
1.0.5 外部中断实验
1.0.5.1 电路图
文章来源地址https://www.toymoban.com/news/detail-740554.html
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
到了这里,关于51单片机(80951系列)引脚功能说明的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!