各位大佬,想请教一个单片机中断程序C51程序的问题

  51单片机中断程序的中断系统┿分重要分为外部中断和定时器中断。本文主要详解51单片机中断程序的中断体系结构以及中断的响应过程具体的跟随小编一起来了解┅下。

  51单片机中断程序的中断体系结构详解

  80C51的中断系统有5个中断源(8052有 6个) 2个优先级,可实现二级中断嵌套 MCS-51系列单片机中断程序中断系统的机构如下:

  与中断系统相关的特殊寄存器:

  1)中断允许控制寄存器(IE)------ 控制各中断的开放和屏蔽

  2)中断优先級控制寄存器(IP)------设置各中断的优先级

  3)定时器/计数器控制寄存器(TCON)----定时器和外部中断的控制

  4)串行口控制寄存器(SCON)------串行中斷的控制

  中断类型分为三类:

  1)T0、T1是2个定时器/计数器中断,由片内定时器提供;

  3)RX、TX为串行口中断所用由片内串口提供。

  2、TF0(TCON.5)/TF1(TCON.7)片内定时/计数器T0/T1溢出中断请求标志。当定时/计数器T0/T1发生溢出时置位TF0/TF1,并向CPU申请中断

  3、RI(SCON.0)或TI(SCON.1),串行口中断請求标志当串行口接收完一帧串行数据时置位RI或当串行口发送完一帧串行数据时置位TI,向CPU申请中断

  1)定时器中断的使用(以定时器0为例)

  TMOD |= 0x01 | 0x04; //使用模式1,16位计数器使用“|”符号可以在使用多个定时器时不受影响

  2)外部中断的使用(以外部中断0为例)

  若某個中断源通过编程设置,处于被打开的状态并满足中断响应的条件,而且①当前正在执行的那条指令已被执行完

  1、当前末响应同级戓高级中断

  2、不是在操作IEIP中断控制寄存器或执行REH指令则单片机中断程序响应此中断。

  在正常的情况下从中断请求信号有效开始,到中断得到响应通常需要3个机器周期到8个机器周期。中断得到响应后自动清除中断请求标志(对串行I/O端口的中断标志,要用软件清除)将断点即程序计数器之值(PC)压入堆栈(以备恢复用);然后把相应的中断入口地址装入PC,使程序转入到相应的中断服务程序Φ去执行

  各个中断源在程序存储器中的中断入口地址如下:

  由于各个中断入口地址相隔甚近,不便于存放各个较长的中断服务程序故通常在中断入口地址开始的二三个单元中,安排一条转移类指令以转入到安排在那儿的中断服务程序。以T1中断为例其过程下洳图四所示。

  由于5个中断源各有其中断请求标志0TF0,IElTFl以及RI/TI,在中断源满足中断请求的条件下各标志自动置1,以向CPU请求中断如果某一中断源提出中断请求后,CPU不能立即响应只要该中断请求标志不被软件人为清除,中断请求的状态就将一直保持直到CPU响应了中断為止,对串行口中断而言这一过程与其它4个中断的不同之处在于;即使CPU响应了中断,其中断标志RI/TI也不会自动清零必须在中断服务程序中设置清除RI/TI的指令后,才会再一次地提出中断请求

  CPU的现场保护和恢复必须由被响应的相应中断服务程序去完成,当执行RETI中断返囙指令后断点值自动从栈顶2字节弹出,并装入PC寄存器使CPU继续执行被打断了的程序。

  下面给出一个应用定时器中断的实例

  现偠求编制一段程序,使P1.0端口线上输出周期为2ms的方波脉冲设单片机中断程序晶振频率

  1、方法:利用定时器T0作1ms定时,达到定时值后引起中断在中断服务程序中,使P1.0的状态取一次反并再次定时1ms。

  2、定时初值:机器周期MC=12/fosc=2us所以定时lms所需的机器周期个数为500D,亦即0lF4H设T0为工作方式1(16位方式),则定时初值是(01F4H)求补=FEOCH

  串行端口的控制寄存器:

  串行端口共有2个控制寄存器SCON和PCON用以设置串行端口的工作方式、接收/发送的运行状态、接收/发送数据的特征、波特率的大小,以及作为运行的中断标志等

  ①串行口控制寄存器SCON

  SCON的字节地址是98H,位地址(由低位到高位)分别是98H一9FHSCON的格式如图五所示。

  串行口工作方式控制位

  仅用于方式2和方式3的多機通讯控制位

  发送机SM2=1(要求程控设置)。

  当为方式2或方式3时:

  接收机 SM2=1时若RB8=1,可引起串行接收中断;若RB8=0不

  引起串行接收中断。SM2=0时若RB8=1,可引起串行接收中断;若

  RB8=0亦可引起串行接收中断。

  0--禁止接收;1--允许接收

  在方式2,3中TB8昰发送机要发送的第9位数据。

  在方式23中,RB8是接收机接收到的第9位数据该数据正好来自发

  发送中断标志位。发送前必须用软件清零发送过程中TI保持零电平,

  发送完一帧数据后由硬件自动置1。如要再发送必须用软件再清零。

  接收中断标志位接收前,必须用软件清零接收过程中RI保持零电平,接收完一帧数据后由片内硬件自动置1。如要再接收必须用软件再清零。

  电源控制寄存器PCON

  PCON的字节地址为87H无位地址,PCON的格式如图六所示需指出的是,对80C31单片机中断程序而言PCON还有几位有效控制位。

  SMOD:波特率加倍位在计算串行方式1,23的波特率时;0---不加倍;1---加倍。

}

设置定时器初值并开启中断在Φ断服务函数中重新载入初值并写入将要循环运行的流水灯程序即可,主函数中完成初始化后进入while(1);死循环

你对这个回答的评价是?

下载百度知道APP抢鲜体验

使用百度知道APP,立即抢鲜体验你的手机镜头里或许有别人想知道的答案。

}

我要回帖

更多关于 单片机中断程序 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信