历史上的今天
返回首页

历史上的今天

今天是:2024年11月03日(星期日)

2021年11月03日 | STC89C52之中断系统 ---- 51单片机的核心 自学笔记

2021-11-03 来源:eefocus

一、中断系统

1.1、概念

cpu在处理某一事件A时,发生了另外一事件B请求cpu迅速去处理(中断发生);


cup暂时中断当前的工作,转去处理事件B(中断响应和中断服务);


待cup将事件B处理完毕后,再回到原来事件A被中断的地方继续处理事件A(中断返回);


这一过程称为中断。

引起CPU中断的根源,称为中断源。中断源向CPU提出的中断请求。cup暂时中断原来的事务A,转去处理事件B。对事件B


处理完毕后,再回到原来被中断的地方(即:断点)称为中断返回,实现上述中断功能的部件称为中断系统。

1.2、中断系统的功能与优点

解决了快速主机与慢速i/o设备的数据传送问题。

分时操作:cpu可以为多个io设备服务,提供计算机的利用率。

实时操作:cpu能够及时处理应用系统的随机事件,系统实时性大大增强。

可靠性高:cpu具有处理设备故障及掉电等突发性事件的能力,从而使系统可靠性提高。

1.3、89C52单片机中断系统的结构

89C52的中断系统有5个中断源,2个优先级,可实现二级中断嵌套。


二级中断嵌套:在一个中断里面还可以实现一个中断

TF0,TF1:T1溢出(外部)中断请求标志   TF0=1溢出   TF0不等于1    计数器、定时器正常工作


RI:接收完成标志          RI =1 一帧数据接受完成      向cpu发送中断请求


TI:发送完成标志           TI=1 一帧数据发送完成     向cpu发送中断请求


IE0、IE1:中断标志位


二、中断允许控制

 

 CPU对中断系统所有中断以及某个中断源的开放和屏蔽是由中断允许寄存器IE控制的。


EX0(IE,0):外部中断0允许位;                置1允许外部中断                       置0不允许外部中断


ET0(IE,1):定时/计数器T0中断允许位      置1允许定时器计数器中断        置0 不允许打开中断


EX1(IE,2):外部中断1允许位;               置1允许外部中断                       置0不允许外部中断


ET1(IE,3);定时计数器T1中断允许位        置1允许定时器计数器中断        置0 不允定时器计数器中断


ES(IE,4);串行口中断允许位                       置1允许串行口中断                   置0不允许串行口中断


EA(IE,7);CPU中断允许位(总允许)位 ;        如果EA不置1,上述如EX1,ET1置1也效


三、中断请求标志     

3.1、TCON的中断标志

     

ITO(TCON.0):外部中断0触发控制位。


 当IT0=0时,为电平触发方式      低电平

当IT0=1时,为边沿触发方式(下降沿有效)

IE0(TCON.1):外部中断0中断请求标志位。


IT1(TCON.2):外部中断1触发方式控制位。


IE1(TCON.3):外部中断1中断请求标志位。


TF0(TCON.5):定时/计数器T0溢出中断请求标志位。    置1溢出


TF1(TCON.7):定时/计数器T1溢出中断请求标志位。


2.2、优先级问题

同一优先级中的中断申请不止一个时,则有中断优先权排队问题,同一优先级的中断优先排队,由


中断系统的硬件确定的自然优先级形成,排列如下

 

2.3、51单片机的中断优先级的三条原则

CPU同时收到几个中断时,首先响应优先级别最高的中断请求。


正在进行的中断过程不能被新的同级或低优先级的中断请求所中断


正在进行的优先级中断服务,能被高优先级中断请求所中断


为了实现上述后两条原则,中断系统内部设有两个用户不能寻址的优先级状态触发器,其中一个置1,表示正在响应高优先级的中断,他将阻断后来所有的中断请求:另外一个置1,表示正在响应低优先级中断,他将阻断后来所有的低优先级中断请求。


四、51单片机中断处理过程

4.1、中断响应条件

中断源有中断请求

此中断的中断允许为1;

CPU开中断(即EA=1)

同时满足以上三条件,cpu才可能响应中断


 


4.2、使用中断的注意事项

你想使用的是那个中断是那个,选择相应的中断号;

你希望触发中断的条件是什么?

你希望中断之后干什么

 

五、代码示例

5.1、k3按键点亮LED模块的第一个LED灯

#include

typedef unsigned int u16;

typedef unsigned char u8;

sbit k3=P3^2; // 定义按键k3

sbit led = P2^0; // 定义 P20口是led

/*

  1,单片机-->LED&交通灯模块

  P20-->D1

  2,单片机-->独立按键模块

  P32-->K3

*/

void delay(u16 i)    // 延时函数

{

while(i--);

}

void IntoInit()       // 外部中断函数

{

//设置 INT0

IT0=1;//跳变沿触发方式(下降沿)

EX0=1;//打开 INT0 的中断允许。

EA=1;//打开总中断

}

 void main()

{

   IntoInit();   // 设置外部中断

   while(1);

}

 

void into() interrupt 0

{

delay(1000);  // 延时消抖

if(k3==0)

{

led=~led;

}

}

5.2、k4点亮led

#include                // 此文件中定义了单片机的一些特殊功能寄存器

typedef unsigned int u16;    // 宏定义  数据类型的声明

typedef unsigned char u8;

 

sbit k4=P3^3;                    // 定义按键k4

sbit led = P2^0;                   // 定义 P20口是led

/*

  1,单片机-->LED&交通灯模块

    P20-->D1

   2,单片机-->独立按键模块

    P33-->K4

*/

void delay(u16 i)    // 延时函数

{

while(i--);

}

void IntoInit()       // 外部中断函数

{

//设置 INT0

IT1=1;//跳变沿触发方式(下降沿)

EX1=1;//打开 INT0 的中断允许。

EA=1;//打开总中断

}

 void main()

{

   IntoInit();   // 设置外部中断

   while(1);

}

/*

中断0 外部知中断0         interrupt 0

中断道1 定时器1中断     interrupt 1

中断2 外部中断1         interrupt 2

中断3 定时器2中断     interrupt 3

中断4 串口中断             interrupt 4

*/

void into() interrupt 2    // interrupt 一个中断处理函数

{

delay(1000);  // 延时消抖

if(k4==0)

{

led=~led;

}

}


中断0        外部知中断0            interrupt 0

中断1       定时器1中断            interrupt 1

中断2       外部中断1                interrupt 2

中断3       定时器2中断            interrupt 3

中断4        串口中断                interrupt 4

推荐阅读

史海拾趣

Cyrustek公司的发展小趣事

在电子行业的发展过程中,Cyrustek公司始终能够精准把握市场需求的变化。无论是智能家居、物联网还是可穿戴设备等领域,Cyrustek都能够迅速推出符合市场需求的产品。这种敏锐的市场洞察力和快速响应能力,使得Cyrustek在电子行业中始终保持领先地位。同时,Cyrustek还注重与客户的沟通和合作,不断收集客户反馈,优化产品设计,提高客户满意度。

DCX-CHOL Enterprises公司的发展小趣事

为了进一步拓展业务领域和提升竞争力,DCX-CHOL Enterprises开始积极探索跨界合作的可能性。公司与多家知名企业和研究机构建立了战略合作关系,共同开展技术研发和产品创新。通过跨界合作,DCX-CHOL Enterprises不仅获得了更多的技术支持和市场资源,还拓宽了视野和思路,为公司未来的发展注入了新的活力。同时,公司还积极参与行业协会和组织的活动,加强与其他企业的交流与合作,共同推动电子行业的发展和进步。

台湾远翔(Feeling Technology)公司的发展小趣事

乔光电子成立于2009年,起初专注于过压、过流保护元器件的研发、生产和销售。公司凭借对技术的执着追求和对市场的敏锐洞察,迅速在行业内站稳脚跟。在创立初期,乔光电子就建立了先进的EMC实验室,致力于为客户提供顶级性能的过压、过流保护元器件和完整的电路保护解决方案。这一时期,乔光电子在福建和东莞建立了生产基地,为后续的快速发展奠定了坚实基础。

