《单片机原理及应用(C51版)第5章MCS-51单片机》由会员分享,可在线阅读,更多相关《单片机原理及应用(C51版)第5章MCS-51单片机(38页珍藏版)》请在金锄头文库上搜索。
1、 第5章 MCS-51单片机典型功能部件结构及应用 5.1 中断系统 5.2 MCS-51单片机定时器/计数器 5.3 串行口5.1 中断系统5.1.1 中断的概念 1. 中断及中断源 中断是指在CPU正在执行某一段程序的过程中,如果外 界或内部发生了紧急事件,要求CPU暂停正在运行的程序 转而去处理这个紧急事件,待处理完后再回到原来被停止 执行程序的间断点,继续执行原来被打断了的程序的过程 。 实现这种功能的机构称为中断系统,产生中断的请求 源叫中断源。 2. 中断嵌套及优先级 当CPU正在处理一个优先级低的中断请求的时候,如果 发生另一个优先级比它高的中断请求,CPU暂停正在处理 的中断源
2、的处理程序,转而处理优先级高的中断请求,待 处理完之后,再回到原来正在处理的低级中断程序,这种 高级中断源能中断低级中断源的中断处理称为中断嵌套。 5.1.2 MCS-51中断系统结构及中断控制 1. 中断源和中断请求标志 (1)中断源 MSC-51系列单片机的5个中断源,包括2个外部中断源和3个内部中断源。 2个外部中断源是外部中断0和外部中断1 ; 3个内部中断源是定时器/计数器0溢出中断、定时器/计数器1溢出中断、串行口的发送和接收中断(TI和RI)。 (2)TCON寄存器 TCON是定时器/计数器0和1(T0、T1)的控制寄存器,同时也用来锁存T0、T1的溢出中断请求标志和外部中断请求
3、标志。 (3)SCON寄存器 SCON为串行口控制寄存器,其中的低两位用作串行口中断请求标志。 TI(SCON.1):串行口发送中断请求标志。 RI(SCON.0):串行口接收中断请求标志。 TCON寄存器:IE1(TCON.3):外部中断请求标志位。IT1(TCON.2):外部中断触发方式控制位。由软件来置1 或清0IT1=0时,外部中断1为电平触发方式,IT1=1时,外部中断1为边沿触发方式(下降沿有效)IT0(TCON.0):外部中断0()触发方式控制位,由软件 置位或复位。IT0=1,外部中断0为边沿触发方式(下降沿 有效);IT0=0,外部中断0为电平触发方式。TF0(TCON.5)
4、:定时器/计数器0(T0)的溢出中断请求 标志。当T0计数产生溢出时,由硬件将TF0置1TF1(TCON.7):定时器/计数器1(T1)的溢出中断请求 标志IE0(TCON.1):外部中断请求标志位。当引脚(P3.2) 上出现中断请求信号时,由硬件置位IE0,向CPU申请中断 。 2. 中断允许控制 在MCS-51单片机中断系统中,中断的允许或禁止是由片内的中断允许寄存器IE控制的。其引脚定义如下: EA(IE.7):CPU中断允许标志。EA=0时,表示CPU屏蔽所有中断 ;EA=1,表示CPU开放中断,但每个中断源的中断请求是允许还是被禁 止,还需由各自的允许位来确定。 ES(IE.4):串
5、行口中断允许位。ES=0,禁止串行口中断;ES=1 时,允许串行口中断。 ET1(IE.3):定时器/计数器T1溢出中断允许位。ET1=1,允许 T1中断;ET1=0,禁止T1中断。 EX1(IE.2):外部中断1中断允许位。EX1=1,允许外部中断1中 断;EX1=0,禁止外部中断1中断。 ET0(IE.1):定时器/计数器T0溢出中断允许位,其功能同ET1 EX0(IE.0):外部中断0中断允许位,功能同EX1。 中断允许寄存器IE中各位的状态,可根据要求用软件 置位或清零,从而实现对于该中断源允许中断或禁止中断 。当CPU复位时,IE被清零。 3. 中断优先级控制 MCS-51系列单片机
6、的中断优先级是由中断优先级寄存 器IP控制的。 MSC-51单片机中的中断系统,应遵循以下基本准则: (1) 低优先级中断可被高优先级中断请求所中断,高 优先级中断不能被低优先级中断请求所中断。 (2) 同级的中断请求不能打断已经执行的同级中断。 (3) 中断源自然优先级顺序 中断源自然优先级由高到低: 外部中断0 定时器/计数器0 外部中断1 定时器/计数器1 串行口5.1.3 MCS-51中断响应过程 MCS-51系列单片机的中断响应过程可分为中断响应、 中断处理和中断返回三个阶段。 1. 中断响应 CPU响应中断的条件主要有以下几点: (1)有中断源发出中断请求; (2)中断总允许为EA
7、=1,即CPU开中断; (3)请求中断的中断源的中断允许位为1 2. 中断处理 CPU从执行中断处理程序第一条指令开始到返回指令 RETI为止,这个过程称为中断处理或中断服务。中断处理 一般包括保护现场、处理中断源的请求以及恢复现场三部 分内容。 3. 中断返回 中断返回是指执行完中断处理程序的最后指令RETI之 后,程序返回到断点,继续执行原来的程序。 5.1.4 中断响应后中断请求的撤除 中断源提出中断申请,在CPU响应此中断请求后,该 中断源的中断请求在中断返回之前应当撤除,以免引起重 复中断,被再次响应。 5.1.5 中断系统应用例:单片机读P1.0的状态,把这个状态送到P1.7的指示
8、灯 去,当P1.0为高电平,指示灯亮;当P1.0为低电平时,指 示灯不亮。要求用中断控制这一输入/输出过程,每请求 中断一次,完成一个读写过程。 #includesbit P1_0=P10;sbit P1_7=P17;void main()IE=0x81;/* cpu开中断和外部中断0允许*/TCON=0x01;/* INT0设置为负边沿触发*/while (1);void ex_int0(void)interrupt 0if (P1_0=1)P1_7=1;elseP1_7=0;5.2 MCS-51单片机定时器/计数器 MCS-51单片机内部有两个16位定时器/计数器,简称 定时器0(T0)和
9、定时器1(T1)。它们均可用作定时器或 事件计数器,为单片机系统提供计数和定时功能,还可作 为串行接口的波特率发生器 5.2.1 定时器/计数器概述 定时器/计数器实际上是加1计数器,当它对外部事件 进行计数时,由于频率不固定,此时称之为计数器; 当它对内部固定频率的机器周期进行计数时,称之为 定时器。它们的工作状态及工作方式由两个特殊功能寄存器TMOD和 TCON的各位来决定。工作状态有定时和计数两种,由TMOD 的第2位(T0)或第6位(T1)决定。工作模式共有03四 种,也是由TMOD其中的两位(1个定时器)来决定。TMOD 和TCON的内容由软件写入。 定时器/计数器内部结构框图 定时
10、器/计数器的基本结构:TH1、TL1是T1的计数器,TH0、TL0是T0的计数器。 TH1和TL1、TH0和TL0分别构成两个16位加法计数器 。5.2.2 定时器/计数器的控制 定时器/计数器有4种工作模式,由TMOD设置并由TCON 控制。 1. 工作方式控制寄存器TMOD 特殊功能寄存器TMOD的地址为89H,它不能位寻址,在 设置时一次写入。高4位用于定时器T1,低4位用于定时器 T0 M1M0工作模式控制位 M1M0对应4种不同的二进制组合,分别对应4种工作模 式。 C/T :定时器方式和计数器方式选择控制位 为1:定时/计数器工作在计数器方式。 为0:定时/计数器工作在定时器方式。
11、 GATE定时器/计数器运行控制位(门控位) 2. 定时器控制寄存器TCON 定时器控制寄存器TCON除可字节寻址外,还可以位寻 址。TCON的字节地址为88H,位地址为88H8FH 。5.2.3 定时器/计数器的工作模式 MCS-51系列单片机的定时器/计数器T0和T1可由软件 对特殊功能寄存器TMOD中控制位C/进行设置,以选择定时 功能或计数功能。对M1和M0位的设置对应于四种工作模式 ,即模式0、模式1、模式2、模式3。 1. 工作模式0 模式0是选择定时器/计数器(T0或T1)的高8位和低5 位组成的一个13位定时器/计数器。其逻辑框图如图5-4所 示。 定时器/计数器T0工作模式0
12、逻辑结构框图 2. 工作模式1 该模式对应的是一个16位的定时器/计数器,其结构与 操作几乎与模式0完全相同,惟一的差别是:在模式1中, 寄存器TH0和TL0是以全部16位参与操作。用于定时工作方 式时,定时时间为 t=(216-T0初值)振荡周期12 用于计数工作方式时,计数最大长度为21665535个外 部脉冲。 定时器/计数器T0工作模式1逻辑结构框图 3. 工作模式2 模式2把TL0(或TL1)设置成一个可以自动重装载的8 位定时器/计数器。 TL0计数溢出时,不仅使溢出中断标志位TF0置1,而 且还自动把TH0中的内容重新装载到TL0中。TL0用作8位计 数器,TH0用以保存初值。
13、用于定时工作方式时,其定时时间(TF0溢出周期)为 t=(28-TH0初值)振荡周期12 用于计数工作方式时, 最大计数长度为28=256 个外部脉冲。 定时器/计数器T0工作模式2逻辑结构框图 4. 工作模式3工作模式3对T0和T1大不相同。若将T0设置为模式3, TL0和TH0被分成为两个相互独立的8位计数器。 定时器/计数器T0工作模式3逻辑结构框图 5. 波特率发生器定时器T0和T1可同时工作在不同的工作方式。在定时 器T0工作在模式3时,尽管TR1和TF1被T0占用,但T1仍可 通过M0M1设置其工作模式为02。此时,T1常用作串口的 波特率发生器。5.2.4 定时器/计数器的应用举
14、例 设单片机晶振为6MHz,P1.0连接一个发光二 极管,利用定时器使发光二极管每1s其状态改变 一次。 由于定时器最长定时时间是有限的,因此, 为实现1s的延时,可以设置定时器T0定时时间为 100ms,通过程序设置一个软件计数器,对定时器 溢出次数(10次)计数。 计数初值的算法: 65536-100000/2 = 15536=(3CB0H) C51程序如下:#include #define uchar unsigned charsbit led = P10;void Init (void) TMOD = 0x01;/设置T0为方式1 TH0 =0-50000 / 256;/对于16位计数器0-50000=15536, 免于计算直接装入初值 TL0 =0-50000 % 256; /装入初值(15536 mod256) TR0 = 1; led = 1;void main(void) uchar i = 0;Init ( );while(1) TH0 =0-50000 / 256;/重新装入初值 TL0 =0-50000 % 256; while(!TF0) ;/等待T0溢出 TF0 = 0;/清除