第5章定时器、中断系统以及串行口_第1页
第5章定时器、中断系统以及串行口_第2页
第5章定时器、中断系统以及串行口_第3页
第5章定时器、中断系统以及串行口_第4页
第5章定时器、中断系统以及串行口_第5页
已阅读5页,还剩49页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、 第五章第五章MCS-51MCS-51的定时器、中断系统以及串行口的定时器、中断系统以及串行口 5.1 MCS-515.1 MCS-51单片机的定时单片机的定时/ /计数器计数器 定时/计数器是MCS-51单片机的一个重要的功能部件。在计算机控制系统中常用定时器作实时时钟来实现定时检测、定时控制。还可以用定时器产生毫秒宽的脉冲,驱动步进电机等执行机构。计数器主要用于对外部事件的计数。此外,定时/计数器还可用作串行接口的波特率发生器。5.1.1 5.1.1 定时器计数器的结构定时器计数器的结构 微处理器TH1TL1TH0TL0TCONTMODP3.5P3.4T0T15.1.2 5.1.2 定时器

2、计数器的控制定时器计数器的控制与定时器计数器有关的控制寄存器有: 1工作方式控制寄存器TMODT1控制T0控制M0M1C/TGATEM0M1C/TGATED0D1D2D3D4D5D6D7GATE门控位C/T计数/定时选择M1 M0工作方式选择2 2定时器控制寄存器TCOND7D6D5D4D3D2D1D0TF1 TR1 TF0 TR0 IE1 IT1 IE0 IT0中断请求标志触发方式选择启动定时/计数器0 低电平1 下降沿0 停止1 启动(用于控制定时/计数器的启停、溢出、外部中断信号触发方式)计数脉冲输入5.1.3 5.1.3 定时器计数器的工作方式定时器计数器的工作方式 1. 方式013位

3、方式 TF0T0TR0GATEINT011&C/T=1振荡器1/12C/T=0TL0 TH08位低5位13位计数器定时器计数器2. 方式116位方式 振荡器1/12TL0 TH0TF011&T0TR0GATEINT0C/T=0C/T=18位8位16位计数器3. 方式28位自动装入时间常数方式 TF0振荡器1/1211&T0TR0GATEINT0C/T=0C/T=1TL0 TH04. 方式32个8位定时计数器T0 5.1.4 定时/计数器的初始化计算计数器的定时计数初值将计数初值送TH0、TL0 TH1、TL1 ; 1.初始化编程定时/计数器的功能是由软件编程设定的,因此

4、在使用定时/计数器之前,必须对它进行初始化编程。一般步骤如下:确定工作方式将控制字送TMOD; 根据需要,开放中断方式对寄存器IE、IP置初值; 启动由定时器控制寄存器TCON中的TR1位控制定时器的启动和停止。式中,TC为定时器的定时初值;M为定时器模值,T为定时时间;TM为单片机机器周期,其大小为12/fosc。假设单片机的主频fosc=12MHz,则不同工作方式下的最大定时时间为:方式0 Tmax=2131s=8.192ms方式1 Tmax=2161s=65.536ms方式2和3 Tmax=281s=0.256ms3.计数初值的计算 相对于定时初值的计算,计数初值的计算比较简单。其计算公

5、式为: TC=MC式中,TC为计数器的计数初值;M为计数器模值,该值与计数器的工作方式有关;C为计数器所需要的计数值。2.定时初值的计算 在定时器模式下,计数器是对单片机的振荡频率经12分频后的信号进行计数。因此,定时器的定时初值计算公式为: TC=MT/TM 解解:计数脉冲个数为2ms/12/12MHz=2000若方式0,则计数初值为: 213-2000=6192=1830H(11000001 10000B) TH0=C1H(11000001B),TL0=10H(00010000B)若方式1,则计数初值为: 216-2000=63536=F830H TH0=F8H,TL0=30H例: 若单片

