




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、236.1.1单片机中断6.1.2中断向量及中断寄存器6.1.3中断应用编程4 中断请求:“紧急事件”向CPU发出请求信号,要求CPU暂时停下“手头的工作”,先去处理“我的急件”,这个申请过程称为中断请求。“紧急事件”对CPU发出的请求信号称为中断信号。 中断响应:CPU暂停当前的工作,转而去执行发出请求的事件的过程称为中断响应。 中断返回:CPU处理完请求的事件后返回原来被暂停的事件的过程。5 在程序运行过程中,系统出现了一个必须由CPU立即处理的紧急事件,此时,CPU暂时中止当前程序的执行转而处理这个紧急事件的过程称为中断(interrupt)。 中断发生过程中,读者需要了解以下几个常用术
2、语:6 对于单片机来说,收到中断信号后,单片机需要暂停正在执行的程序,转而去响应中断请求并执行对应的中断子程序,待完成特定的子程序任务后,再返回执行刚才暂停的程序。中断的发生及执行过程如图6-1所示。图6-1 中断流程7 促使中断发生的事件称为中断源。51单片机提供了3种类型的中断源,共包括5个中断服务,即外部中断INT0、外部中断INT1、定时器/计数器中断T0、定时器/计数器中断T1和串口中断UART。单片机的中断控制系统如图6-2所示。图6-2 中断控制系统8 图6-2中的IE寄存器是中断启用寄存器,它控制着各个中断源的开关。只有当中断总开关EA打开并启用相应中断源的中断后,该中断才能被
3、CPU响应。IP寄存器是中断优先级寄存器,当有多个中断需要CPU响应时,CPU会根据IP寄存器中的设置决定中断响应的先后顺序。除了这两个寄存器之外,中断还有一个常用的中断控制寄存器TCON,该寄存器可以设置中断的启动方式。 中断控制系统中涉及的3种中断如下: (1)外部中断 该中断包括INT0与INT1两种,CPU通过INT0引脚或INT1引脚接受外部中断请求信号。9 中断到来之前,CPU需要完成以下工作: 设置中断启用寄存器IE 打开IE中的中断总开关EA及外部中断开关EX0或EX1,外部中断才能得到CPU的响应。如有多个中断,还需设置优先级寄存器IP,PX0或PX1置1表示选择高优先级,置
4、0则选择低优先级。 设定外部中断信号的采样方式 采样方式可分为电平触发(低电平触发)和边缘触发(负边缘触发)两种。若采用电平触发方式,需要将中断控制寄存器TCON中的IT0或IT1置1;若设置为边缘触发方式,则需要将IT0或IT1置0。 中断信号到来时,中断控制寄存器TCON中的IE0或IE1会自动置1。10 (2)定时器/计数器中断 该中断是指T0与T1两种中断(8052单片机还有T2)。定时器/计数器可用作定时器或计数器,到达定时终点或者计数溢出都将产生中断。跟外部中断一样,当EA=1时CPU才能响应该中断。 (3)串口中断 串口(UART)中断发生时,CPU通过RXD引脚或TXD引脚接收
5、或发送数据。该中断若要得到CPU的响应,同样需要打开中断总开关EA。1中断向量中断向量是指中断服务子程序的入口地址。中断响应后,程序将跳转至其对应的中断向量执行中断子程序。对于C语言程序而言,设计者可以不必知道中断向量的真实地址。但在汇编程序中,必须要明确该中断子程序属于哪个中断源以及它所对应的中断向量。单片机中断向量的地址如表6-1所示。表6-1 中断向量11中断编号中断源名称中断向量地址-系统复位(Reset)0000H0第一个外部中断INT00003H1第一个定时器/计数器中断T0000BH2第二个外部中断INT10013H3第二个定时器/计数器中断T1001BH4串行口中断RI/TI0
6、023H5第三个定时器/计数器中断(8052)TF2/EXF2002BH 中断向量一般只有几个字节,这些字节用于存放中断子程序显然是不够的。所以,在汇编程序中,该地址处通常存放一条转移指令,通过转移指令使系统跳转到真正的中断子程序入口处。 例如,在外部中断向量INT0的地址0003H处放置一个跳转指令: ORG 0003H; 外部中断0入口地址 AJMP INT00; 跳转到标号INT00处122外部中断控制寄存器TCON外部中断控制寄存器TCON的各数据位如表6-2所示。TCONTF1TR1TF0TR0IE1IT1IE0IT0字节地址位置7654321088H表6-2 外部中断控制寄存器TC
7、ON 各数据位表示的含义如下: TF1/TF0:定时/计数器T1/T0的溢出中断请求标志位。该位为0,表示定时器未溢出;该位为1,表示定时器溢出并申请中断。进入中断子程序后该位自动清零。 TR1/TR0:定时器T1/T0的启动/停止控制位。该位为0,定时器停止计数;该位为1,定时器启动计数。 IE1/IE0:外部中断请求标志位。该位为0,表示对应的中断源没有外部中断请求;该位为1,表示有外部中断请求。当中断被响应后,该位将由内部硬件自动清0。 IT1/IT0:外部中断触发方式控制位。该位为1,外部中断触发方式为下降沿触发, 引脚上由高到低的负跳变可引起中断;该位为0,外部中断为电平触发方式,
8、引脚上的低电平可引起中断。需要注意的是,采用电平触发方式引起中断时,引脚必须一直保持低电平状态,直到该中断被CPU响应。133中断启用寄存器IE中断启用寄存器IE被看作是中断功能的总开关。它是一个可位寻址的8位寄存器,各数据位的含义如表6-3所示。14IEEA-ET2ESET1EX1ET0EX0字节地址位置76543210A8H表6-3 中断启用寄存器IE 寄存器中各数据位表示的含义如下: EA:中断总开关。EA=1时,可启用所有中断功能;EA=0时,停用所有中断功能。 “-”:保留位。 ET2:8052单片机特有的TF2中断开关。该位为1时,启用TF2中断功能;为0时,停用TF2中断功能。
9、15 ES:串口的中断开关。ES=1时,启用串口中断功能;ES=0时,停用串口中断功能。 ET1:TF1的中断开关。该位为1时,启用TF1的中断功能;该位为0,停用TF1的中断功能。 EX1:INT1的中断开关。该位为1,启用INT1中断功能;为0停用INT1中断功能。 ET0:TF0的中断开关。ET0=1启用TF0中断功能;ET0=0停用INT1中断功能。 EX0:INT0的中断开关。该位为1,启用INT0中断功能;为0停用INT0中断功能。4中断优先级寄存器IP中断优先级寄存器IP用于设定各中断的优先级,它也是一个可位寻址的8位寄存器,各数据位的功能如表6-4所示。16表6-4 中断优先级
10、寄存器IP 寄存器中各数据位表示的含义如下: “-”:保留位。 PT2:用于设定8052单片机的TF2中断优先级。 PS:用于设定串口的中断优先级。PS=1,串口具有高优先级;PS=0,串口具有低优先级。 IP-PT2PSPT1PX1PT0PX0字节地址位置76543210B8H17 PT1:用于设定TF1的中断优先级。PT1=1,TF1具有高优先级;PT1=0,TF1具有低优先级。 PX1:用于设定INT1的中断优先级。PX1=1,INT1具有高优先级;PX1=0,INT1具有低优先级。 PT0:用于设定TF0的中断优先级。PT0=1,TF0具有高优先级;PT0=0,TF0具有低优先级。 P
11、X0:用于设定INT0的中断优先级。PX0=1,INT0具有高优先级;PX0=0,INT0具有低优先级。 中断优先级有“高优先级”和“低优先级”之分,若所有中断都未在IP寄存器中设定优先级,则默认的中断优先级从高到低的顺序为INT0TF0INT1TF1RI/TITF2/EXF2,如图6-3所示。图6-3 默认的优先级顺序5STC89C52RC的中断资源STC89C52RC单片机内部有8个中断源:4个外部中断,3个定时器中断和1个异步串口中断,如表6-5所示。表6-5 STC89C52RC中断源18中断源中断入口地址中断查询顺序优先级的对应位中断请求标志位INT00003H0(最优先)PX0IE
12、0T0000BH1PT0TF0INT10013H2PX1IE1T1001BH3PT1TF1RI/TI0023H4PSRI+TIT2002BH5PT2TF2+EXF2INT20033H6PX2IE2INT3003BH7(最低)PX3IE3【例6-1】编写一个中断程序,利用按键改变LED灯的点亮方式。 本例需要先在程序中设置中断寄存器,允许外部中断,并打开总中断开关。当按键按下时,单片机检测到按键信号后就会进入中断子程序。在中断子程序中,设置LED灯从左向右依次点亮。 【参考代码】;*; 程序功能:主程序实现8个LED灯全亮全灭,一个按键接外部中断0,; 当按键按下时,进入中断程序,灯从左向右依次
13、点亮。; 硬件接线:P2口接LED流水灯,P3.2接按键;*19【例6-1】编写一个中断程序,利用按键改变LED灯的点亮方式。 ORG 0000HSJMP MAINORG 0003H; 外部中断0入口地址AJMP INT00MAIN: NOPSETB IT0SETB PX0SETB EX0SETB EA; 开总中断MOV SP, #40H; 将堆栈起始地址开辟在40H地址以后20【例6-1】编写一个中断程序,利用按键改变LED灯的点亮方式。LOOP1: MOV A, #00H; 主程序循环体开始 MOV P2, A LCALL DELAY MOV A, #0FFH MOV P2, A LCAL
14、L DELAY SJMP LOOP1;*外部中断0子程序*INT00: CLR EA; 关闭中断 PUSH 05H PUSH 06H21【例6-1】编写一个中断程序,利用按键改变LED灯的点亮方式。PUSH 07H; 上述3条指令作用为将寄存器R5,R6,R7入栈MOV R0, #8; 计数8次MOV A, #0FEH; 赋初始值LOOP:MOV P2, ARL A ; 向左移动一位LCALL DELAY; 若无此语句则观察不出进入中断的现象DJNZ R0, LOOPPOP 07HPOP 06HPOP 05H ; 上述3条指令为将寄存器R5,R6,R7出栈SETB EA; 开总中断 RETI
15、; 中断函数返回22【例6-1】编写一个中断程序,利用按键改变LED灯的点亮方式。;*延时子函数*DELAY: MOV R7, #13HDL1: MOV R6, #14HDL0: MOV R5, #82H DJNZ R5, $ DJNZ R6, DL0 DJNZ R7, DL1 RET END23246.2.1定时器/计数器的工作原理6.2.2工作模式寄存器TMOD6.2.3定时器应用编程256.2.4定时器T2 高级应用定时/计数器是一种计数装置,该装置作为定时器使用时,对内部时钟脉冲进行计数;若作为计数器使用,则是对外部脉冲计数。定时或计数达到终点时将会产生中断。 图6-4 定时/计数器结
16、构图26 8051单片机包含两个16位的定时/计数器,他们分别是定时/计数器0(T0)和定时/计数器1(T1),其结构如图6-4所示。每个16位的定时/计数器均由两个8位专用寄存器组成(定时器T0由TH0和TL0组成,定时器T1由TH1和TL1组成),定时/计数器有两个输入脉冲,一个是内部机器周期脉冲,另一个是从T0或T1引脚输入的外部脉冲。 机器周期脉冲是时钟脉冲经过12分频后得到的,因此,一个机器周期等于12个时钟周期。如果时钟频率是12MHz,那么机器周期为1ms 。说 明27 定时/计数器工作在定时器模式时,单片机对内部机器周期脉冲进行计数。定时时间为机器周期脉冲的周期时间乘以机器周期
17、数。当晶振为12MHz时,计数频率为1MHz,即每过1ms计数值加1。若采用16位的定时模式,则最多可计数216个脉冲(65536),约0.0655s。定时/计数器工作在计数器模式时,是对引脚T0(P3.4)或T1(P3.5)上输入的外部脉冲计数,当检测到引脚上的信号由高电平跳变为低电平时,计数值加1。同样地,若采用16位的定时器模式,则最多可以计数至65536。 工作在计数器模式时,CPU在每个机器周期对T0(或T1)采样一次,若在第一个机器周期内检测到引脚信号为高电平,而在第二个机器周期内检测到引脚信号为低电平时,则确认收到一个有效信号。 由此可以看出,检测一次跳变需要两个机器周期,所以,
18、外部时钟脉冲的最高频率不能超过时钟频率的1/24,即脉冲的高/低电平的持续时间不能小于一个机器周期。注 意28 无论处于哪种工作方式,定时/计数器本质只是一个加1计数器,每输入一个脉冲,计数器加1直至计满溢出,同时向CPU发出中断请求。 GATE:定时/计数器门控开关,定时器的启动方式有两种:外部启动:将GATE位设定为1,再将TRx位设定为1,当 引脚为高电平时,即可启动这个定时/计数器。内部启动:将GATE位设定为0,再将TRx位设定为1,即可启动这个定时/计数器。29TMOD寄存器用于设置定时/计数器的工作模式,结构如图6-5所示。图6-5 TMOD寄存器30 C/ :该位为0,定时/计
19、数器用作定时器;该位为1,定时/计数器用作计数器。 M1,M0:工作方式定义位,它一共定义了4种工作模式,分别是Mode0Mode3,如表6-6所示。M1M0工作模式计数位数计数范围其他功能00Mode013位0819113位计数器01Mode116位06553516位计数器10Mode28位0255具有自动加载功能11Mode38位0255定时器0:分成2个8位计数器定时器1:停止计数表6-6 定时/计数器工作模式31 1Mode0 工作模式0的内部结构图如图6-6所示。图6-6 Mode032 Mode 0提供了两个13位的定时器/计数器(T0/T1),其计数值分别放置在THx与TLx中,
20、其中THx存放计数值的高8位,TLx的低5位存放计数值的低5位,如图6-7所示。图6-7 Mode 0工作模式的计数33 2Mode1 Mode1的内部结构图与Mode 0一样,两者的不同之处在于计数位数。Mode0使用13位计数,而Mode1使用16位计数,如图6-8所示。图6-8 Mode 1的计数 Mode 1完全可以取代Mode 0,实际应用中,更常用的是Mode 1模式。 Mode 2的定时与计数功能的切换完全与Mode0一样,而启动定时/计数器的方式也与Mode0完全一样。34 3Mode2 如图6-9所示,处于Mode2模式下的定时/计数器被设置成8位可自动重载模式。8位寄存器T
21、Lx用于计数,THx用于存放计数的初值,两者都由程序预置。当8位寄存器TL0中的数值达到255时,再接收一个脉冲将产生溢出,溢出时TF0置1并进入中断,与此同时,TH0中的初值重新装入TL0,TL0将从该值开始重新计数。TH0可设置成与TL0的初值一致。图6-9 Mode 235 4Mode3 如图6-10所示,Mode3是一种特殊的模式,它提供了两个8位的定时/计数器。 定时/计数器T0由T0引脚、 引脚、TR0、GATE位以及TL0计数寄存器构成,不具备自动加载功能,其他与Mode 2一样。 定时器T1由TR1位及TH0计数寄存器构成,不具备计数功能(只有OSC/12引脚,无T1引脚),它
22、几乎可以被T1的Mode2取代。图6-10 工作模式336 使用定时/计数器之前,应对它进行初始化,主要是确定其工作方式(TMOD寄存器)、计算和装载计数初值(THx,TLx)及设置启动/停止位(TCON寄存器)等。初始化一般包括以下几个步骤: (1)设置TMOD寄存器,确定定时/计数器的工作方式。 (2)计算初值,并装载到TH和TL中。 (3)需要产生中断时,须设置IE寄存器,打开中断开关。 (4)设置TCON中的TR1或TR0位,启动定时/计数器。37 关于初值的计算,以晶振12MHz、工作于定时器模式为例,一个机器周期为1ms,则不同模式下的定时间隔为: Mode0:13位定时器最大定时
23、间隔=2131ms=8.192ms; Mode1:16位定时器最大定时间隔=2161ms=65.536ms; Mode2:8位定时器最大定时间隔=281ms=256ms; 若使定时/计数器工作在定时器模式1,要求定时1ms,假定计数初值为x,则有:(216x)1ms=1000ms 这样计算出x=2161000,因此TH及TL的初值可设置为655361000=64536。【例6-2】编写程序,通过定时器产生中断来控制LED流水灯。LED流水灯亮灭交替显示,定时器T0每隔10S产生一次中断,使8个LED灯全灭,并持续一段时间(延时1S) 。38 本例使用P1口控制LED灯。初始化时,LED灯亮灭交
24、替显示,设置T0工作于模式1,计算出TH和TL寄存器的初值。定时满10S后,进入中断子程序。在中断子程序中,设置8个LED灯全灭并持续1S,再重新设置TH和TL寄存器的初值。退出中断子程序后,定时器继续计数,使LED灯交替亮灭,计时满10S后,再次进入中断子程序。 【参考代码】;*; P1口控制LED灯作亮灭闪烁,每亮10S,灭1S;*【例6-2】编写程序,通过定时器产生中断来控制LED流水灯。LED流水灯亮灭交替显示,定时器T0每隔10S产生一次中断,使8个LED灯全灭,并持续一段时间(延时1S) 。39 ORG 0000HAJMP MAINORG 000BH; 定时器T0中断入口AJMP
25、JT0MAIN: NOPMOV SP, #40H; 设定堆栈MOV A, #0FFHMOV P1, AMOV R0, #200; 设定中断次数,不要与延时子函数共用该寄存器MOV TMOD, #01H; T0工作于模式1MOV TH0, #3CHMOV TL0, #0B0H; 设定计数初值为3CB0H,定时0.05s【例6-2】编写程序,通过定时器产生中断来控制LED流水灯。LED流水灯亮灭交替显示,定时器T0每隔10S产生一次中断,使8个LED灯全灭,并持续一段时间(延时1S) 。40SETB TR0; 启动T0SETB ET0; 允许T0中断SETB EA; 开总中断LOOP:MOV A,
26、 #0AAHMOV P1, A; 点亮L1、L3、L5、L7LCALL YS1; 调用延时1S程序MOV A, #55HMOV P1, A; 点亮L2、L4、L6、L8LCALL YS1AJMP LOOP;*定时中断T0子函数*【例6-2】编写程序,通过定时器产生中断来控制LED流水灯。LED流水灯亮灭交替显示,定时器T0每隔10S产生一次中断,使8个LED灯全灭,并持续一段时间(延时1S) 。41JT0: NOPCLR EA; 关总中断PUSH ACCPUSH P1PUSH 05H; 保护现场PUSH 06HPUSH 07HDJNZ R0, RRTMOV R0, #200; 200次定时中断
27、到,重新定时200次MOV A, #0FFH MOV P1, A; 8个LED灯熄灭1SLCALL YS1【例6-2】编写程序,通过定时器产生中断来控制LED流水灯。LED流水灯亮灭交替显示,定时器T0每隔10S产生一次中断,使8个LED灯全灭,并持续一段时间(延时1S) 。42RRT: MOV TH0, #3CHMOV TL0, #0B0H; 重装初始值POP 07HPOP 06HPOP 05HPOP P1POP ACC; 恢复现场SETB EARETI;*延时1S子函数*YS1: MOV R7, #0A7H【例6-2】编写程序,通过定时器产生中断来控制LED流水灯。LED流水灯亮灭交替显示
28、,定时器T0每隔10S产生一次中断,使8个LED灯全灭,并持续一段时间(延时1S) 。43DL1: MOV R6, #0ABHDL0: MOV R5, #10H DJNZ R5, $ DJNZ R6, DL0 DJNZ R7, DL1 NOPRETEND【例6-3】编写程序,使定时器T0每接收10个脉冲就让LED灯从左向右点亮。44 本例需要先调用初始化函数,在函数中设置定时器的工作方式和计数初值。在主程序中,通过P1口设置LED灯每隔1S亮灭交替显示。T0接收10个脉冲后,进入中断子程序。在子程序中,点亮最右侧LED灯,并设置其向左移动8次。由于工作模式2能够自动装载计数初值,故中断子程序中
29、无需再次设置TH0和TL0。 【参考代码】;*; 定时器T0工作于计数模式,工作方式2,自动重装初始值; T0引脚每接收10个脉冲,就进入中断程序,让LED从左到右点亮;*【例6-3】编写程序,使定时器T0每接收10个脉冲就让LED灯从左向右点亮。45 ORG 0000H LJMPSTART ORG000BH; 定时中断入口地址 LJMPTimer0InterruptSTART: MOVSP, #40H LCALLInitTimer0 ; 调用定时T0初始化LOOP:; 主程序,作每隔1S亮灭工作 MOVA, #00H MOVP1, A LCALLDELAY1S MOVA, #0FFH【例6-
30、3】编写程序,使定时器T0每接收10个脉冲就让LED灯从左向右点亮。46 MOVP1, A LCALLDELAY1S LJMPLOOP;*定时器T0初始化函数*InitTimer0: MOVTMOD, #06H; 定时器T0工作方式2 MOVTH0, #0F6H MOVTL0, #0F6H; 定时初值设置为246 ; 每接收10个计数脉冲即进入中断子程序 SETBEA SETBET0 SETBTR0 RET【例6-3】编写程序,使定时器T0每接收10个脉冲就让LED灯从左向右点亮。47;*定时/计数器T0中断子函数*Timer0Interrupt: PUSH ACC MOV R0, #0FEH
31、 MOV R1, #8; 向左移动8次LOOP1: MOV A, R0 MOV P1, A LCALL DELAY1S RL A MOV R0, A DJNZ R1, LOOP1; 向左移动8次后结束 POP ACC; 出栈 RETI; 中断返回【例6-3】编写程序,使定时器T0每接收10个脉冲就让LED灯从左向右点亮。48;*延时1S函数*DELAY1S: MOV R7, #0A7HDL1: MOV R6, #0ABHDL0: MOV R5, #10H DJNZ R5, $ DJNZ R6, DL0 DJNZ R7, DL1 NOP RET; 延时函数返回 END 1定时器T2控制寄存器T2
32、MOD 定时器T2控制寄存器T2MOD的各数据位如表6-7所示。“-”:保留位,不需要写入数据。T2OE:定时器2输出使能位。DCEN:递增/递减计数使能位。定时器T2可配置成递增或递减计数器。49T2MOD-T2OEDCEN位76543210表6-7 定时器T2控制寄存器(T2MOD)T2CONTF2EXF2RCLKTCLKEXEN2TR2 C/ CP/ 位置76543210TF2:定时器T2溢出标志。定时器T2溢出时置位,必须由软件清除,当RCLK或TCLK=1时,TF2将不会置位。EXF2:定时器T2外部标志。当EXEN2=1时,且T2EX的负跳变产生捕获或重装时,EXF2置位。定时T2
33、中断使能时,EXF2=1将使CPU从中断向量处执行定时器T2中断子程序。EXF2位必须用软件清零。在递增/递减计数器模式(DCEN=1)中,EXF2不会引起中断。50 2定时器T2特殊功能寄存器T2CON 定时器T2是一个16位的定时/计数器。特殊功能寄存器T2CON的各数据位如表6-8所示。表6-8 特殊功能寄存器T2CONC/ :定时器/计数器选择。该位为0时为内部定时器(OSC/12或OSC/6)。该位为1时选择外部计数功能。CP/ :捕获/重装标志。置位:EXEN2=1时,T2EX的负跳变产生捕获。清零EXEN2=0时,定时器T2溢出或T2EX的负跳变都可使定时器自动重装。当RCLK=
34、1或TCLK=1时,该位无效且定时器强制为溢出时自动重装。RCLK:接收时钟标志。RCLK置位时,定时器T2的溢出脉冲作为串行口模式1和模式3的接收时钟。RCLK=0时,将定时器T1的溢出脉冲作为接收时钟。TCLK:发送时钟标志。TCLK置位时,定时器T2的溢出脉冲作为串行口模式1和模式3的发送时钟。TCLK=0时,将定时器T1的溢出脉冲作为发送时钟。EXEN2:定时器T2外部使能标志。当其置位且定时器T2未作为串行口时钟时,允许T2EX的负跳变产生捕获或重装。EXEN2=0时,T2EX的跳变对定时器2无效。TR2:定时器2启动/停止控制位。置1时启动定时器。51定时器T2有3种操作模式:捕获
35、、自动重装(递增或递减计数)和比特率发生器(具体参见6.3节)。3种模式的数据位设置如表6-9所示。RCLK+TCLK CP/ TR2模式00116位自动重装01116位捕获1X1波特率发生器XX0(关闭)表6-9 定时器T2工作方式52 (1)捕获模式 该模式下,如果EXEN2=0,定时器T2作为16位定时器或计数器使用,溢出时将置位TF2,并申请中断。 如果EXEN2=1,定时器做上述同样的操作,除此之外,当引脚T2EX由1变为0时,T2将TL2和TH2的当前值各自捕获到寄存器RCAP2L和RCAP2H中。T2EX引脚的负跳变会使T2CON中的EXF2置位,EXF2也能够产生中断(其中断向
36、量地址与定时器T2溢出中断地址相同,定时器T2中断服务子程序通过查询TF2和EXF2来确定引起中断的事件),捕获模式的结构如图6-11所示。53图6-11 定时器T2捕获模式结构图 在该模式下,TL2和TH2无重新装载值。54 (2)自动重装模式(递增/递减计数器) 该模式下,T2计数至溢出时,系统完成以下操作: 将寄存器RCAP2H、RCAP2L中的16位初始值重新装入定时器的TH2、TL2寄存器中,准备开始新一轮计数; 置位寄存器T2CON的TF2位,并向CPU发送中断请求信号。 计数过程中,计数的方向由T2MOD寄存器中的DCEN位(递减计数使能位)决定。当DCEN=0时,定时器T2默认
37、为递增计数;当DCEN=1时,定时器T2可通过T2EX引脚来确定递增或递减计数。55 如图6-12所示,当DCEN=0时,定时器T2自动递增计数。如果EXEN2=0,定时器T2计数至最大值0FFFFH后溢出并置位TF2,然后将RCAP2L和RCAP2H中的16位值装入定时器T2。RCAP2L和RCAP2H的值是通过软件预设的。图6-12 定时器T2自动重装模式(DCEN=0)56 如图6-13所示,DCEN=1时,定时器T2可实现递增或递减计数。此模式通过T2EX引脚控制计数方向。当T2EX置1时,定时器T2递增计数,计数到0FFFFH后溢出并置位TF2,同时产生中断。定时器T2的溢出将使RC
38、AP2L和RCAP2H中的16位值作为重新装载值放入TL2和TH2中。 当T2EX置0时,定时器T2递减计数。TL2和TH2计数至与RCAP2L和RCAP2H的数值相等时发生下溢,此时置位TF2并产生中断。下溢后将值0FFFFH重新装入TL2和TH2中。图6-13 定时器T2自动重装模式(DCEN=1)57586.3.1数据传输概念6.3.2串口的工作模式6.3.3SCON控制寄存器6.3.4比特率设定方法6.3.5多处理器间的数据传输6.3.6串口通信应用编程59 数据传输可分为并行式传输与串行式传输两种。并行式传输是指同时传输多个位(通常是8位),其特点是传输速度比较快,但连接两个系统之间
39、的传输线必须有多条,线路费用相对较高,线路阻抗匹配、噪声等问题也比较多,所以不适合远距离传输。串行传输是每次只传输一位数据,它只需要两条传输线,因而比较适合长距离的通信。 实际应用中,究竟采用哪种传输方式需要根据数据量和实际情况来确定。例如,单片机的P0P3口,一般都是同时输入/输出8个位,它们属于近距离的并行式数据传输;若要将单片机中的数据传送给其他设备,则可以采用串行式数据传输。 串行式数据传输分为单工、半双工及全双工通信。单工通信:信号只能向一个方向传输,任何时候都不能改变信号的传输方向。半双工通信:信号可以双向传输,但在某一时刻,数据只能向一个方向传输。它实际上是一种切换方向的单工通信
40、。全双工通信:信号可以同时双向传输。60 3种通信方式如图6-14所示。(a)单工通信(b)半双工通信(c)全双工通信图6-14 3种通信方式 我们通常以每秒传输多少位(bit/s)来衡量串行数据传输的速度,该速度又称为比特率。例如,电脑的USB接口是串行传输方式,USB2.0的理论传输速度可达480MB/s,但实际传输速率远小于该值。61 51单片机提供了一个全双工的通用异步串行端口(简称UART),其内部结构如图6-15所示。该串口能够同时完成数据的接收和发送。图6-15 串口内部结构62 接收数据时,RXD引脚将每一位到来的数据存放在接收缓冲寄存器SBUF中,存满8位数据后将产生中断,在
41、中断子程序中CPU把SBUF中的8位数据取出并处理。传送数据时,CPU先将要发送的数据放入发送缓冲寄存器SBUF中,然后通过TXD引脚将每个数据位逐一传送到目的地。 接收数据的SBUF和发送数据的SBUF是两个不同的寄存器。对用户来说,只能通过指令的操作方向来区分是发送缓冲SBUF还是接收缓冲SBUF。 51单片机的串行端口有4种工作模式:Mode0,Mode1,Mode2和Mode3,各模式的工作方式说明如下。 1Mode0 Mode0 工作模式下串口以固定比特率传输数据,其比特率为OSC/12(OSC为系统时钟脉冲频率),若时钟频率为12MHz,则其比特率为1Mbit/s。在此模式下,无论
42、是接收数据还是发送数据,CPU的RXD引脚都连接串行数据线,TXD引脚连接移位脉冲线。63 接收数据时,由TXD引脚送出移位脉冲,而由RXD引脚接收串行数据,如图6-16所示。发送数据时,也是由TXD引脚送出移位脉冲,而由RXD引脚送出串行数据,如图6-17所示。图6-16 接收数据 图6-17 传送数据64 2Mode1 Mode1 工作模式是比特率可变的数据传输方式,其比特率可由T1控制。在此模式下,51单片机的RXD引脚连接通信对象的TXD引脚,单片机的TXD引脚连接通信对象的RXD引脚,如图6-18所示。图6-18 Mode1串行数据传输65 Mode1工作模式下,传输的每帧数据有10
43、位,包括1位起始位、8位数据位以及1位停止位,如图6-19所示。数据传输从起始位(低电平)开始,紧接着传输8位数据位(低位在前,高位在后),最后以停止位(高电平)预告本帧数据传输结束。起始位和停止位在数据发送时是自动插入的。图6-19 Mode1的数据串格式66 3Mode2 Mode2 工作模式是串行数据以OSC/32或OSC/64的比特率进行传输,其线路的连接方式与Mode1相同。该工作模式下,每帧数据由1个起始位、8个数据位、1个奇偶校验位以及1个停止位构成,如图6-20所示。图6-20 Mode2 的数据串格式 发送数据时,奇偶校验位TB8(即SCON寄存器中的TB8)取自程序状态寄存
44、器PSW中的奇偶标志位P位;接收数据时,奇偶校验位直接移入SCON寄存器中的RB8中。 4Mode3 Mode3工作模式是以可变比特率进行的串行数据传输,其比特率由Timer1来控制。除此之外,Mode2与Mode3几乎完全一样。67串口控制寄存器(简称SCON)是一个8位的可位寻址寄存器,如图6-21所示。图6-21 SCON寄存器 各数据位含义如下: SM0与SM1:这两位用于设置串口的工作模式。串口的工作模式共有4种,如表6-10所示。每种工作模式的功能都是不同的,其对应的比特率也不相同。SM1SM0工作模式功能比特率00Mode0移位寄存器OSC/1201Mode110位的UART可变
45、比特率10Mode211位的UARTOSC/32或OSC/6411Mode311位的UART可变比特率表6-10 定时器工作模式设定表68SM2:本位为多重处理器通信启用位,若串口工作在Mode0模式下,SM2=0。串口工作在Mode1模式时,若SM2=1且收到了有效的停止位,则RI=1(产生RI中断),否则RI=0。若工作在Mode2或Mode3模式下,若SM2=1且收到的第9位为1,则RI=1(产生RI中断);若收到的第9位为0,则RI=0。REN:该位为串行数据接收允许位,REN=1,允许接收数据;REN=0,停止接收数据。TB8:Mode2或Mode3模式传送数据时,本位为第9个传送位
46、,可用软件来设定或清除。RB8:串口工作在Mode2或Mode3模式下,接收数据时该位为第9个接收位;工作在Mode1模式时,若SM2=0,则该位为停止位;若工作在Mode0模式时,该位无作用。69TI:该位为传送中断标志位,中断结束后,该位并不会自动恢复为0,必须由软件清除。在Mode1,Mode2或Mode3模式下,若停止位数据完成传送,则该位自动设定为1,并产生TI中断;在Mode0模式下,若第8位数据完成传送,则该位自动设定为1,并产生TI中断。RI:该位为接收中断标志位,中断结束后,该位不会自动恢复为0,必须由软件进行清除。在Mode1,Mode2或Mode3模式下,若停止位接收完毕
47、,则该位自动设定为1,并产生RI中断;在Mode0模式下,若第8位数据接收完毕,则该位自动设定为1,并产生RI中断。 701Mode0该模式下的比特率完全由系统的时钟脉冲频率决定,其值固定为OSC/12,不能通过软件进行更改。2Mode2在Mode2模式下,比特率可设定为OSC/32或OSC/64,即:比特率=(2SMOD)OSC/64其中SMOD是PCON寄存器中的最高位(bit7),若SMOD为0,则比特率为OSC/64;若SMOD为1,则比特率为OSC/32。以12MHz的系统为例: 若SMOD=0,则比特率=(2012M)/64=187.5k(bit/s); 若SMOD=1,则比特率=
48、(2112M)/64=375k(bit/s)。713Mode 1或Mode3在Mode1或Mode3模式下,比特率可由定时器Timer1的溢出脉冲控制。以Timer1采用具有自动加载功能的Mode2为例,其产生的比特率为: 在时钟频率为11.0592MHz的系统下,若想要产生19.2kbit/s的比特率,且SMOD=1,则有: 可计算出256TH1=3,TH1=253=0 xfd。72常用的比特率与设定参数对照如表6-11所示。比特率(bit/s)OSCSMODTH162.5k12MHz10 xff19.2k11.0592MHz10 xfd960011.0592MHz00 xfd480011.
49、0592MHz00 xfa240011.0592MHz00 xf4120011.0592MHz00 xe8137.511.0592MHz00 x1d表6-11 比特率与参数对照73 单片机的串口主要用于单片机与通用计算机之间的通信、单片机间的通信和主从结构的分布式控制系统间的通信。 串行通信可以一对一进行,也可以一对多进行通信。8051单片机支持多处理器之间的数据传输,硬件连接如图6-22所示,主处理器的TXD线与每个从处理器的RXD线连接,主处理器的RXD线与每个从处理器的TXD线连接。为了使主处理器能够正确地找到相应的从处理器并与之通信,在通信之前应对每个从处理器都分配一个地址编码。图6-
50、22 主从式处理器结构74 当51单片机的串口工作于Mode2或Mode3模式时,若主处理器要传输数据给某个从处理器,需要先发送从处理器的地址字节(address byte)到TXD数据线上。此时,所有的从处理器都将产生中断,然后将接收到的地址与自己的地址做对比,若两者相同,则将SM2位置0,准备继续接收数据字节;若不同,则不再接收数据。 数据字节与地址字节的差别体现在传输数据的第9位上,若第9位为1,表示该数据为地址字节;若第9位为0,表示该数据为数据字节。当从处理器的SM2位为1时,如果接收到的是地址字节,将会产生中断;如果接收到的是数据字节,则不会产生中断。75【例6-4】编写程序,使单
51、片机的串口向上位机发送40H44H存储单元中的数据。 初始化时,设置比特率为4800,串口工作方式为Mode1,发送的数据个数为5个。将数据逐个放入发送缓冲器SBUF中并通过串口发送给上位机。 【参考代码】;*;串行口发送数据;*ORG 0000HAJMP MAINORG 0100H76【例6-4】编写程序,使单片机的串口向上位机发送40H44H存储单元中的数据。 MAIN: MOV 40H, #1; 给存储单元40H44H赋值#1#5 MOV 41H, #2 MOV 42H, #3 MOV 43H, #4 MOV 44H, #5 MOV SCON, #50H; 工作方式1 MOV PCON,
52、 #80H; 比特率加倍 MOV TMOD, #20H; 定时器T1工作方式2,自动重装初值 MOV TH1, #0F3H MOV TL1, #0F3H; 定时器比特率设置为4800 SETB TR1 MOV R0, #40H; 首地址发送 MOV R7, #5 ; 数据个数77【例6-4】编写程序,使单片机的串口向上位机发送40H44H存储单元中的数据。 LOOP: MOV A, R0 MOV C, PSW.0 MOV TB8, C MOV SBUF, A ; 数据启动发送WAIT: JBC TI, NEXT; 判断发送中断标志 SJMP WAITNEXT: INC R0 DJNZ R7,
53、LOOP RET END78程序上位机软件测试效果如图6-23所示。图6-23 上位机串口调试助手接收到的数据79【例6-5】编写一个串口接收数据程序,将接收到的5个数据送入片内RAM的40H44H单元中。 初始化时,设置串口比特率为2400,T1作为比特率发生器,工作于Mode2模式下,SMOD=0。计数常数为0E6H。接收到数据后,先判断数据的奇偶校验位,如果两者一致,则将数据送入接收缓冲器SBUF中,同时通过P1口进行显示。 【参考代码】;*; 此程序为接收数据功能,比特率为2400,SMOD=1,定时器T1工作方式为Mode2; 将接收到的数据存放于40H之后的地址;*80【例6-5】
54、编写一个串口接收数据程序,将接收到的5个数据送入片内RAM的40H44H单元中。 RVE: MOV TMOD, #20H; T1工作方式2,自动重装初值 MOV TH1, #0E6H; 比特率为2400时,定时器T1赋的初始值 MOV TL1, #0E6H SETB TR1; 启动定时器T1 MOV R0, #40H; 数据存放首地址 MOV R7, #5; 5个数据 MOV PCON, #80H; SMOD=1,比特率加倍 MOV SCON, #0D0H; 串行口工作方式3,允许接收WAIT: JBC RI, PR; 等待接收到数据 SJMP WAIT81【例6-5】编写一个串口接收数据程序
55、,将接收到的5个数据送入片内RAM的40H44H单元中。PR: MOV A, SBUF; 接收到数据后 JNB PSW.0, PNP; 奇偶校验位判断,RB8=1 JNB RB8, ERR; 发送到奇偶校验位与接收到的奇偶校验位不符; 转出错处理 SJMP RIGHTPNP: JB RB8, ERR RIGHT: MOV R0, A ; 数据读入累加器;*此段程序为接收测试数据送P1口显示测试程序* MOV P1, A; 接收到的数据送P1口显示 CLR TI; 清除发送标志 MOV SBUF, A; 将刚接收到的数据再次送到上位机WAIT1: JBC TI, NEXT; 等待发送完成 SJM
56、P WAIT182【例6-5】编写一个串口接收数据程序,将接收到的5个数据送入片内RAM的40H44H单元中。;*NEXT: INC R0; 准备存下一个数据 DJNZ R7, WAIT; 判断5个数据是否发送完成 CLR PSW.5; 正确接收完5个字节数据后清标志F0=0 SJMP EN ERR: SETB PSW.5EN: NOP RET;*延时1S子函数*DELAY: MOV R7, #0A7H83【例6-5】编写一个串口接收数据程序,将接收到的5个数据送入片内RAM的40H44H单元中。DL1: MOV R6, #0ABHDL0: MOV R5, #10H DJNZ R5, $ DJ
57、NZ R6, DL0 DJNZ R7, DL1 NOP RET END84串口调试助手接收到的数据如图6-24所示。图6-24 串口调试助手上接收到的数据85【例6-6】编写一个双机通信程序,设置一个甲机、一个乙机,双机连接方式如图6-25所示,甲机发送,乙机接收。 通信时,甲机的RXD引脚连接乙机的TXD引脚,TXD引脚连接对方的RXD引脚。 对于甲机而言,在初始化时设置定时器的工作方式、比特率,并发送约定的字符0CCH。发送完毕后,等待接收乙机发送过来的字符0DDH,如果接收到正确的验证字符0DDH,甲机就开始发送准备好的数据了。 对于乙机而言,初始化后,等待甲机发送的字符0CCH,如能接
58、收到正确的字符,则发给甲机一个0DDH字符,甲机接收0DDH字符后,乙机开始等待甲机发送数据,数据接收完成后再通过LED流水灯显示出来。 图6-25 双机连接方式86【例6-6】编写一个双机通信程序,设置一个甲机、一个乙机,双机连接方式如图6-25所示,甲机发送,乙机接收。 【甲机参考代码】;*;双机通信程序,甲机为发送数据程序,乙机为接收数据程序;*ORG 0000H AJMP FSORG 0023H; 串行中断入口地址SJMP LLORG 0050HFS: NOP NOPNOP 87【例6-6】编写一个双机通信程序,设置一个甲机、一个乙机,双机连接方式如图6-25所示,甲机发送,乙机接收。
59、 ;*给待发送到地址单元赋初始值*MOV 30H, #01MOV 31H, #02MOV 32H, #03MOV 33H, #04 MOV 34H, #05;*设置定时器工作方式2* MOV TMOD, #20H; 定时器T1工作方式2,自动重装初始值MOV TH1, #0F3HMOV TL1, #0F3H; 设置定时器比特率MOV SCON, #50H; 设置串行口工作方式1,10位,允许接收88【例6-6】编写一个双机通信程序,设置一个甲机、一个乙机,双机连接方式如图6-25所示,甲机发送,乙机接收。 MOV PCON, #00H; 比特率不加倍SETB TR1; 启动定时器T1SJMP LL; 添加的LL: MOV A, #0CCH; 发送约定字符0CCHMOV SBUF, AJNB TI, $; 等待发送结束CLR TI; 发送结束,清发送标志JNB RI, $; 等待接收字符0DDHCLR RI; 清接收标志MOV A, SBUF; 接收乙机发送来的字符XRL A, #0DDH; 核对乙机发送来的字符是否是0DDHJN
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 二零二五年度绿色制造园区厂房场地租赁服务条款
- 2025版车辆抵押贷款担保经营合同
- 2025版新型城镇化安置房购买合同范本
- 二零二五年碧桂园酒店管理服务合同标准文本
- 二零二五版汽车广告宣传与赞助合作合同
- 农行信贷基础知识课件
- 二零二五年度安置房房票买卖合同备案登记服务协议
- 二零二五年高新技术企业常年法律顾问聘请合同范本
- 2025版个人汽车贷款合同模板(含二手车)
- 2025版摩托车抵押担保租赁合同
- 2024-2030年中国DevOps工具行业市场发展趋势与前景展望战略分析报告
- 青少年心理发展与教育(硕士)
- 账号归属公司合同协议书
- 小学三年级数学附加题100道附答案(完整版)
- 聊城小升初英语试卷
- 异构网络连接融合
- 物业管理分包协议模板
- 卵巢黄体破裂诊治中国专家共识(2024年版)
- 中医护理中药热奄包
- 2024广西钦州市北部湾大学招聘审计处工程审计科科员1人笔试备考题库及答案解析
- 《工业用水软化除盐设计规范》
评论
0/150
提交评论