📄 51单片机的中断系统--我们的技术是您的! www_icwin_net.htm
字号:
cellSpacing=0 frame=vsides rules=none width=760>
<TBODY>
<TR>
<TD align=right height=24>
<DIV align=left class=style5>[<A
href="http://www.icwin.net/cs.asp">经验代码</A>]->[<A
href="http://www.icwin.net/cs.asp?cat_id=33">嵌入开发经验</A>]<SPAN
class=style6>->51单片机的中断系统</SPAN> </DIV>
<DIV></DIV></TD></TR>
<TR>
<TD background="51单片机的中断系统--我们的技术是您的! www_icwin_net.files/menu_bg2.gif"
height=4 width="96%"></TD></TR></TBODY></TABLE>
<TABLE align=center border=1 borderColor=#666666 cellPadding=0 cellSpacing=0
frame=vsides rules=none width=760>
<TBODY>
<TR>
<TD align=left bgColor=#ffffff vAlign=top width=553>
<TABLE align=center
background="51单片机的中断系统--我们的技术是您的! www_icwin_net.files/mainbg.gif" border=0
cellPadding=2 cellSpacing=0 height=25 width=530>
<TBODY>
<TR>
<TD bgColor=#ffffff> </TD></TR></TBODY></TABLE>
<TABLE align=center bgColor=#ffffff border=1 borderColor=#c0c0c0
cellPadding=3 cellSpacing=0 style="BORDER-COLLAPSE: collapse" width=530>
<TBODY>
<TR>
<TD align=middle height=22 width="90%"><SPAN
class=style6><STRONG>51单片机的中断系统</STRONG></SPAN></TD></TR>
<TR>
<TD bgColor=#ffffff height=22>51单片机的中断系统 <BR><BR>51单片机的中断系统
<BR>中断系统:<BR><BR>8031单片机的中断系统简单实用,其基本特点是:有5个固定的可屏蔽中断源,3个在片内,2个在片外,它们在程序存储器中各有固定的中断入口地址,由此进入中断服务程序;5个中断源有两级中断优先级,可形成中断嵌套;2个特殊功能寄存器用于中断控制和条件设置的
编程。<BR><BR>中断系统的结构:<BR>5个中断源的符号、名称及产生的条件如下。<BR>INT0:外部中断0,由P3.2端口线引入,低电平或下跳沿引起。<BR>INT1:外部中断1,由P3.3端口线引入,低电平或下跳沿引起。<BR>T0:定时器/计数器0中断,由T0计满回零引起。<BR>T1:定时器/计数器l中断,由T1计满回零引起。<BR>TI/RI:串行I/O中断,串行端口完成一帧字符发送/接收后引起。<BR>整个中断系统的结构框图见下图一所示。<BR><BR><BR><BR>由图一可见,外部中断有下跳沿引起和低电平引起的选择;串行中断有发送(TI)相接收(R1)的区别;各个中断源打开与否,受中断自身的允许位和全局允许位的控制,并具有高优先级和低优先级的选择。<BR><BR><BR>中断系统的控制寄存器:<BR>中断系统有两个控制寄存器IE和IP,它们分别用来设定各个中断源的打开/关闭和中断优先级。此外,在TCON中另有4位用于选择引起外部中断的条件并作为标志位。<BR><BR>1.中断允许寄存器--IE<BR>IE在特殊功能寄存器中,字节地址为A8H,位地址(由低位到高位)分别是A8H-AFH。<BR>IE用来打开或关断各中断源的中断请求,基本格式如下图二所示:<BR><BR><BR><BR><BR>EA:全局中断允许位。EA=0,关闭全部中断;EA=1,打开全局中断控制,在此条件下,由各个中断控制位确定相应中断的打开或关闭。<BR>×:无效位。<BR>ES:串行I/O中断允许位。ES=1,打开串行I/O中断;ES=0,关闭串行I/O中断。<BR>ETl;定时器/计数器1中断允许位。ETl=1,打开T1中断;ETl=O,关闭T1中断。<BR>EXl:外部中断l中断允许位。EXl=1,打开INT1;EXl=0,关闭INT1。<BR>ET0:定时器/计数器0中断允许位。ET0=1,打开T0中断;ET0=0,关闭TO中断。<BR>EXO:外部中断0中断允许位。Ex0=1,打开INT0;EX0=0,关闭INT0.<BR><BR><BR>中断优先寄存器--IP:<BR>IP在特殊功能寄存器中,字节地址为B8H,位地址(由低位到高位)分别是B8H一BFH,IP用来设定各个中断源属于两级中断中的哪一级,IP的基本格式如下图三所示:<BR><BR><BR><BR>×:无效位。<BR>PS:串行I/O中断优先级控制位。PS=1,高优先级;PS=0,低优先级。<BR>PTl:定时器/计数器1中断优先级控制位。PTl=1,高优先级;PTl=0,低优先级。<BR>Pxl:外部中断1中断优先级控制位。Pxl=1,高优先级;PXl=O,低优先级。<BR>PT0:定时器/计数器o中断优先级控制位。PT0=1,高优先级;PTO=0,低优先级。<BR>Px0:外部中断0中断优先级控制位。Px0=1,高优先级;Px0=0,伤优先级。<BR>在MCS-51单片机系列中,高级中断能够打断低级中断以形成中断嵌套;同级中断之间,或低级对高级中断则不能形成中断嵌套。若几个同级中断同时向CPU请求中断响应,则CPU按如下顺序确定响应的先后顺序:<BR><BR>INT0一T0---INT1一T1一RI/T1.<BR><BR>中断的响应过程<BR><BR>若某个中断源通过编程设置,处于被打开的状态,并满足中断响应的条件,而且①当前正在执行的那条指令已被执行完<BR>1、当前末响应同级或高级中断<BR>2、不是在操作IE,IP中断控制寄存器或执行REH指令则单片机响应此中断。<BR>在正常的情况下,从中断请求信号有效开始,到中断得到响应,通常需要3个机器周期到8个机器周期。中断得到响应后,自动清除中断请求标志(对串行I/O端口的中断标志,要用软件清除),将断点即程序计数器之值(PC)压入堆栈(以备恢复用);然后把相应的中断入口地址装入PC,使程序转入到相应的中断服务程序中去执行。<BR>各个中断源在程序存储器中的中断入口地址如下:<BR>中断源
入口地址<BR>INT0(外部中断0) 0003H<BR>TF0(TO中断) 000BH<BR>INT1(外部中断1)
0013H<BR>TFl(T1中断) 001BH<BR>RI/TI(串行口中断)
0023H<BR>由于各个中断入口地址相隔甚近,不便于存放各个较长的中断服务程序,故通常在中断入口地址开始的二三个单元中,安排一条转移类指令,以转入到安排在那儿的中断服务程序。以T1中断为例,其过程下如图四所示。<BR>由于5个中断源各有其中断请求标志0,TF0,IEl,TFl以及RI/TI,在中断源满足中断请求的条件下,各标志自动置1,以向CPU请求中断。如果某一中断源提出中断请求后,CPU不能立即响应,只要该中断请求标志不被软件人为清除,中断请求的状态就将一直保持,直到CPU响应了中断为止,对串行口中断而言,这一过程与其它4个中断的不同之处在于;即使CPU响应了中断,其中断标志RI/TI也不会自动清零,必须在中断服务程序中设置清除RI/TI的指令后,才会再一次地提出中断请求。<BR>CPU的现场保护和恢复必须由被响应的相应中断服务程序去完成,当执行RETI中断返回指令后,断点值自动从栈顶2字节弹出,并装入PC寄存器,使CPU继续执行被打断了的程序。<BR>下面给出一个应用定时器中断的实例。<BR>现要求编制一段程序,使P1.0端口线上输出周期为2ms的方波脉冲。设单片机晶振频率<BR>Fosc=6MHZ.<BR>1、方法:利用定时器T0作1ms定时,达到定时值后引起中断,在中断服务程序中,使P1.0的状态取一次反,并再次定时1ms。<BR>2、定时初值:机器周期MC=12/fosc=2us。所以定时lms所需的机器周期个数为500D,亦即0lF4H。设T0为工作方式1(16位方式),则定时初值是(01F4H)求补=FEOCH<BR><BR><BR><BR>START:
MOV TMOD,#01H ;T0为定时器状态,工作方式1 <BR> MOV TL0,#0CH ;T0的低位定时初值 <BR>
MOV TH0,#0FEH ;T0的高位定时初值 <BR> MOV TCON,#10H ;打开T0 <BR> SETB ET0
;1ET0,即允许T0中断 <BR> SETB EA ;1EA,即充许全局中断 <BR> AJMP $ ;动态暂存
<BR>000BH: AJMP IST0 ;转入T0中断服务程序入口地址IST0 <BR>IST0: MOV TL0,#0CH
;重置定时器初值 <BR> MOV TH0,#0FEH ;重置定时器初值 <BR> CPL P1.0 ;P1.0取反 <BR>
RET1 ;中断返回
<BR><BR>串行端口的控制寄存器:<BR><BR>串行端口共有2个控制寄存器SCON和PCON,用以设置串行端口的工作方式、接收/发送的运行状态、接收/发送数据的特征、波特率的大小,以及作为运行的中断标志等。<BR>①串行口控制寄存器SCON<BR>SCON的字节地址是98H,位地址(由低位到高位)分别是98H一9FH。SCON的格式如图五所示。<BR><BR><BR><BR>SMo,SMl:<BR>串行口工作方式控制位。<BR>00--方式0;01--方式1;<BR>10--方式2;11--方式3。<BR>SM2:<BR>仅用于方式2和方式3的多机通讯控制位<BR>发送机SM2=1(要求程控设置)。<BR>当为方式2或方式3时:<BR>接收机
SM2=1时,若RB8=1,可引起串行接收中断;若RB8=0,不<BR>引起串行接收中断。SM2=0时,若RB8=1,可引起串行接收中断;若<BR>RB8=0,亦可引起串行接收中断。<BR>REN:<BR>串行接收允许位。<BR>0--禁止接收;1--允许接收。<BR>TB8:<BR>在方式2,3中,TB8是发送机要发送的第9位数据。<BR>RB8:<BR>在方式2,3中,RB8是接收机接收到的第9位数据,该数据正好来自发<BR>送机的TB8。<BR>TI:<BR>发送中断标志位。发送前必须用软件清零,发送过程中TI保持零电平,<BR>发送完一帧数据后,由硬件自动置1。如要再发送,必须用软件再清零。<BR>RI:<BR>接收中断标志位。接收前,必须用软件清零,接收过程中RI保持零电<BR>平,接收完一帧数据后,由片内硬件自动置1。如要再接收,必须用软件<BR>再清零。<BR><BR>电源控制寄存器PCON<BR><BR>PCON的字节地址为87H,无位地址,PCON的格式如图六所示。需指出的是,对80C31单片机而言,PCON还有几位有效控制位。<BR><BR><BR>SMOD:波特率加倍位。在计算串行方式1,2,3的波特率时;0---不加倍;1---加倍。<BR><BR>串行中断的应用特点:<BR><BR>8031单片机的串行I/O端口是一个中断源,有两个中断标志RI和TI,RI用于接收,TI用于发送。<BR>串行端口无论在何种工作方式下,发送/接收前都必须对TI/RI清零。当一帧数据发送/接收完后,TI/RI自动置1,如要再发送/接收,必须先用软件将其清除。<BR>在串行中断被打开的条件下,对方式0和方式1来说,一帧数据发送/接收完后,除置位TI/RI外,还会引起串行中断请求,并执行串行中侧目务程序。但对方式2和方式3的接收机而言,还要视SM2和RB8的状态,才可确定RI是否被置位以及串行中断的开放:<BR>SM2
RB8 接收机中断标志与中断状态<BR>0 1 激活RI,引起中断<BR>1 0 不激活RI,不引起中断<BR>1 1
激活RI,引起中断<BR>单片机正是利用方式2,3的这一特点,实现多机间的通信。串行端口的常用应用方法见相关章节。<BR><BR>波特率的确定:<BR><BR>对方式0来说,波特率已固定成fosc/12,随着外部晶振的频率不同,波特率亦不相同。常用的fosc有12MHz和6MHz,所以波特率相应为1000×103和500×103位/s。在此方式下,数据将自动地按固定的波特率发送/接收,完全不用设置。<BR>对方式2而言,波特率的计算式为2SMOD·fosc/64。当SMOD=0时,波特率为fm/64;当SMOD=1时,波特率为fosc/32。在此方式下,程控设置SMOD位的状态后,波特率就确定了,不需要再作其它设置。<BR>对方式1和方式3来说,波特率的计算式为2SMOD/32×T1溢出率,根据SMOD状态位的不同,波特率有Tl/32溢出率和T1/16溢出率两种。由于T1溢出率的设置是方便的,因而波特率的选择将十分灵活。<BR>前已叙及,定时器Tl有4种工作方式,为了得到其溢出率,而又不必进入中断服务程序,往往使T1设置在工作方式2的运行状态,也就是8位自动加入时间常数的方式。由于在这种方式下,T1的溢出率(次/秒)计算式可表达成:<BR><BR><BR><BR>下面一段主程序和中断服务程序,是利用串行方式l从数据00H开始连续不断增大地串行发送一片数据的程序例。设单片机晶振的频率为6MHZ,波特率为1200位/秒。<BR><BR>ORG
2000H ;1200位/秒的定时器初值 <BR>MOV TL1,#0F3H <BR>MOV TH1,#0F3H ;使SMOD=0
<BR>MOV PCON,#00H ;T1方式2 <BR>MOV TMOD,#20H <BR>SETB EA <BR>CLR
ET1 ;关闭T1中断 <BR>SETB ES ;开串行中断 <BR>SETB TR1 ;开T1定时 <BR>MOV SCON,#40H
;串行方式1 <BR>CLR A <BR>MOV SBUF,A ;串行发送 <BR>JNB T1,$ ;等待发送完 <BR>CLR
T1, ;清标志 <BR>SJMP $ <BR>ORG 0023H ;串行中断入口地址 <BR>MOV SBUF,A ;连续发送
<BR>JNB T1,$ <BR>INC A <BR>CLR T1 <BR>RET1 ;中断返回
<BR><BR> <BR><BR><SPAN
class=style4>--------------------------------------------------------------------------------------</SPAN><BR> <IMG
border=0
src="51单片机的中断系统--我们的技术是您的! www_icwin_net.files/none.gif"><IMG
border=0
src="51单片机的中断系统--我们的技术是您的! www_icwin_net.files/i8.gif"> (浏览:58)<B>内容</B><BR></TD>
<FORM name=form1>
<TR>
<TD align=right colSpan=2>
<TABLE align=center border=0 cellPadding=0 cellSpacing=0
width="100%">
<TBODY>
<TR>
<TD align=middle width="1%"> </TD></TR></FORM></TBODY></TABLE>
<TABLE align=center bgColor=#bdc0c8 border=0 cellPadding=6
cellSpacing=1 width="100%">
<TBODY>
<TR>
<TD bgColor=#ffffff borderColor=#666666><FONT
color=red>查看:2006-1-10 15:03:56</FONT></TD>
<TD align=middle bgColor=#ffffff><INPUT class=button onclick="" type=button value=复制>
<INPUT class=button onclick=javascript:window.print() type=button value=打印>
<INPUT class=button onclick=javascript:history.go(-1) type=button value=返回>
<INPUT class=button name=close2 onclick="window.close();return false;" type=button value=关闭>
</TD></TR></TBODY></TABLE></TD></TR></TBODY></TABLE></TD>
<TD background="51单片机的中断系统--我们的技术是您的! www_icwin_net.files/xu.gif" height=190
width=1></TD>
<TD align=left background="" vAlign=top width=204>
<TABLE align=center border=0 cellPadding=0 cellSpacing=0 width="100%">
<TBODY>
<TR>
<TD width=204><IMG border=0
src="51单片机的中断系统--我们的技术是您的! www_icwin_net.files/left_top2.gif"
useMap=#Map><MAP name=Map><AREA coords=61,11,87,24
href="http://www.icwin.net/connect.asp" shape=RECT title=留言本><AREA
coords=134,11,160,24 href="http://www.icwin.net/bbs/default.asp"
shape=RECT target=_blank title="ICWIN 论坛"></MAP></TD></TR></TBODY></TABLE>
<TABLE align=right border=0 cellPadding=0 cellSpacing=0 width=196>
<TBODY>
<TR>
<TD align=middle background="" height=24><STRONG>文 章 查
找</STRONG></TD></TR>
<FORM action=cs.asp?cat_id=33 method=post name=form2>
<TR>
<TD align=middle height=28><INPUT CHECKED name=select type=radio
value=m_Artkeyword> <FONT color=#0000ff>关键字</FONT> <INPUT
name=select type=radio value=m_ArtTitle><FONT
color=#ff00ff>标题</FONT> <INPUT name=select type=radio
value=m_ArtContent> <FONT color=#ff7f50>内容</FONT> </TD></TR>
<TR>
<TD align=middle height=28><INPUT class=lanyu maxLength=1000
name=keyword onfocus=this.select(); size=15> <INPUT class=button name=search type=submit value=搜索></TD></TR></FORM></TR>
<TR>
<TD align=middle background="" height=24><STRONG></STRONG></TD></TR>
<TR>
<TD> <IMG border=0 height=17
src="51单片机的中断系统--我们的技术是您的! www_icwin_net.files/none.gif"
width=8><IMG border=0
src="51单片机的中断系统--我们的技术是您的! www_icwin_net.files/title.gif"> <A
href="http://www.icwin.net/ShowArtitle.ASP?art_id=5590&cat_id=33"
title="[74系列器件] (214)"> 74系列器件 </A><BR> <IMG border=0 height=17
src="51单片机的中断系统--我们的技术是您的! www_icwin_net.files/none.gif"
width=8><IMG border=0
src="51单片机的中断系统--我们的技术是您的! www_icwin_net.files/title.gif"> <A
href="http://www.icwin.net/ShowArtitle.ASP?art_id=5936&cat_id=33"
title="[串口示例] (139)"> 串口示例 </A><BR> <IMG border=0 height=17
src="51单片机的中断系统--我们的技术是您的! www_icwin_net.files/none.gif"
width=8><IMG border=0
src="51单片机的中断系统--我们的技术是您的! www_icwin_net.files/title.gif"> <A
href="http://www.icwin.net/ShowArtitle.ASP?art_id=5569&cat_id=33"
title="[基于中断的串口驱动及显示程序] (131)"> 基于中断的串口驱动及显示程序 </A><BR> <IMG
border=0 height=17
src="51单片机的中断系统--我们的技术是您的! www_icwin_net.files/none.gif"
width=8><IMG border=0
src="51单片机的中断系统--我们的技术是您的! www_icwin_net.files/title.gif"> <A
href="http://www.icwin.net/ShowArtitle.ASP?art_id=5549&cat_id=33"
title="[单片机C51串口中断接收和发送测试例程] (130)"> 单片机C51串口中断接收...
</A><BR> <IMG border=0 height=17
src="51单片机的中断系统--我们的技术是您的! www_icwin_net.files/none.gif"
width=8><IMG border=0
src="51单片机的中断系统--我们的技术是您的! www_icwin_net.files/title.gif"> <A
href="http://www.icwin.net/ShowArtitle.ASP?art_id=5575&cat_id=33"
title="[C51中断处理过程] (124)"> C51中断处理过程 </A><BR> <IMG border=0
height=17 src="51单片机的中断系统--我们的技术是您的! www_icwin_net.files/none.gif"
width=8><IMG border=0
src="51单片机的中断系统--我们的技术是您的! www_icwin_net.files/title.gif"> <A
href="http://www.icwin.net/ShowArtitle.ASP?art_id=5933&cat_id=33"
title="[arm初始化] (105)"> arm初始化 </A><BR> <IMG border=0 height=17
src="51单片机的中断系统--我们的技术是您的! www_icwin_net.files/none.gif"
width=8><IMG border=0
src="51单片机的中断系统--我们的技术是您的! www_icwin_net.files/title.gif"> <A
href="http://www.icwin.net/ShowArtitle.ASP?art_id=5581&cat_id=33"
title="[ARM伪指令] (105)"> ARM伪指令 </A><BR> <IMG border=0 height=17
src="51单片机的中断系统--我们的技术是您的! www_icwin_net.files/none.gif"
width=8><IMG border=0
src="51单片机的中断系统--我们的技术是您的! www_icwin_net.files/title.gif"> <A
href="http://www.icwin.net/ShowArtitle.ASP?art_id=165&cat_id=33"
title="[uC/OS和uClinux的比较] (101)"> uC/OS和uClinu... </A><BR> <IMG
border=0 height=17
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -