单片机(AT89C51)中断系统详解和中断系统应用实验

发布者:陈熙琼最新更新时间:2022-05-30 来源: eefocus关键字:单片机  AT89C51  中断系统 手机看文章 扫描二维码
随时随地手机看文章

什么叫做单片机的中断?

CPU暂时中止其正在执行的程序,转去执行请求中断的那个外设或事件的服务程序,等处理完毕后再返回执行原来中止的程序, 叫做中断。

为什么要设置中断?

  ⑴ 提高CPU工作效率


  ⑵ 具有实时处理功能


  ⑶ 具有故障处理功能


  ⑷ 实现分时操作


中断源

中断源是指能发出中断请求,引起中断的装置或事件。 80C51单片机的中断源共有5个,其中2个为外部中断源,3个为内部中断源:


⑴  INT0:外部中断0,中断请求信号由P3.2输入。


⑵  INT1:外部中断1,中断请求信号由P3.3输入。


⑶ T0:定时/计数器0溢出中断,对外部脉冲计数由P3.4输入。


⑷ T1:定时/计数器1溢出中断,对外部脉冲计数由P3.5输入。


⑸ 串行中断:包括串行接收中断RI和串行发送中断TI(P3.0/P3.1)


MCS-51单片机中断系统结构示意图

中断控制寄存器(三个方面四个功能寄存器)

中断请求:定时和外中断控制寄存器(TCON)& 串行控制寄存器(SCON)

中断允许控制寄存器(IE)

中断优先级控制寄存器(IP)


TCON

TCON中存放了 INT0、INT1、T0、T1 的中断请求标志,TCON是一个可位寻址的寄存器,高4位用于定时器控制,低4位用于外中断控制。各位功能如下:


TCON寄存器的功能

image.png

各位上的主要功能:


① TF1 —— T1溢出中断请求标志


            T1计数溢出后,TF1=1


② TF0 —— T0溢出中断请求标志


            T0计数溢出后,TF0=1


③ IE1 —— 外中断中断请求标志


            当P3.3引脚信号有效时,IE1=1


④ IE0 —— 外中断中断请求标志


            当P3.2引脚信号有效时,IE0=1


⑤ IT1 —— 外中断触发方式控制位


            IT1=1,边沿触发方式;


            IT1=0,电平触发方式。


⑥ IT0 —— 外中断触发方式控制位


            IT1=1,边沿触发方式;


            IT1=0,电平触发方式。


SCON

SCON为可位寻址寄存器,直接地址为98H


SCON寄存器的功能

image.png

各位上的主要功能:


① TI —— 串行口发送中断请求标志


                1—发完,0—未发完


② RI —— 串行口接收中断请求标志


                 当接收数据完毕时,RI=1,表示接收完一帧数据,请求中断,也可供查询, TI和 RI只能由程序清零。


IE

80C51对中断源的开放或关闭由中断允许控制寄存器IE控制。 


IE控制寄存器的功能

image.png

各位上的主要功能:


① EA  —— CPU中断允许控制位


            EA=1,CPU开中;


            EA=0,CPU关中,且屏蔽所有5个中断源。


② EX0 —— 外中断INT0中断允许控制位


            EX0=1,INT0开中;EX0=0,INT0关中。  


③ EX1 —— 外中断INT1中断允许控制位


            EX1=1,INT1开中;EX1=0,INT1关中。


④ ET0 —— 定时/计数器T0中断允许控制位


            ET0=1,T0开中;ET0=0,T0关中。


⑤ ET1 —— 定时/计数器T1中断允许控制位


            ET1=1,T1开中;ET1=0,T1关中。


⑥ ES  —— 串行口中断(包括串发、串收)允许控制位  


            ES=1,串行口开中;ES=0,串行口关中。


注:80C51对中断实行两级控制,总控制位是EA,每一中断源还有各自的控制位。首先要EA=1,其次还要自身的控制位置“1”


IP

    80C51有5个中断源,划分为2个中断优先级:高优先级和低优先级。


IP控制寄存器的功能

image.png

① PX0 :INT0中断优先级控制位。PX0=1,为高优先级;


                               PX0=0,为低优先级;


② PX1 :INT1中断优先级控制位。控制方法同上。


③ PT0 :T0中断优先级控制位。控制方法同上。


④ PT1 :T1中断优先级控制位。控制方法同上。