6、机的频率为若单片机的频率为12MHz,请计算,请计算2ms所需要的定时器初值。所需要的定时器初值。例:设MCS-51单片机的主频为fosc=12MHZ,请编出利用定时器T1在P1.2引脚上输出为1S的方波程序。 TMOD确定XXXX1000M0M1C/TGATEM0M1C/TGATE 要产生1s的方波脉冲,只需在P1.2端以500ms为间隔,交替输出高低电平即可实现。 计算计数器的计数初值; 采用中断方式:编程时打开全局和局部中断。 由定时器控制寄存器TCON中的TR1位控制定时器的启动和停止。 ORG 0000H ORG 0000H LJMP MAIN LJMP MAIN ORG 001BH

7、 ORG 001BH LJMP INTT1 LJMP INTT1 ORG 1000H ORG 1000HMAINMAIN:MOV TMODMOV TMOD, #10H#10H MOV TH1 MOV TH1, #03CH#03CH MOV TL1 MOV TL1,#0B0H#0B0H SETB EA SETB EA SETB ET1 SETB ET1 SETB TR1 SETB TR1 MOV R0 MOV R0,#0AH#0AH SJMP $ SJMP $主程序: ORG 0200H ORG 0200HINTT1INTT1: DJNZ R0,NEXT DJNZ R0,NEXT CPL P1.

8、2 CPL P1.2 MOV R0,#0AH MOV R0,#0AH NEXT: MOV TH1 NEXT: MOV TH1,#3CH #3CH MOV TL1 MOV TL1,#0B0H#0B0H RETI RETI END END中断处理程序:C51语言程序如下:#include#define uchar unsigned char#define uint unsigned intsbit P1_2=P12; uchar n; uchar count;void main() count=10; n=count; TMOD=0 x10; TL1=0 x3c; TH1=0 xb0;IE=0 x

9、88; TR1=1; while(1); void time1_int(void) interrupt 3 TL1=0 x3c; TH1=0 xb0;n-; if(n=0) P1_2=!P1_2; n=count; 5.2 MCS-515.2 MCS-51单片机的中断系统单片机的中断系统5.2.1. MCS-515.2.1. MCS-51单片机的中断系统结构单片机的中断系统结构一、中断的概念 执行主程序主程序继续执行主程序断点中断请求中断响应执行中断处理程序中断返回二、二、MCS-51MCS-51单片机的中断系统中断允许控制中断优先级RITITF1IE1TF0IE0中断请求标志ESET1EX1

10、ET0EX01PSPT1PX1PT0PX0高级低级内部查询内部查询入口地址INT0INT1T0T1TIRIEA中断源入口地址一、中断源 MCS-51单片机共有五个中断源,两个外部中断、两个定时中断和一个串行中断,它们是: 外部中断0-INT0,由P3.2提供, 外部中断1INT1,由P3.3提供,T0溢出中断; 由片内定时/计数器0提供T1溢出中断; 由片内定时/计数器1提供串行口中断RI/TI; 由片内串行口提供5.2.25.2.2中断源中断源二、中断方式 单片机的中断为固定入口式中断,即一响应中断就转入固定入口地址执行中断服务程序。具体入口如下: 中断源 入口地址 INT0 0003 T0

11、 000BH INT1 0013H T1 001BH RI/TI 0023H5.2.3 5.2.3 中断控制中断控制与中断控制有关的控制寄存器有四个:1定时控制寄存器TCON D7D6D5D4D3D2D1D0TF1TF0IE1 IT1 IE0 IT0中断请求标志触发方式选择0 低电平1 下降沿2串行口控制寄存器SCON D7D6D5D4D3D2D1D0TIRI串行中断请求标志3中断允许控制寄存器IE D7D6D5D4D3D2D1D0EAESET1EX1ET0EX04中断优先级控制寄存器(IP) D7D6D5D4D3D2D1D0PSPT1PX1PT0PX00 禁止,1允许0 低级别,1高级别5.

