版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
第5章-51单片机内部功能
中断技术的优点对突发事故,做出紧急处理。根据现场随时变化的各种参数、信息,做出实时监控。CPU与外部设备并行工作,以中断方式相联系,提高工作效率。解决快速CPU与慢速外设之间的矛盾。在多项外部设备同时提出中断请求情况下,CPU能根据轻重缓急响应外设的中断请求。日常中断的例子你正在专心看书,突然电话铃响,于是你记下正在看的书的页数,去接电话,接完电话后再回来接着看书。2中断的基本概念计算机中的中断概念CPU挂起正在执行的程序而转去处理特殊的事件的操作。将能引起中断的事件称为中断源。CPU现行运行的程序称为主程序。处理随机事件的程序称为中断服务子程序。
日常生活中的中断与单片机中断的比较:
某同学
单片机过程说明正在看书 执行主程序电话铃响 中断信号
中断源、中断请求暂停看书 暂停执行主程序
中断响应书中作记号当前PC入栈
保护断点接电话 执行中断程序
中断服务回来继续看 返回主程序
中断返回389C51中断系统中断源中断标志中断允许中断优先级MCS-51中断系统结构中断寄存器
MCS-51的中断系统——中断源89C51单片机有5个中断请求源:单片机INT0或外部输入中断源INT0(P3.2)INT1或外部输入中断源INT1(P3.3)T0定时器T0的溢出T1定时器T1的溢出串行口串行口发送或接收中断源
MCS-51的中断系统——中断标志CPU主程序INT0INT1T0T1串口IE0TF0IE1TF1TIRI中断源中断标志位每一个中断源都有相应的中断标志位;某一个中断源申请中断,相应中断标志位置1。
MCS-51的中断系统——中断允许CPU主程序INT0INT1T0T1串口IE0TF0IE1TF1TIRI中断源中断标志位
每个中断源有相应的中断允许位,1允许相应中断源的中断,0禁止相应中断源的中断;
EA——总中断允许位,EA=1开放所有中断,EA=0,禁止所有中断。中断允许ESET0EX0EX1ET1EA
MCS-51的中断系统——中断优先级CPU主程序INT0INT1T0T1串口IE0TF0IE1TF1TISI中断源中断标志位
单片机中有两个中断优先级,即高优先级中断和低优先级中断,前者优先权高于后者(在程序中设置,相应位=1,为高优先级);同一优先级别的中断源按照自然优先级顺序确定优先级别(硬件形成,无法改变)。中断允许ESET0EX0EX1ET1EA自然优先级高低优先控制PSPT0PX0PX1PT1IE0TCONSCONINT0IT0=0IT0=1INT1IT1=0IT1=1TF0IE1TF1T0T1TIRITXDRXDESET0EX0EX1ET1EA自然优先级矢量地址高级中断请求自然优先级矢量地址低级中断请求PX0PT0PX1PT1PSIEIPMCS-51的中断系统结构图中断标志位中断源允许总允许中断优先级4中断控制中断请求标志中断允许控制中断优先级控制作用:控制中断类型、中断的开关、中断的优先级TCON(6位)SCON(2位)IE(6位)IP(6位)
均可位寻址或字节寻址四个中断控制寄存器(都是SFR)TCON寄存器——T0和T1控制寄存器TF1
TF0
IE1IT1IE0IT0T1溢出中断标志(TCON.7):
T1启动计数后,计满溢出由硬件置位TF1=1,向CPU请求中断,此标志一直保持到CPU响应中断后,才由硬件自动清0。也可用软件查询该标志,并由软件清0。76543210注意:该寄存器可以位寻址。TCON88HTF1TR1TF0TR0IE1IT1IE0IT0TCON88H外部中断INT1中断标志位(TCON.3):IE1=1,外部中断1向CPU申请中断
外部中断INT1触发方式控制位(TCON.2):
IT1=0,电平触发方式
IT1=1,下降沿触发方式76543210TCON寄存器——T0和T1控制寄存器要使电平触发的中断被CPU响应并执行,必须保证外部中断源口线的低电平维持到中断被执行为止。因此当CPU正在执行同级中断或更高级中断期间,产生的外部中断源(产生低电平)如果在该中断执行完毕之前撤销(变为高电平)了,那么将得不到响应,就如同没发生一样。
TI(SCON.1)——串行发送中断标志。RI(SCON.0)——串行接收中断标志。
TIRISCON寄存器——串行口控制寄存器SCON98H76543210注意:该寄存器可以位寻址。IE寄存器——中断允许寄存器
IEA8H
EA
ESET1EX1ET0EX0例:允许定时器T0中断:
SETBEASETBET0
或MOVIE,#82H76543210注意:该寄存器可以位寻址。
51单片机有两个中断优先级——高级和低级专用寄存器IP为中断优先级寄存器,用户可用软件设定相应位为1,对应的中断源被设置为高优先级,相应位为0,对应的中断源被设置为低优先级系统复位时,均为低优先级
PSPT1PX1PT0PX0IP寄存器——中断优先级寄存器
IPB8H
76543210注意:该寄存器可以位寻址。
中断处理过程分为三个阶段:中断响应、中断处理和中断返回。
中断响应中断处理(又称中断服务)中断返回中断响应中断返回5中断响应过程与响应时间5.1中断响应条件在满足CPU的中断响应条件之后,CPU对中断源中断请求予以处理。中断响应条件:有中断请求开中断中断没有被屏蔽无同级或更高优先级中断正被服务当前指令周期已经结束若现行指令是RETI或访问IE/IP指令,则该指令的下一条指令也已执行完。5.2中断响应过程(以外部中断0为例)特别注意:前两步是由中断系统内部自动完成的,而中断服务程序则要由用户编写程序来完成。
中断响应断点地址中断服务子程序的入口地址外部中断0入口地址0003ZD0AJMPORG0003HAJMPZD0ZD0中断响应过程:将相应的优先级状态触发器置1(以阻断后来的同级或低级的中断请求)。执行一条硬件LCALL指令,即把程序计数器PC的内容压入堆栈保存,再将相应的中断服务程序的入口地址送入PC。执行中断服务程序程序存储器ROM0000H:复位后,程序的入口地址(PC=0000H)0023H:串行口中断入口0003H:外部中断0入口000BH:定时器0溢出中断入口0013H:外部中断1入口001BH:定时器1溢出中断入口
002AH使用时,通常在这些入口地址处存放一条跳转指令,使程序跳转到用户安排的中断服务程序起始地址上去!程序存储器ROM0000H:复位后,程序的入口地址(PC=0000H)0023H:串行口中断入口0003H:外部中断0入口000BH:定时器0溢出中断入口0013H:外部中断1入口001BH:定时器1溢出中断入口
002AH包含T0中断服务子程序的程序结构:
ORG0000H AJMPMAIN
ORG000BH AJMPINTT0
ORG0100HMAIN:...INTT0:...RETIENDAJMPMAINAJMPINTT05.3中断响应时间某中断的响应时序如图:若M1周期的S5P2前某中断生效,在S5P2期间其中断请求被锁存到相应的标志位中去;M2恰逢指令的最后一个机器周期,且该指令不是RETI或访问IE、IP的指令。于是,M3和M4便可以执行硬件LCALL指令,M5周期将进入了中断服务程序。80C51的中断响应时间(从标志置1到进入相应的中断服务),至少要3个完整的机器周期。
5.4中断处理中断服务程序从中断子程序入口地址开始执行,直到返回指令RETI为止,这个过程称为中断处理(或中断服务)。中断服务子程序一般包括两部分内容,一是保护和恢复现场,二是处理中断源的请求。中断响应入口地址RETI中断处理INTT0:PUSHACC PUSHDPHPUSHDPLPUSHPSW
中断源服务
POPPSW
POPDPLPOPDPHPOPACCRETI保护现场恢复现场5.5中断返回中断返回是指中断服务完后,计算机返回到原来暂停的位置(即断点),继续执行原来的程序。中断返回由专门的中断返回指令RETI来实现。中断响应中断返回中断返回RETI指令功能:把断点地址取出,送回到程序计数器PC中去。另外,它还通知中断系统已完成中断处理,将清除优先级状态触发器。特别注意:不能用RET指令代替RETI指令!中断响应中断返回5.6中断请求的撤除
CPU响应某中断请求后,在中断返回前,应该撤除该中断请求,否则会引起另一次中断。
定时器0或1溢出:CPU在响应中断后,硬件清除了有关的中断请求标志TFO或TF1,即中断请求是自动撤除的。
边沿激活的外部中断:CPU在响应中断后,也是用硬件自动清除有关的中断请求标志IE0或IE1。
串行口中断:CPU响应中断后,没有用硬件清除TI、RI,故这些中断不能自动撤除,而要靠软件来清除相应的标志。中断标记的清零是自动的,但是如果低电平持续存在,在以后的机器周期采用时,又会把中断请求标志位(IE0/IE1)置位。为此,需外加电路,把中断请求信号从低电平强制成高电平。
电平激活的外部中断源中断标志的撤除当CP=0时,触发器不工作,处于维持状态。当CP=1时,
D=0时,Q=0,
D=1时,Q=1。Sd为置位端,当Sd=0时,Q=1。
电平激活方式适合于外部中断输入以低电平输入且中断服务程序能清除外部中断请求源的情况。例如,并行接口芯片8255的中断请求线在接受读或写操作后即被复位,因此,用它去请求电平触发方式的中断比较方便。边沿激活方式适合于以负脉冲形式输入的外部中断请求,如ADC0809的转换结束标志信号EOC为正脉冲,经反相后就可以作为80C51的中断输入。6中断程序设计思想对IE、IP、TCON中的控制位进行赋值(初始化)开相应中断源的中断允许位设定所有中断源的优先级若为外部中断,应规定中断触发方式在中断服务程序入口处置一条无条件转移指令软件保护现场,以免现场信息丢失PUSH和POP应成对使用CPU响应完中断后,硬件自动清0中断请求标志,但串行口中断除外程序中可以禁止高级中断以RETI结尾一些注意事项例:请写出外部中断1为高优先级、低电平触发的中断系统初始化程序。解:采用位操作指令:SETBEA
SETBEX1
;开外部中断1SETBPX1
;令外部中断1高优先级CLRIT1;令外部中断1为电平触发采用字节操作指令:MOVIE,#84H
;开外部中断1ORLIP,#04H
;令外部中断1高优先级ANLTCON,#0FBH
;令外部中断1为电平触发中断应用实例程序结构交通灯主程序中断服务子程序中断程序举例
ORG0000HSTART:LJMPMAIN;跳转到主程序ORG0003HLJMPINTO;转向中断服务程序 ORG0030H;主程序 MAIN:CLRIT0;设为电平触发方式SETBEA;CPU开放中断SETBEX0;允许中断MOVDPTR,#1000H;设置数据区地址指针……ORG0200H;中断服务程序
INT0:PUSHPSW;保护现场PUSHACCCLRP3.0;由P3.0输出0NOPNOPSETBP3.0;由P3.0输出1,撤除MOVA,P1;输入数据MOVX@DPTR,A;存入数据存储器INCDPTR;修改数据指针,指向下一个单元POPACC;恢复现场POPPSWRETI;中断返回89C51的外部中断源仅有两个,需要时可以扩展。扩展方法:利用定时器扩展中断加软件查询外部中断扩展方法1、利用定时器扩展外部中断源方法:(1)把89C51的T0/T1做计数器使用;(2)计数初值设为FFFFH;(3)外部中断请求信号从P3.4(T0)或P3.5(T1)输入。当外部中断请求信号有效时,使计数器加1而溢出,向CPU发出中断请求。设某用户系统中已使用了两个外部中断源,并置定时器T1工作在模式2,作串行口波特率发生器用。现要求再增加一个外部中断源,并由P1.0输出一个5KHz的方波。Fosc=12MHz。分析:目的:1)增加一个外部中断;2)使P1.0输出一个方波。条件:1)两个外部中断源已被使用2)定时器T1已用于串行口波特率发生器因此:可利用定时/计数器T0,使之工作在模式3,1)利用TL0扩展外部中断源2)利用TH0作定时器使用,输出方波
设置初值:1)TL0=0FFH2)因为输出方波f=5kHz,故方波周期为200us,用TH0产生100us的定时,故TH0的初值X=256–(定时时间/机器周期)=256-(100us*晶振频率/12)=156设定T0工作方式,TMOD,TCON.程序:MOVTMOD,#27H;T0:模式3,计数方式;T1:模式2,定时方式MOVTL0,#0FFH;一旦加1,马上溢出,申请中断MOVTH0,#156;TH0初值MOVTH1,#data;根据波特率要求而定MOVTL1,#dataMOVTCON,#55H;01010101MOVIE,#9FH;开放全部中断TL0INT:MOVTL0,#0FFH;TL0重新赋值…..RETITH0INT:MOVTH0,#156;TH0重新赋值CPLP1.0RETI2、中断加查询扩展外部中断源各个外部中断经过“线或”接入到INT0或INT1上,高电平产生中断请求。
P1.0~P1.3用于查询,确定具体装置。
例多外部中断源的系统示例。设有5个外部中断源,中断优先级排队顺序为:XI0、XI1、XI2、XI3、XI4。试设计它们与80C51单片机的接口。
INSE1:PUSHPSW;中断服务程序PUSHACCJBP1.0,DV1;P1.0为1,转XI1中断服务程序JBP1.1,DV2;P1.1为1,转XI2中断服务程序JBP1.2,DV3;P1.2为1,转XI3中断服务程序JBP1.3,DV4;P1.3为1,转XI4中断服务程序 INRET:POPACCPOPPSWRETI DV1:……;XI1中断服务程序AJMPINRET DV2:……;XI2中断服务程序AJMPINRET DV3:……;XI3中断服务程序AJMPINRET DV4:……;XI4中断服务程序AJMPINRET1.外部中断1的中断入口地址为()。
A、0003HB、000BHC、0013HD、001BH2.各中断源发出的中断申请信号,都会表记在MCS-51系统中的()。A、TMODB、TCON/SCONC、IED、IP3、下列有关MCS-51中断优先级控制的叙述中,错误的是A、低优先级不能中断高优先级,但高优先级能中断低优先级B、同级中断不能嵌套C、同级中断请求按时间的先后顺序和自然优先级顺序响应D、同时同级的多中断请求,将形成阻塞,系统无法响应4、外中断初始化的内容不包括A、设置中断响应方式B、设置外中断允许C、设置中断总允许D、设置中断触发方式5、执行中断返回指令,要从堆栈弹出断点地址,以便去执行被中 断了的主程序。从堆栈弹出断点地址送给
A、A B、CYC、PC D、DPTR6、在MCS-51中,需要外加电路实现中断撤除的是A、定时中断 B、脉冲方式的外中断C、串行中断 D、电平方式的外中断7、中断查寻,查寻的是A、中断的请求信号 B、中断的标志位C、外中断方式控制位D、中断的允许控制位8、在中断流程中有“关中断”的操作,对于外部中断0,要关中断应复位中断允许寄存器的A、EA、ET0 B、EA、EX0 C、EA、ES D、EA、EX19.若(IP)=00010100B,则优先级最高者为
,最低为
。10、中断响应最快响应时间为三个机器周期。()11、MCS-51外中断有几种触发方式?一般情况下,采用哪种触发方式较好?12、中断响应的条件是什么?CPU响应中断请求后,不能自动清除哪些中断请求标志?第二节定时器/计数器定时器/计数器概述定时器/计数器控制定时器/计数器工作模式定时器/计数器应用1概述两个16位定时器/计数器:T0、T1各有两个8位加1计数器TH、TL工作方式由软件设定:
定时器方式,内部脉冲触发,每个机器周期定时器加1。计数器方式,外部脉冲触发,T0/T1引脚产生负跳变,计数器加1。由TMOD和TCON两个SFR控制计数器溢出(全1变为全0)时可以申请中断对外部输入脉冲宽度的要求:高电平、低电平的保持时间至少1个完整的机器周期TCY。故最高计数频率为单片机系统振荡频率的1/24。2定时器的控制定时器两个控制字,初始化时写入寄存器
工作方式寄存器写入TMOD(89H)运行控制写入TCON(88H)时间常数字写入TH/TL
每个定时器有四种工作方式。2.1工作模式寄存器高4位用于T1,低4位用于T0M1、M0——模式控制,对应有4种模式——0为定时器方式,1为计数器方式GATE——门控位。定时器是否受控制:
0:TR直接启动定时器,不参与启动;1:和TR均为高电平时,定时器工作。图5-5TMOD(89H)D7D6D5D4D3D2D1D0GATEM1M0GATEM1M02.2控制寄存器TCONTF1——T1溢出标志位,当T1计数溢出时,硬件自动置位TF1标志,并可以向CPU申请中断。CPU响应中断时,自动清除TF1。TF1也可用软件清0。TR1——T1运行控制位,TR1由软件控制,为0时停止T1工作;当GATE=1,TR1置1时启动T1。TF0、TR0用于T0,含义同上。TCON(88H)8F8E8D8C8B8A8988TF1TR1TF0TR0IE1IT1IE0IT03定时器的工作模式及应用定时器(T0)有四种模式,由M1、M0选择:M1M0模式000011102113模式0:13位定时计数器注意:TL0的低5位和TH0共同组成模式1:16位定时计数器模式2:自动重新装载的8位定时计数器溢出后(TF0=1),TH0→TL0模式3:T0成为两个独立的8位计数器,T1为无中断、自动重新装载的8位计数器TL0作为定时计数器;TH0仅作定时器用TL0的控制用原T0的,TH0用原T1的控制位T1工作在方式0~2,溢出时送串行口,经常作为串行口波特率发生器3.1模式0及应用图5-53.1模式0及应用模式0由TH、TL组成13位加1计数器:D7D6D5D4D3D2D1D0D4D3D2D1D0TH0(8)TL0(5)C/T=0,定时:对机器周期计数;全0时溢出,置位TF0。C/T=1,计数:对T0引脚的外部信号计数;定时时间:t=(213-初值)*振荡周期*12时间常数(初值)=213-t/(振荡周期*12),取整GATE=1,门控INT03.2模式1及应用图5-66.3定时器的四种模式及应用
6.3.2模式1及应用TH、TL组成16位加1计数器:定时时间:t=(216-初值)*振荡周期*12时间常数(初值)=216-t/(振荡周期*12),取整D7D6D5D4D3D2D1D0D7D6D5D4D3D2D1D0TH0TL03.2模式1及应用例利用T1产生一个50Hz的方波,由P1.1输出,fosc=12MHz。【解】思路:方波周期T=20ms,高、低电平时间各为10ms。利用T1产生10ms定时,切换P1.1的电平。振荡周期为1/12MHz,机器周期=12*振荡周期=1μs计数初值X=216-t/机器周期=216-10ms/1μs=65536-10000=55536=D8F0H20ms10ms10msP1.1ORG0000HMOVTMOD,#10H;T1定时,方式1SETBTR1;启动T1LOOP:MOVTH1,#0D8H;装入时间常数MOVTL1,#0F0HJNBTF1,$;定时没到,等待CLRTF1;清除标志CPLP1.1;P1.1取反SJMPLOOP;循环END(1)利用查询方式:T0不用,一般设为0,不能设3(2)利用中断方式,T1定时10ms产生中断,输出方波:ORG0030H;主程序START:MOVTMOD,#10H;T1定时,方式1MOVTL1,#0F0H;装入时间常数MOVTH1,#0D8HSETBTR1;启动T1SETBET1;允许T1中断SETBEA;CPU开中断SJMP$ENDORG0000HAJMPSTART;跳转,引导ORG001BH;T1中断服务程序MOVTL1,#0F0H;重新装入时间常数MOVTH1,#0D8HCPLP1.1;P1.1取反RETI;中断返回3.3模式2及应用TL作为8位计数器,溢出时TH中的内容自动装入TL。定时时间:t=(28-TH0初值)*振荡周期*12时间常数:X(初值)=28-t/机器周期图5-7例当P3.4引脚的电平发生负跳变时,从P1.0引脚上输出一个500μs的同步脉冲。振荡频率为6MHz。【解】思路:检测P3.4,负跳变时P1.0输出低电平,并启动T0定时500μs,定时到后置位P1.0。T0时间常数:X=28-500μs/2μs=6ORG0000H;主程序MOVTMOD,#02H;T0模式2,定时MOVTL0,#06H;置时间常数MOVTH0,#06HSTART:JNBP3.4,$;P3.4为低电平等待JBP3.4,$;P3.4为高电平等待CLRP1.0;P1.0输出低电平SETBTR0;启动T0定时500μsLOOP:JBCTF0,NEXT;定时到,清除TF0,跳转SJMPLOOP;等待定时到NEXT:SETBP1.0;P1.0输出高电平CLRTR0;T0停止计数SJMPSTART例利用T1计数,每计100个脉冲,将P1.0取反。【解】思路:T1计数100,申请中断,将P1.0取反。可以利用模式2,初值为256-100=156=9CH。MAIN:MOVTMOD,#60H;T1模式2,计数MOVTL1,#9CH;赋初值MOVTH1,#9CHMOVIE,#88H;置EA、ET1,T1开中断SETBTR1;启动T1SJMP$;等待中断ORG001BHCPLP1.0;P1.0取反RETI3.4模式3及应用TL0占用TR0、TF0、INT0和外部引脚T0,可工作在定时或计数方式。TH0占用TR1和TF1,启动/关闭只受TR1控制,只能作定时器。只有T0可工作在模式3,分为TH0和TL0两个独立的8位计数器图5-83.4模式3及应用当T0工作在模式3时,T1只能工作在模式0~2(定时器或计数器),因TR1及TF1已被TH0占用,T1的运行取决于C/T,无中断功能。一般情况下,当T0工作在模式3时,T1常用作串行口的波特率发生器。计数器作为外部中断【解】思路:T0工作在模式3,TH0作为定时器输出方波;TL0作为计数器,初值为FFH,T0引脚作为外部中断源,每当信号负跳变时请求中断。TL0:计数器,初值FFH,中断入口地址000BH;TH0:定时100μs,中断入口地址001BH(T1)输出周期200μs(5kHz)的方波,初值为256-100μs/1μs=156;T1:定时器,模式2,初值取决于波特率。例6-7某系统已使用两个外部中断源,且T1工作在模式2,作为串行口波特率发生器。现要求增加一个外部中断源,并由P1.0输出5kHz的方波。fosc=12MHz。开中断INT0/1边沿触发,启动T0、T1ORG0000HAJMPMAINORG0003H;INT0…ORG000BH;TL0MOVTL0,#0FFH…RETIORG0013H;INT1…ORG001BH;TH0MOVTH0,#156CPLP1.0RETIORG…RETI0023H;RSMAIN:MOVSP,#60HMOVTMOD,#27HMOVTL0,#0FFHMOVTH0,#156MOVTL1,#MOVTH1,#MOVIE,#9FHMOVTCON,55H…总结:
定时器/计数器的初始化(主程序):
根据要求给方式寄存器TMOD送一个方式控制字,以设定定时器相应的工作方式;根据需要给C/T送初值(时常),以确定定时时间或计数脉冲个数;根据需要,给中断允许寄存器IE送中断控制字,以开放相应的中断,还可设定中断优先级;给TCON送命令字(TR)以启动或禁止C/T的运行。初值X的计算计数器初值:设计数模值为M,计数脉冲个数为C,则:X=M-C(M=213,216,28)定时器初值:设定时长度为t(μs),振荡频率fosc(MHz),机器周期Tcy=12/fosc(μs)则:X=M-t/Tcy
模式0~2的最大定时时间定时时间:t=(M-X)*机器周期,可见t与振荡频率、定时器模式及初值X有关。初值X为0时,定时时间最长。初值X为M-1时,定时时间最短,仅一个机器周期。设fOSC=12MHz,机器周期为1μs。不同工作模式下的最大定时时间为:Mode0:tMAX=213×1μs=8.192msMode1:tMAX=216×1μs=65.536msMode2:tMAX=28×1μs=0.256ms应用举例:设计显示实时时钟【解】思路:T1模式1,定时100ms(fosc=6M),中断10次即为1s,累加,形成分、小时、24小时。主程序:T1初始化,RAM单元初始化,调用显示子程序20H0A计10次…30H00小时计数,2431H00分计数,6032H00秒计数,60ORG0000HAJMPMAINORG001BH;T1入口地址LJMPSERVEMAIN:MOVSP,#60HMOVTMOD,#10H;T1定时,模式1MOVTH1,#3CH;时间常数MOVTL1,#0B0HSETBTR1;启动定时器SETBET1;T1开中断SETBEA;CPU开中断MOV20H,#0AH;中断10次计数单元CLRAMOV30H,A;清零时单元MOV31H,A;清零分单元MOV32H,A;清零秒单元…;显示程序SERVE:PUSHPSW;保护现场PUSHACCMOVTL1,#0B0H;时间常数MOVTH1,#3CHDJNZ20H,RETUNT;不到10次,返回MOV20H,#10;重新置10次计数MOVA,32H;秒单元加1ADDA,#01HDAA;DAA调整MOV32H,ACJNEA,#60H,RETUNT;不到60秒,返回MOV32H,#0;清零秒单元…;判断分、小时计数RETUNT:POPACC;恢复现场POPPSWRETI;中断返回作业P137:6、10、14例:FOSC=12MHZ,试计算定时时间2MS所需的定时器的初值.方式2、方式3TMAX=0.256MS,所以必须将工作方式设在方式0或方式1:方式0:TC=213-2MS/1US=6192=1830HTL0=10H,TH0=0C1H方式1:TC=216-2MS/1US=63536=0F830HTL0=30H,TH0=0F8H编程方式采用查询方式:程序一直检测TF0(TF1),若TF0=1(TF1=1),说明定时时间到或计满数采用中断方式:程序初始化时,设置定时器溢出中断允许后,内部硬件自动检测到TF0=1(TF1=1)时,自动响应中断,进入中断服务程序。应用举例例1选用T1方式0产生500US的定时,在P1.1输出周期为1MS的方波;FOSC=6MHZ注意:T0不用时的处理,一般置0方式,禁止进入方式3.初值计算:T=500US=(213-TC)*2US,TC=7942TC=7942D=8F06H主程序BEGIN:MOVTMOD,#0 MOVTL1,#06H MOVTH1,#0F8H SETBTR1LOOP:JBCTF1,PF0 SJMPLOOPPF0:MOVTL1,#06H MOVTH1,#0F8H CPLP1.1AJMPLOOP例2
从P3.4T0输入低频脉冲,要求该脉冲每发生一次跳变时由P1.0输出一个500US的负脉冲,与此同时由P1.1输出一个宽为1MS的正脉冲.先设T0为计数方式,当外部脉冲来一个负跳变时,计数加1,并产生溢出,TF0=1;检测到TF0=1时,即可设定T1为定时方式;T0设为方式2;初值设为0FFH即加1即刻产生溢出.ORG0HSJMPBEGINORG000BHAJMPTT1ORG0030HBEGIN:MOVTMOD,#06H MOVTH0,#0FFH MOVTL0,#0FFHCLRP1.1Setbet0SetbeaSETBP1.0SETBTR0S1:SJMP$中断服务程序ORG300HTT1:MOVTMOD,#20HMOVTH1,#0AH;06HMOVTL1,#0AH ;06HSETBP1.1CLRP1.0SETBTR1DEL2:JBCTF1,RP1SJMPDEL2RP1:SETBP1.0DEL3:JBCTF1,RP2SJMPDEL3RP2:CLRP1.1CLRTR1RETI例3:门控位的应用GATE位是控制外部输入脉冲对定时计数器的控制,利用这个特性。可测量输入脉冲的宽度。如:利用T0门控位测试INT0引脚上出现的正脉冲的宽度,并以周期数显示。
ST:MOVTMOD,#09HMOVTL0,#00HMOVTH0,#00HWAIT1:JBP3.2,WAIT1SETBTR0WAIT2:JNBP3.2,WAIT2WAIT3:JBP3.2,WAIT3CLRTR0MOVA,TL0MOVR0,#DISBUFXCHDA,@R0INCR0SWAPAXCHDA,@R0INCR0MOVA,TH0XCHDA,@R0INCR0SWAPAXCHDA,@R0DIS:LCALLDISPAJMPDIS第三节串行口串行通信基本知识串行口控制串行口工作模式串行口应用1串行通信基本知识串行通信和并行通信计算机1GND计算机2GND并行通信计算机1GND计算机2GND发送接收串行通信并行通信:数据的各位同时传送;串行通信:数据一位一位顺序传送。快、多(数据线)、近慢、少、远按数据传送方向:单工、半双工、全双工HalfDuplexFullDuplexSimplex串行通信有两种基本方式
异步通信,ASYNC(AsynchronousDataCommunication):帧格式传送,信息量不大1个起始位,05~8个数据位奇偶校验位1~2个停止位,1
同步通信,SYNC(SynchronousDataCommunication):严格同步,发送同步字符,数据连续,信息量大,速度较高按数据块传送——把要传送的字符顺序连接起来 数据块前有同步字符,后有检验字符同步字符可由通信双方约定,也可采用ASCII码中规定的SYNC代码,即16H。数据数据数据……数据数据……同步字符同步字符1同步字符2同步传送时,要求用时钟来实现发送端与接收端之间的同步。波特率(Bandrate)数据传送速率:每秒传送的二进制代码的位数。波特率反映了串行通信的速率,也反映了对于传输通道的要求。波特率越高,要求传输通道的频率越宽,一般异步通信的波特率在50bps~19200bps之间。相互通信的甲乙双方必须具有相同的波特率,否则无法成功地完成串行数据通信。QUESTION假如在1秒内,89C51串口把100个FFH的数据发送出去,问波特率是多少?假若每个字符是包含一个起始位、一个终止位和8个数据位。根据串行通信的格式及约定(如:同步方式、通讯速率、数据块格式、信号电平……等)不同,形成了多种串行通信的协议与接口标准。常见的有:☞通用异步收发器(UART)——本课程介绍的串口☞通用串行总线(USB)☞I2C总线☞CAN总线☞SPI总线☞RS-485,RS-232C,RS422A标准……等等串行通信的基本特征是数据逐位顺序进行传送。89C51有一个可编程全双工异步串行通信接口(UART)(UniversalAsynchronousReceiver/Transmitter
)管脚:TXD(P3.1)、RXD(P3.0)可同时发送、接收数据(Transmit/Receive)有四种工作方式,帧格式有8、10、11位。波特率(Baudrate)可设置
波特率:每秒钟传送二进制数码的位数,也叫比特数,单位为b/s,即位/秒。2串行口控制return串行口结构引脚RXD(P3.0串行数据接收端)引脚TXD(P3.1串行数据发送端)MOVSBUF,A:发送数据到串口引脚MOVA,SBUF:接收数据RI:从串口上接收数据到SBUFRI=1TI:数据从SBUF向外发送完
TI=1MCS-51串行接口寄存器SBUF——串行口数据缓冲器SCON——串行口控制寄存器PCON——电源及波特率选择寄存器控制寄存器SCONSM0SM1SM2RENTB8RB8TIRI工作方式选择多机通信控制位允许串行接收位接收数据的第9位发送数据的第9位接收中断标志发送中断标志9FH9EH9DH9CH9BH9AH99H98HSM2置1,多机通信,用于方式2和方式3D8=1,地址帧D8=0,数据帧SM2置0,不属于多机通信SM0SM1工作方式功能波特率00方式08位同步移位寄存器fosc/1201方式110位UART可变10方式211位UARTfosc/64或fosc/3211方式311位UART可变3串行口工作模式例:设串行口工作在方式1,允许接收,则指令为:
MOVSCON,#01010000B串行通信只用该位,为1时,波特率×2;为0时不变。电源及波特率选择寄存器PCONSMOD×××GF1GF0PDIDL87H串行口四种工作方式应用比较方式的选择由SM0、SM1实现。工作方式功能说明波特率方式08位同步移位寄存器常用于扩展I/O口fosc/12方式110位UART8位数据、起始位、结束位可变(取决于定时器1溢出率)方式211位UART8位数据、起始位0、结束位1和奇偶校验位fosc/64或fosc/32方式311位UART数据、起始、校验、结束位可变(取决于定时器1溢出率)波特率的设定可参见表5-5,实际无需计算。表方式0在方式0下,串行口作同步移位寄存器用,其波特率固定为fosc/12。串行数据从RXD(P3.0)端输入或输出,同步移位脉冲由TXD(P3.1)送出。这种方式常用于扩展I/O口。方式0用于扩展I/O口输出方式0用于扩展I/O口输入方式110位的帧格式串行口为波特率可调的10位通用异步接口UART。每发送或接收的一帧信息中,包括1位起始位0,8位数据位和1位停止位1。方式2串行口为11位UART,传送波特率与SMOD有关。发送或接收的一帧数据中包括1位起始位0,8位数据位,1位可编程位(用于奇偶校验)和1位停止位1。11位的帧格式方式3方式3为波特率可变的11位UART通信方式,除了波特率以外,方式3和方式2完全相同。MCS-51串行口的波特率1.方式0和方式2的波特率是固定的在方式2中,波特率取决于PCON中的SMOD值:当SMOD=0时,波特率为fosc/64;当SMOD=1时,波特率为fosc/32.即波特率=。oscSMODf642在方式0中,波特率为时钟频率的1/12,即fosc/12,固定不变图2.方式1和方式3的波特率可变,由定时器1的溢出率决定波特率/(b/s)fosc/MHzSMOD定时器1C/模式初始值方式0:1M方式2:375k方式1、3:62.5k19.2k9.6k4.8k2.4k1.2k137.5k11011012121211.05911.05911.05911.05911.05911.986612×1110000000××000000000××222222221××FFHFDHFDHFAHF4HE8H1DH72HFEEBHT波特率=returnRETURN
解决的方法只有调整单片机的时钟频率fosc,通常采用11.0592MHz晶振。常用波特率及其产生条件
常用波特率通常按规范取1200、2400、4800、9600、…,若采用晶振12MHz和6MHz,则计算得出的T1定时初值将不是一个整数,产生波特率误差而影响串行通信的同步性能。4串行口的应用编程注意事项设置串行口工作方式设置波特率(SMOD,若是方式1、3,设置T1初值)若串行口接收数据,REN必须赋值为1TI和RI标志,须由软件清0第9位串行口工作方式0
用于扩展I/O口,外接74HC164(串入并出)或165(并入串出)。RXD作为数据输入/输出端,TXD作为同步时钟信号,接至时钟端。
8位数据为1帧,由低位到高位,无起始位和停止位。波特率:fosc/12例用89C51串行口外接CD4049或164串入-并出移位寄存器扩展8位并行口;8位并行口的每位都接一个发光二极管,要求发光二极管从左到右以一定延迟轮流显示,并不断循环。设发光二极管为共阴极接法。如图所示。89C51RXDTXDP1.0DATACD4049CLKSTB
解:设数据串行发送采用中断方式,显示延迟通过延迟程序DELAY来实现。程序清单:
ORG0000HLJMPMAIN
ORG 0023H AJMP SBR ORG 2000HMAIN:MOV SCON,#00H;串行口方式0初始化
MOV A,#80H;最左一位发光二极管先亮
CLR P1.0;关闭并行输出
MOV SBUF,A;开始串行输出LOOP:SJMP $;等待中断SBR: SETB P1.0;启动并行输出
ACALLDELAY;显示延迟一段时间
CLR TI;清发送中断标志 RR A;准备右移一位显示
CLR P1.0;关闭并行输出
MOV SBUF,A;再一次串行输出
RETI
串行口工作方式110位通用异步串行口UART(UniversalAsynchronousReceiver/Transmitter),1位起始位、8位数据、1位停止位。波特率可调,由定时器T1的溢出率(定时时间)决定。当一帧数据接收完毕后,必须同时满足以下条件,这次接收才真正有效:REN=1RI=0,SBUF为空SM2=0或SM2=1时,收到停止位为1,收到的数据才能装到SBUF里。串行口工作方式1波特率(定时器T1的溢出速率)
PCON.7波特率选择位7位ASCII码+1位奇偶校验位=8A中1的个数为奇数,P=1,如果最高位为为P的值,则A的1的个数编程偶数,因此,要把P的值取反以后放入ASCII码最高位,才是奇校验。设发送数据区的首地址为20H,接收首地址为40H例89C51串行口按双工方式收发ASCII字符,最高位用作奇校验,要求传送码率为1200b/s,fosc=11.0592MHz。奇偶校验位:数据位和奇偶位中1的个数偶校验:以上1的个数为偶数奇校验:以上1的个数为奇数MOV TMOD,#20H;MOV TL1,#0E8H;MOV TH1,#0E8H;SETB TR1;MOV SCON,#50H;MOV R0,#20H;MOV R1,#40H;SETB ES;SETB EA;LCALL SOUT;SJMP $;T1为模式2时间常数,见表7-2重装时常启动T1串行口方式1,允许接收发送数据区首址接收数据区首址串行口开中断CPU开中断发送一个字符等待中断表ORG 0000HLJMP MAINORG 0050HMAIN:中断服务程序ORG 0023HLJMP SBR1ORG 0100HPUSH ACCPUSH PSWJNB RI,SENDLCALL SINSJMP NEXTLCALL SOUTPOP PSWPOP ACCRETISBR1:SEND:NEXT:发送子程序CLR TIMOV A,@R0MOV C,PCPL CMOV ACC.7,CMOVSBUF,AINCR0RETSOUT:;若奇数个1,P=1;取要发送的数据;A中的ASCII码为奇校验;发送;修改发送数据区指针接收子程序CLR RIMOVA,SBUFJNB P,ERANL A,#7FHMOV@R1,AINC R1RET……SIN:;若偶数个1,出错;读接收到的数据;数据存入接收区;修改接收数据区指针;若奇数个1,ACC.7清0ER:;处理出错程序串行口工作方式2和方式3每帧11位:1位起始位,9位数据(D8~D0),1位停止位;第9位数据作为奇偶校验位或地址/数据标志位;发送时,第9位(D8)数据装入TB8;MOVA,DATAMOVTB8,CMOVSBUF,A接收时,第9位(D8)数据装入RB8;--串口自动完成D0~D7SBUFD8RB8RI=1多机通信串行口工作方式2和方式3方式2,波特率位fosc/32或fosc/64;方式3,波特率可调,同方式1。用第9个数据位作奇偶校验位,编制串行口方式2的发送程序。例:设计一个发送程序,将片内RAM50H~5FH中的数据串行发送;串行口设定为方式2状态,TB8作奇偶校验位,采用偶校验。串行口初始化地址指针R0长度计数器R7置初值取数据
APTB8ASBUFTI=1?0TI,指针R0+1(R7)-1=0?返回YYNN程序清单TRT: MOVSCON,#80H;方式2设定 MOVPCON,#80H;波特率=fosc/32 MOVR0,#50H;首地址R0MOVR7,#10H;数据长度LOOP:MOVA,@R0 ;取数据MOVC,PSW.0;PTB8 MOVTB8,C MOVSBUF,A;数据SBUF,启动发送WAIT:JBCTI,CONT;判断发送中断标志 SJMPWAITCONT:INCR0 DJNZR7,LOOP RET 两个单片机之间的通信通信协议:帧格式、校验方式等
波特率软件编程查询方式
1)甲机发送编程将甲机片外RAM1000H~101FH单元的数据块从串行口输出。定义方式2发送,TB8为奇偶校验位。发送波特率375kb/s,晶振为12MHz,SMOD=1。参考发送子程序如下:
MOV SCON,#80H;设置串行口为方式2 MOV PCON,#80H;SMOD=1 MOV DPTR,#1000H;设数据块指针
MOV R7,#20H;设数据块长度
START:MOVXA,@DPTR;取数据给A MOV C,P MOV TB8,C;奇偶位P送给TB8MOV SBUF,A;数据送SBUF,启动发送
WAIT:JBCTI,CONT;判断一帧是否发送完。若送完,清TI,取下一个数据
AJMPWAIT;未完等待
CONT:INCDPTR;更新数据单元
DJNZR7,START;循环发送至结束
RET2)乙机接收编程使乙机接收甲机发送过来的数据块,并存入片内50H~6FH单元。接收过程要求判断RB8,若出错置F0标志为1,正确则置F0标志为0,然后返回。在进行双机通信时,两机应采用相同的工作方式和波特率。参考接收子程序如下:
MOVSCON,#80H ;设置串行口为方式2
MOVPCON,#80H ;SMOD=1
MOVR0,#50H ;设置数据块指针
MOVR7,#20H ;设置数据块长度
SETBREN ;启动接收
WAIT:JBCRI,READ;判断是否接收完一帧。若完,清RI,读入数据
AJMPWAIT;未完等待
READ:MOVA,SBUF;读入一帧数据a
JNBPSW.0,PZ;奇偶位为0则转
JNBRB8,ERR;P=1,RB8=0,则出错
SJMPRIGHT;二者全为1,则正确
PZ:JBRB8,ERR;P=0,RB8=1,则出错
RIGHT:MOV@R0,A ;正确,存放数据
INCR0 ;更新地址指针
DJNZR7,WAIT ;判断数据块是否接收完
CLRPSW.5 ;接收正确,且接收完清F0标志
RET ;返回
ERR:SETBPSW.5 ;出错,置F0标志为1
RET ;返回多个89C51通信多机通信步骤:主机SM2=0,所有从机的SM2=1,以便接收主机发来的地址。主机发送地址,其中D8=1。所有从机接收主机发来的地址,进入中断服务程序,并和本机地址比较,确认是否是被寻址从机。被寻址从机清除SM2,以便接收数据,并向主机发回从机地址,供主机核对。其他从机保持SM2=1,并退出中断服务程序。主机与被寻址从机通信(D8=0)。完毕,被寻址从机SM2=1,退出中断服务程序,等待下次通信。89C51与PC机点对点通信电气规范不一致,TTL与RS232电平转换,1488、148989C51采用MAX232芯片接口的PC机与89C51单片机串行通信接口电路Tin、Rout-------接单片机Rin、Tout--------接PC机
Tin、Tout成对使用
Rin、Rout成对使用
T、R是针对单片机的动作命名的作业:4、17PC机一般使用通用异步接收器/发送器(8250)或16c550/作为串行通讯的控制器,使用9针或25针的接插件将串行口的信号送出。一、PC机串口资源及编程使用方法PC机一般有COM1和COM2两个串口。
寄存器名称端口地址复位后初始值COM1COM2发送器保持寄存器(TBR)3F8H2F8HXXXXXXXXB接收器数据寄存器(RBR)3F8H2F8HXXXXXXXXB波特率因子低位寄存器(DLL)3F8H2F8H00000000B波特率因子高位寄存器(DLH)3F9H2F9H00000001B中断允许寄存器(IER)3F9H2F9H00000000B中断标识寄存器(IIR)3FAH2FAH00000000B线路控制寄存器(LCR)3FBH2FBH01100000B调制解调器控制寄存器(MCR)3FCH2FCHXXXX0000B线路状态寄存器(LSR)3FDH2FDHXXXXXXXXB调制解调器状态寄存器(MSR)3FEH2FEHXXXXXXXXB8250系列寄存器的定义:使用串口必须先初始化,有以下4个步骤DLHDLL波特率DLHDLL波特率DLHDLL波特率09H00H5000HC0H60000H18H480006H00H7500H60H120000H10H720004H17H11000H40H180000H0CH960003H59H134.500H3AH200000H06H1920003H00H15000H30H240000H03H3840001H80H30000H20H360000H01H115200例:设COM1的波特率为9600,则outportb(0x3fb,0x80);/*写线路控制寄存器,访问波特率因子寄存器*/
outportb(0x3f8,0x0c);/*写入波特率因子低字节*/
outportb(0x3f9,0x00);/*写入波特率因子高字节*/
⒈设置波特率PC机串口初始化⒉设置数据格式例:设数据为7位,1位起始位,1位停止位,偶校验,则设置如下:outportb(0x3fb,0x1a);⒊设置操作方式不允许中断:outportb(0x3fc,0x03);允许中断:outportb(0x3fc,0x0b);自测试工作方式,且不允许中断:outportb(0x3fc,0x13);⒋设置中断允许寄存器开放中断语句:outportb(0x3f9,0x0f);PC机串口初始化例1将PC机的COM1初始化为9600波特率、7位数据、偶校验、1位停止位、不中断,则初始程序如下:initcom1(){outportb(0x3fb,0x80);/*写线路控制寄存器,访问波特率因子寄存器*/
outportb(0x3f8,0x0c);/*写入波特率因子低字节*/outportb(0x3f9,0x00);/*写入波特率因子高字节*/
outportb(0x3fb,0x1a);/*设数据为7位,1位起始位,1位停止位,偶校验*/outportb(0x3fc,0x03);/*不允许中断*/}PC机的发送、接收程序例2PC机从COM1发送一个字符,程序如下:send(charsendchar){Intcoms;do{ /*查询发送缓冲器是否空*/coms=inportb(0x3fd);}while(coms!=0x20);查询等待com1的线路状态寄存器(LSR)的第五位的状态是否为1,即发送保持寄存器是否为空?outportb
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 公开信息审核机制确保数据真实
- 2026四川广安市中医医院招聘6人备考题库含答案详解(夺分金卷)
- 2026广东佛山市顺德区公立医院招聘高层次人才48人备考题库及答案详解(网校专用)
- 2026年哈尔滨仲裁委员会办公室招聘4人备考题库带答案详解(完整版)
- 2026福建晋江市第二医院医共体编外人员招聘6人备考题库(一)及一套参考答案详解
- 2026上海市水产研究所(上海市水产技术推广站)第二轮招聘博士研究生4人备考题库附答案详解(完整版)
- 2026中国科学院昆明植物研究所植物AI与多组学创新专题组招聘备考题库及参考答案详解1套
- 2026广东惠州仲恺高新区赴高校招聘编内教师50人备考题库(广州考点)含答案详解(预热题)
- 江西省2026年中小学教师招聘笔试(鹰潭考区)备考题库及答案详解(网校专用)
- 2026四川九州电子科技股份有限公司招聘硬件测试岗1人备考题库附答案详解(满分必刷)
- 高中英语2024届高考应用文常见亮眼句型(共十八类)
- ISO 15609-1 2019 金属材料焊接工艺规程和评定-焊接工艺规程-电弧焊(中文版)
- (正式版)JBT 10437-2024 电线电缆用可交联聚乙烯绝缘料
- 小学语文心理健康教育案例分析
- 文旅融合和文化旅游
- 智慧停车场经济效益分析
- 惠州市龙门县事业单位真题2023
- 电动吸引器简要操作流程图
- 2022-2023学年河北省廊坊三河市数学六年级第二学期期末质量跟踪监视试题含解析
- 云南省农村留守儿童现状调研报告
- YY/T 1841-2022心脏电生理标测系统
评论
0/150
提交评论