⑤ PS :串行口中断优先级控制位。控制方法同上。


 注:同级中的优先顺序为(从高到低) INT0、INT1、T0、T1、串行口


中断处理过程

主要分为四步:中断请求、中断响应、中断服务、中断返回


80C51五个中断入口地址:


INT0:0003H;         interrupt 0

T0:000BH;            interrupt 1

INT1:0013H;           interrupt 2

T1:001BH;            interrupt 3

串行口:0023H;         interrupt 4

例子:

 用外中断1的中断方式控制P1口8盏发光管的亮暗,要求每按一次开关K,灯由亮变暗或由暗变亮,请编程实现。


原理图: 

 

代码:


#include    

sbit  K=P3^3;               //将K位定义为P3.3,该定义可省略

void main(void)

  {

   EA=1;          //开放总中断

   EX1=1;        //允许使用INT1外中断

   IT1=1;        //选择负跳变来触发外中断

P1=0xff;          //设定P1口为输入状态

while(1) ;      //无限循环

  }

void int1(void) interrupt 2        //外中断1的中断编号为2

{

  P1=~P1;       //每产生一次中断请求,P1取反一次

}

思考题:若上图的开关改成与P3.2连接,如何修改程序?


原理图:

 

代码:

#include

sbit  K=P3^2;                   //将K位定义为P3.2,该定义可省略

void main(void)

  {

   EA=1;              //开放总中断

   EX0=1;            //允许使用INT0外中断

   IT0=1;            //选择负跳变来触发外中断

   P1=0x00;          //设定P1口为输入状态

   while(1);          //无限循环

  }

void int1(void) interrupt 0         //外中断0的中断编号为0

{

  P1=~P1;                      //每产生一次中断请求,P1取反一次

 

}


注意:当改变自己的中断方式的时候记得需要把和他配套的TCON和IE里面的值也改,否则会出错。

关键字:单片机  AT89C51  中断系统 引用地址:单片机(AT89C51)中断系统详解和中断系统应用实验

上一篇:<intrins.h>库函数
下一篇:单片机(AT89C51)按钮控制LED灯实现流水灯,闪烁流水灯

推荐阅读最新更新时间:2024-11-12 10:36