12、2.45.2.4中断的处理过程及响应时间中断的处理过程及响应时间 响应条件-CPU要响应中断需满足下列条件: 非响应中断且中断开放; 当前指令周期结束,如果查询中断请求的机器 周期不是当前指令的最后一个周期,则不行; 若现行指令是RETI、RET或访问IE、IP指令,则需要执行到当前指令及下一条指令方可响应。1、中断响应2、响应过程单片机响应中断后,自动执行下列操作: 置位中断优先级有效触发器,即关闭同级和低级 中断: 调用入口地址,断点入栈,相当于LCALL指令; 进入中断服务程序。 关闭中断保护现场中断处理恢复现场打开中断中断返回3、中断处理与中断返回 4、中断请求的撤除定时器溢出和外部中

13、断请求 硬件自动清除串行口中断请求 软件清除响应时间响应时间-从查询中断请求标志位到转向中断服务入口地址所需的机器周期数。(1)最快响应时间(3个机器周期)以外部中断的电平触发为最快。 1个周期(查询)2个周期(长调用LCALL)(2)最长时间(8个机器周期)若当前指令是RET、RETI和访问IP、IE指令,紧接着下一条是乘除指令发生,则最长为8个周期:2个周期执行当前指令(其中含有1个周期查询)4个周期乘除指令2个周期长调用8个周期。5、中断响应时间使用中断必须初始化,一般步骤为:u开中断设置IEu设置中断优先级IPu触发方式TCON5.2.55.2.5、中断系统的初始化及应用、中断系统的初

14、始化及应用例:例: 请写出INT0为低电平触发的中断系统初始化程序。1)采用位操作指令SETB EA ;开中断总允许控制位SETB EX0 ;开INT0中断SETB PX0 ;令INT0为高优先级CLR IT0 ;令INT0为低电平触发2)采用字节型指令MOV IE,#81H ;开INT0中断ORL IP,#01H ;令INT0为高优先级ANL TCON,#FEH ;令INT0为低电平触发3)用C语言EA=1; /*开INT0中断*/EX0=1; PX0=1; /*令INT0为高优先级*/IT0=0; /*令INT0为低电平触发*/例:例:利用INT1引入单脉冲,每来一个负脉冲,将连接到P1口

15、的发光二极管循环点亮。分析:可以利用INT1的下降沿触发中断。每次进入中断服务程序,就将连接至P1口的发光二极管顺次点亮。相应的汇编语言程序如下:;主程序 ORG 0000HLJMP MAIN ORG 0100HMAIN:MOV SP,#60H MOV A, #01H MOV P1, #00H SETB IT1 ;下降沿触发 SETB EX1 ;开放中断 SETB EA SJMP $ ;等待中断;中断服务子程序: ORG 0013H LJMP INT1 ORG 0100HINT1:CJNZ A,#00H,AGA MOV A,#01HAGA:MOV P1,A RL A RETI END#incl

16、ude#define uchar unsigned charuchar i=0 x01; void main() P1=0; IT1=1; EX1=1; EA=1; while(1); void int1_int(void) interrupt 2 if(i=0)i=1; P1=i; i=1; MCS-51单片机为外部的中断提供了两个中断请求输入端。但在实际应用系统中,外部中断请求源可能比较多,这就需要扩展外部中断源。常用的中断扩展方法有三种:利用定时器溢出中断法、查询法以及利用8259中断控制器扩展。1.利用定时器扩展中断源 MCS-51内部集成了两个定时器,若将定时器设置为计数器方式,计数

17、初值设为满量程,同时将定时器的输入端T0或T1用于输入外部中断请求信号。每当T0或T1引脚上出现负边沿的时候,计数器就会产生溢出中断。利用这个特性,可以把P3.4和P3.5作为外部中断请求输入线,TF0和TF1作为外部中断请求标志,其中断入口地址000BH和001BH就是扩展的外部中断源的入口地址。 5.2.65.2.6、中断源的扩展、中断源的扩展例:定时器T0中断源用作外部中断源初始化程序如下:MOV TMOD,#06H ;T0为方式2,计数方式MOV TH0,#0FFH ;装入计数初值MOV TL0,#0FFHSETB EASETB ET0 ;开放定时器T0中断SETB TR0 ;启动定时

18、器T0定时2.利用查询方式扩展中断源 若系统中有多个外部中断源,采用定时器溢出中断来扩展外部中断源已不能满足实际应用的需要,这时可采用中断和查询相结合的方式来扩展外部中断源。这种方法是将多个中断源按照重要程度进行排队,把最高优先级的中断源接到MCS-51的一个外部中断输入端,其余的中断源通过或门连接到另一个外部中断输入端,同时还连接到一个并行I/O口。中断请求由硬件电路产生,而中断源的识别由程序查询来处理,查询的次序决定了中断源的优先级。 例:例:现有5个外部中断源EX1EX5,如下图所示。中断请求信号低电平有效,编写查询外部中断请求线EX1EX5上中断请求的程序。&EX2EX3EX4

19、EX5INT1P1.0P1.1P1.2P1.3MCS-51EX1INT0汇编程序如下: ORG 0000H LJMP MAIN ORG 0003H LJMP INT0 ORG 0013H LJMP INT1 MAIN:MOV SP,#60H CLR IT1 CLR IT0 SETB EX0 SETB EXI SETB EA SJMP $ORG 1000HINT0:PUSH PSW PUSH ACC ACALL EX1 POP ACC POP PSW RETI ORG 1200HINT1:PUSH PSW PUSH ACCORL P1,#0FH MOV A,P1 JB P1.0,N1 ACALL

20、 EX2 N1:JB P1.1,N2 ACALL EX3 N2:JB P1.2,N3 ACALL EX4 N3:JB P1.3,N4 ACALL EX5 N4:POP ACC POP PSW RETI END#include#define uchar unsigned char#define uint unsigned intsbit p1_0=P10; sbit p1_1=P11;sbit p1_2=P12;sbit p1_3=P13;void main()TCON=0 x00; IE=0 x85; IP=0 x01; while(1);void int0_int(void) interru

21、pt 0 EX1()void int1_int(void) interrupt 2 if(p1_0=0) EX2() else if(p1_1=0) EX3() else if(p1_2=0) EX4() else if(p1_3=0) EX5() C51程序如下:5.35.3 MCS-51 MCS-51单片机的串行接口单片机的串行接口 MCS-51内部除了含有4个并行I/O接口之外,还有一个可编程的全双工串行通信接口,具有UART的全部功能。该接口电路不仅能同时进行数据的发送和接收,也可作为一个同步移位寄存器使用。MCS-51的串行接口有4种工作方式,波特率可由软件设置片内的的定时/计数器来

22、控制。每当串行接口完成接收或发送1个字节的数据后,均可以向CPU发出中断请求。MCS-51的串行口除了可用于串行通信之外,还可以非常方便的用来扩展并行口。下面对串行接口的结构、工作方式和波特率以及应用进行讨论。 5.3.1 MCS-515.3.1 MCS-51的串口结构的串口结构一、 MCS-51的串口结构SMODGF1GF0PDIDL电源控制寄存器电源控制寄存器PCON(87H)二、 MCS-51的串口控制寄存器在方式1、2、3时,SMOD=1,波特率乘2;SMOD=0,波特率不变。空闲控制位掉电控制位通用标志位,用户可以通过指令改变它们的状态。串行口控制寄存器串行口控制寄存器SCON(98

23、H)0 0:发送器无中断(软件复位):发送器无中断(软件复位)1 1:接收器满中断请求接收器满中断请求D DD DD DD DD DD DD DD D 0 0:接收器无中断(软件复位):接收器无中断(软件复位) 1 1:发送器空中断请求发送器空中断请求SCONSCON位地址位地址0 01 12 23 34 45 56 67 7 RI RI TI TI989899999A9A9B9B9C9C9D9D9E9E9F9FSM0SM1SM2REN TB8RB8方式方式0 0 0方式方式1 0 1方式方式2 1 0方式方式3 1 1方式方式2 2或或3 3中接收的第九位数据中接收的第九位数据方式方式2 2

24、或或3 3中发送的第九位数据中发送的第九位数据多机通信使能位多机通信使能位允许串行接收允许串行接收5.3.2 5.3.2 串口的工作方式串口的工作方式一、方式0同步移位寄存器方式,波特率固定。由RXD 作为输入输出的数据线由TXD提供移位时钟收发8位数据,低位在前发送:执行写SBUF后,启动发送接受:满足REN=1且接受中断RI=0二、方式1(10位异步通信方式 )TXD发送数据RXD接收数据采用T1作为串口的波特率发生器启动发送:写SBUF接收:REN=1三、方式2、3( 11位异步通信)11位异步通信区别:波特率产生的方式不同,方式2波特率不变,方式3由T1的溢出率决定。5.3.35.3.

25、3串口的通信波特率串口的通信波特率方式0:每个机器周期收发1位数据 波特率=fosc/12 方式2:波特率由fosc和SMOD决定 波特率=(2SMOD/64)*fosc方式1、3:波特率可变,由T1的溢出率与SMOD的 值共同决定 波特率=(2SMOD/32)*定时器T1的溢出率11T1122oscKfN定时器的溢出率定时时间5.3.4 5.3.4 串口的初始化串口的初始化 在使用串行口之前,必须对它进行初始化编程。主要是设置产生波特率的定时器T1、串行口控制和中断控制。一般步骤如下:1)对TMOD寄存器送控制字,确定定时器T1的工作方式;2)根据所需的波特率,计算定时器T1的计数初值,并装

26、入初值寄存器,启动定时器T1工作;3)对SCON寄存器送控制字,设定串行口的工作方式(方式0和方式2不需前两个步骤;4)对PCON寄存器送控制字,设置SMOD位;5)选择查询方式或中断方式,在使用中断方式进行串行通信时,需对IE编程。例:如图,编程实现使发光二极管从左向右依次点亮,并进行循环操作。中断方式主程序 ORG 0000H LJMP DISP ORG 0023H LJMP TXSUB ORG 1000H DISP:MOV SCON,#00H SETB EA SETB ES MOV A,#80H CLR P1.0 nop setb p1.0 MOV SBUF,ALOOP:SJMP LOO

27、P中断服务程序 ORG 0200HTXSUB: LCALL DELAY CLR TI RR A MOV SBUF,A IRN: RETI END ORG 0000H LJMP DISP ORG 1000H DISP:MOV SCON,#00H ;串行口初始化为方式0 MOV A,#80H ;发光管从左开始亮起ROT:CLR P1.0 ;关闭并行输出 MOV SBUF,A ;串行输出数据 JNB TI, ;等待串行口输出完 SETB P1.0 ;开启并行输出 LCALL DELAY ;调用延时子程序 CLR TI ;清发送中断标志 RR A ;发光右移 AJMP ROT ;继续 END查询方式

28、例:例:设有甲、乙两台两台单片机,编写程序,两台单片机间实现如下串行通信功能:甲机作为发送机,将首地址为ADDRT的128字节的外部RAM数据块顺序向乙机发送;乙机作为接收机,将接收到的128字节数据顺序存放在以首址为ADDRR的外部RAM中。假设系统时钟为11.0592MHz。甲机发送程序:#include#define uchar unsigned charuchar xdata ADDRT128; /在外部RAM定义128个单元uchar num=0; /声明计数变量uchar *p /指向发送数据区的指针void main()SCON=0 x40; /串口为方式1PCON=0 x00;TMOD=0 x20; /T1初始化为方式2TL1=0 xfd ;/设置波特率为9600 bit/sTH1=0 xfd;TR1=1; /启动定时器T1ES=1; /开放串行口中断EA=1;p=ADDRT; /设置传送数据的首地址SBUF=*p; /启动串行口发送while(1); /等待中断 中断程序void uart_int(voi

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论