Connection One公司的发展小趣事

在电子行业的初期,Connection One公司凭借其创始人对半导体技术的深刻理解,成功研发出一款具有划时代意义的芯片。这款芯片不仅性能卓越,而且功耗极低,立即在市场上引起了轰动。公司因此迅速积累了第一笔资金,为后续的研发和扩展打下了坚实基础。

Cableform Inc公司的发展小趣事

进入21世纪,电子行业迎来了快速发展的黄金时期。为了适应市场需求的变化,Cableform Inc不断加大研发投入,致力于技术创新。公司成功开发出了一系列具有自主知识产权的电磁控制产品,涵盖了从直流电机控制到高精度磁铁控制等多个领域。这些技术创新不仅提升了公司的核心竞争力,也为客户提供了更加高效、可靠的解决方案。

Datalinear公司的发展小趣事

作为一家有远见的企业,Datalinear公司始终关注社会责任和可持续发展。公司积极参与环保活动,推行绿色生产理念,努力降低生产过程中的能耗和排放。同时,公司还关注员工的福利和发展,为员工提供良好的工作环境和培训机会。此外,Datalinear公司还积极参与社会公益事业,为社会做出了积极贡献。

问答坊 | AI 解惑

调制器 都在震动的时候电视机画面产生亮白条干扰

各位大佬:       您们好!        我市昨射频调制器的,最近遇见常见的问题,但是令我很困挠,敬请您们拉一把,请提出您们的高见,万分感激!        问题是:调制器安安装在机顶 ...…

查看全部问答>

AVR单片机定时器0设置的问题?

IAR的开发环境,用的是Atmega48单片机。 T0中断无法进入!设置如下: void timer0Init()            //定时器0初始化 {   // initialize timer 0   //TCCROB =0X00;    ...…

查看全部问答>

全球体积最小 价格最低进口GPRS模块

全球体积最小 价格最低进口GSM模块 sirius 35** 特点 目前市场存在的所有GSM模块(包括进口和国产模块) 价格最低廉,体积最小的一款GSM module 功耗低 若电池供电,待机时间长 关机…

查看全部问答>

我该使用什么样的显示模块儿?还需要什么外围电路或器件么?

首先,我先交代一下故事的发生背景。 暑假里一个实验室里要搞个类似于兴趣小组的东西,我当时兴冲冲的跑去了。老师给我布置的任务是将从单片机里的数据取出并存储,要求: ⑴能显示多行数据。(在五行以上) ⑵用单片机(51系列的)。 ⑶显示效 ...…

查看全部问答>

祝版主鸟语花香

                                 俺是花痴,给力,2008+3!!!…

查看全部问答>

MSP430选型样本,给需要的朋友

问淘宝店家要来的,放上来看看有没有人需要哈!…

查看全部问答>

430Boost—capTouch mediaControl

想弄份430Boost—capTouch  mediaControl  的控制命令,不知哪位大虾知道呢…

查看全部问答>

BC3.1光标

我的BC3.1打开后没有光标,连ABOUT提示框都无法关闭,谁有办法呀…

查看全部问答>

PIC24hj128gp510 ad采样之后转换不了 DONE 不能被硬件置1

写了一个AD采样程序,显示用数码管;但是无论自动手动都不能转换,DONE位不能被硬件置1,采样1次1次中断,不能进入中断, 晶振是6M, #include unsigned char const   Disp_Tab[] = {0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f, ...…

查看全部问答>

圆点博士小四轴飞行器MPU6050重力加速度研究。。。。

先看数据手册: 对应到小四轴上的坐标: 近似水平放置下的重力加速度数据: 以Y轴作为轴,沿着X轴顺时针转90度,把小四轴竖起来,获得下列加速度值: 以X轴作为轴,沿着Y轴逆时针转90度,把小四轴竖起来,获得下列加速度值: …

查看全部问答>