51单片机 bit定义标志位无效原因
我的51程序中用到了位定义:bit flag; 这样定义后,运行程序,下载到电路板上,发现flag根本不是按照自己设定的值,导致函数判断错误;后来查找到了原因 将keil中options中 target中 Memory Mode中要选择下图那两种方式才行;设置好后运行程序到电路板,果然成功正确运行了; 原因:之前设置成 Small:in DATA了,因为bit变量是位可寻址变量,而在51单片机RAM中有单独的区域是可位寻址的,那就是 PDATA区,至于为什么选择XDATA也可以, 那是因为XDATA区已经包括PDATA区了;
[单片机]
基于AVR单片机的无线远程数据采集终端的研制与开发
一、引言 随着城市供水规模扩大,城市管网不断增大,厦门自来水公司原有遥测系统难以适应生产调度需求。要求有一套可靠、快速的调度遥测系统,综合国内RTU(Remote Terminal Unit 远程测控终端)的发展状况及公司的具体情况,厦门自来水公司独立研制开发了一套新的基于AVR单片机及专用MODEM芯片的MTU(Master Terminal Unit中心调度机)、RTU无线电遥测系统。系统的整体结构如图1,其中粗黑框部分为系统的核心MTU、RTU。 分散地分布在全市的管网监测点上的远端RTU(系统可带256个RTU)采集数据,进行数据处理后通过无线电台向中心调度端发送数据,中心调度端接收到数据后进行数据处理,数据存储,并送
[单片机]
基于AVR<font color='red'>单片机</font>的无线远程数据采集终端的研制与开发
51单片机系列知识3--存储器(2)
3、 内部数据存储器的低128单元(00H~7FH) 51单片机的内部数据存储器总容量为256字节,地址由00H~FFH.这256字节的地址空间可以分成功能不同的低128字节单元和高128字节单元。 在256字节的内部数据存储器中,还有一个“位地址”空间(不是独立的)。其中一部分位在低128单元中,另一部分在高128单元中。所以内部数据存储器中有一些单元既可以对其执行按字节操作,也可以对该单元中的某一位单独进行为操作。 高128字节存放了特殊功能寄存器,但也有许多单元是空着的,这些单元是为51系类单片机的新型号保留的,一些已出现的新型号单片机因内部功能器件的增加而增加了不少特殊功能寄存器。为了使软件与新型单片机兼容,用
[单片机]
51<font color='red'>单片机</font>系列知识3--存储器(2)
基于单片机的多功能数字钟系统设计分析
引言 随着科技的发展,电子技术也在不断地向前飞速发展。本设计是制作一款多功能数字钟,其具有显示年、月、日,时、分、秒、星期及闹钟功能,而且秒、分、时、日、月、年可自动关联进位。秒具备清零功能,分、时、日、月、年可自动修改、手动设置等功能。它是以一块AT89S52芯片作为主控模块,采用DS1302作为定时来源的多功能数字钟。多功能数字钟结构较简单,因此便于操作使用。它具有高度的智能化和集成化,是现代人办公、生活、学习的好帮手,具有广阔的市场前景。同时,它具有闹铃和播放音乐等功能,由于这些完善的功能,它必将越来越受到社会各界人士的欢迎。 1 系统方案的论证与选择 1.1 各模块方案的论证与选择 1.1.1 主控模块
[单片机]
基于<font color='red'>单片机</font>的多功能数字钟系统设计分析
51单片机系列——单总线通信方式——DS18B20温度检测的设计
这个电路仿真的原理是因为:根据普中科技上的编程(一模一样),但用proteus7.8仿真的时候却仿真不出来,经过小编的一段时间的思考解决了用软件仿真DS18B20温度检测的电路。我先讲仿真电路图与源码分享给大家。 仿真电路图: temp.h //温度检测模块头文件 #ifndef __TEMP_H_ #define __TEMP_H_ #include reg52.h //---重定义关键词---// #ifndef uchar #define uchar unsigned char #endif #ifndef uint #define uint unsigned int #endif //--定义使用
[单片机]
51<font color='red'>单片机</font>系列——单总线通信方式——DS18B20温度检测的设计
单片机在医学信号检测仪中的应用
简介:设计了一种以微处理器Atmega163为核心,对人体多道生理参数进行实时采集和高速数据传输的电路,以此构成人体生理参数检测仪,为医生诊断病情提供依据。 1引言 传统的检测仪器大多由硬件电路来完成,不仅功能单一,而且开发周期长,不易维护。随着微电子技术和信息技术的高速发展,医学检测仪器正向组合式、多功能、智能化和微型化方向发展。现代数字部件的快速发展为医学检测仪提供了强有力的支持,医学检测仪器都无一例外地采用了微处理器来增强其功能。广泛地应用微处理器芯片能增强仪器的智能化程度,提高其稳定性和数据处理的精确性,使医学信号的采集、处理、通信一体化,并具有自诊断、自校验等一系列优点。 ATMEL公司新推出的AT90系列AVR
[单片机]
<font color='red'>单片机</font>在医学信号检测仪中的应用
单片机C语言程序设计:定时器控制单只LED
/* 名称:定时器控制单只 LED 说明:LED 在定时器的中断例程控制下不断闪烁。 */ #include reg51.h #define uchar unsigned char #define uint unsigned int sbit LED=P0^0; uchar T_Count=0; //主程序 void main() { TMOD=0x00; //定时器 0 工作方式 0 TH0=(8192-5000)/32; //5ms 定时 TL0=(8192-5000)%32; IE=0x82; //允许 T0 中断 TR0=1;
[单片机]
<font color='red'>单片机</font>C语言程序设计:定时器控制单只LED
单片机8x8点阵让数字0从右到左依次显示循环
用的单片机是普中的开发板,8x8点阵用的是74hc595进行段选,P0口位选 74hc595 8x8点阵用的是共阴极(左边的) 这次我要实现的是让数字0从右到左依次显示 #include reg52.h #include intrins.h typedef unsigned int u16; typedef unsigned char u8; sbit SCLK=P3^6; sbit RCK=P3^5; sbit SER=P3^4; u8 code duan0 ={{0x00,0x3C,0x42,0x42,0x42,0x3C,0x00,0x00}, //数字0的段选 {0x3C,0x42,0x
[单片机]
<font color='red'>单片机</font>8x8点阵让数字0从右到左依次显示循环
小广播
设计资源 培训 开发板 精华推荐

最新单片机文章
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

换一换 更多 相关热搜器件

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved