第4章中断系统、定时器/计数器和串行口4.1中断系统4.2定时器/计数4.3串行口4.1中断系统一、输入/输出方式及中断的概念1.输入/输出方式CPU与外设的信息交换称为输入/输出。输入/输出方式有三种。无条件传送方式数据的传送取决于程序执行输入/输出指令,而与外设的状态无关。它适合于与CPU同步的快速设备或状态已知外设,软、硬件系统简单。如:驱动继电器、驱动数码显示器等。查询方式中断方式查询方式是一种条件传送。在传送数据前,首先读取外设状态信息,并加以测试判断。其特点是:在硬件上不仅要考虑数据信息的传送,而且还要考虑状态信息的输入;在查询过程中CPU的利用率不高,适合于实时性能要求不高的情况下。中断方式也是一种条件传送。CPU可以与外设同时工作,并执行与外设无关的操作,一旦外设需要服务,就主动向CPU提出申请,CPU暂停现在的操作去执行对外设的输入输出程序,执行完毕又返回继续执行现在的操作。应用范围较广。2.中断的概念(1)中断:CPU正在执行程序的过程中,由于CPU之外的某种原因,有必要暂停该程序的执行,转而去执行相应的处理程序,待处理程序结束之后,再返回原程序断点处继续运行的过程。(2)中断系统:实现中断过程的软、硬件系统。(3)中断源:提出中断申请的来源。中断源一般有外设、定时时钟、故障源等。(4)主程序与中断服务程序:CPU执行的当前程序称为主程序。CPU转去对突发事件的处理程序,称为中断服务程序。(5)中断优先级:当多个中断源同时申请中断时,为了使CPU能够按照用户的规定先处理最紧急的,然后再处理其他事件,中断系统设置有中断优先权排队电路,通过用户的设置,排在前面的中断源称为高级中断,排在后面的称为低级中断。(6)中断嵌套:当CPU响应某一中断源请求而进入中断处理时,若更高级别的中断源发出申请,则CPU暂停现行的中断服务程序,去响应优先级更高的中断,待更高级别的中断处理完毕后,再返回低级中断服务程序,继续原先的处理,这个过程称为中断嵌套。二、89S51中断系统结构89S51中断系统有5个中断源,2级中断优先级。结构框图如图所示。中断请求标志寄存器是由定时器控制寄存器(TCON)和串行口控制寄存器(SCON)的若干位构成,如图所示。中断允许控制寄存器IE:控制着中断的允许与禁止。中断优先级控制寄存器IP:89S51有2级中断优先级,每一个中断源都可以软件设置为高级中断或低级中断,由中断优先级控制寄存器IP控制。相应位置“1”时,此中断为高级中断,清“0”时设置为低级中断。三、中断的处理过程89S51中断的处理过程:1.中断查询CPU在每个机器周期结束时查询中断源是否有中断申请,若没有,则继续当前任务;若有,则自动设置相应中断请求标志位。INT0INT0INT1中断源有效的申请信号设置的标志位外部中断0IT0位=0时,引脚为低电平申请中断;IT0位=1时,引脚有1到0的负跳变信号申请中断IE0=1定时器T0中断当T0计满溢出时申请中断TF0=1外部中断1IT1位=0时,引脚为低电平申请中断;IT1位=1时,引脚有1到0的负跳变信号申请中断IE1=1定时器T1中断当T1计满溢出时申请中断TF1=1串行口中断当发送完一帧数据时申请中断TI=1当接收完一帧数据时申请中断RI=1INT12.中断的响应条件•中断请求标志为1;•CPU中断开放,即EA=1且相应中断允许位=1•无同级或更高优先级中断正在被服务;•为保证指令执行得正确,必须现行指令执行完,若现行指令为中断返回RETI或访问IE、IP寄存器指令,必须执行完该指令和紧接着的下一条指令后才能响应中断。注:上述只要有一个条件不满足,就不会立即响应中断。3.响应中断•首先设置相应的优先级状态触发器,以便屏蔽后面的同级或低级中断请求。•保护现行程序断点地址,即把当前PC的内容送入堆栈(硬件执行LCALL指令)。•进入指定的中断服务程序入口地址。89S51规定各中断源有相应的服务程序入口地址:中断源中断服务程序入口地址外部中断00003H定时器T0中断000BH外部中断10013H定时器T1中断001BH串行口中断0023H4.执行中断服务程序中断服务程序的设计不仅要考虑完成相应的服务任务,而且还要考虑现场保护与现场恢复,以便保护主程序中不应破坏的数据。5.中断返回中断返回指令RETI的作用如下:(1)清除响应时设置的优先级状态触发器;(2)恢复主程序断点地址,即把堆栈的内容送给PC。6.中断请求的撤除CPU响应某中断后,在返回之前必须撤除上一次中断请求,否则会错误地引起另一次中断的发生。四、外部中断源的扩展89S51单片机只有两个外部中断源,在实际应用中可能会遇到CPU对多个外设进行服务的情况,此时系统需要扩展外部中断源。外部中断源的扩展有两种方式:1.利用查询方式扩展外部中断源。2.利用定时器扩展外部中断源。任务T4——单片机与打印机的数据传送。见动画十二——单片机与打印机数据传送任务演示4.2定时器/计数器89S51单片机内部集成有两个16位定时器/计数器T0、T1。一、定时器/计数器T0、T1的结构1.定时器的总体结构定时器/计数器T0、T1的结构如图所示。特殊功能寄存器TH0,TLO.TH1,TL12.定时器方式寄存器TMOD特殊功能寄存器TMOD用于控制定时器/计数器的启动方式、计数脉冲源的选择、工作方式的选择。其各位含义如图所示。3.定时器控制寄存器TCON各位含义如图所示。二、定时器/计数器T0、T1的工作方式定时器/计数器的基本工作过程如图所示。1.方式0T0、T1定时器/计数器的方式0相同,为13位计数器结构,方式0的原理图如图所示。TH0最高位进位(即溢出)时,设置TF0=1,申请中断。响应中断后,系统自动对TF0复位。当C/=0,为定时功能;当C/=1,为计数功能。TT这三者为启动控制定时时间t与计数器的位数、设置的计数初值(又称时间常数)、时钟频率有关。计算公式如下:t=(计数最大值―x初值)×机器周期=(2¹³―x初值)×12/fosc其中:x初值:时间常数;fosc:时钟频率。若fosc=12MHz,则方式0的最大定时时间T=(2¹³―0)×12/fosc=8.192(ms)例1若设置定时器T1工作在方式0、定时功能,定时时间t=5ms,启动由TR1控制。写出初始化程序。解:方式0:设置M1、M0=00;定时功能:设置C/=0;TR1启动:设置GATE=0;定时时间t=5ms:由上述公式计算x初=3192=110001111000B,将x初值的低5位(11000B)送给TL1的低5位,TL1的高3位补0,将x初值的其余高位(1100011B)送给TH1,即设置TH1=63H,TL1=18H。初始化程序如下:START:MOVTMOD,#00H;设置T1方式0,定时功能MOVTH1,#63H;送时间常数MOVTL1,#18HSETBTR1;启动T1工作T2.方式1T0、T1定时器/计数器的方式1相同,为16位计数器结构。方式1的原理图如下图所示。方式1与方式0的唯一区别在于计数位数不同,其它工作过程相同。方式1的定时时间计算公式如下:t=(计数最大值―x初值)×机器周期=(―x初值)×12/fosc若fosc=12MHz,则方式1的最大定时时间T=(―0)×12/fosc=65.536(ms)162162例2若设置定时器T0工作在方式1、计数功能,计数数目为10000次,启动由引脚控制。写出初始化程序。解:方式1:设置M1、M0=01;计数功能:设置C/=1;控制启动:设置GATE=1;计数10000次:x初值=216―10000=55536=0D8F0H,将x初值的低8位送给TL0,将x初值的其余高位送给TH0,即设置TH0=0D8H,TL0=0F0H。初始化程序如下:START:MOVTMOD,#0DH;设置T0方式1,计数功能MOVTH0,#0D8H;送计数初值MOVTL0,#0F0HSETBTR0;置TR0=1,T0启动由引脚控制INT0TINT03.方式2T0、T1定时器/计数器的方式2相同,为可重栽时间常数的8位计数器结构。方式2的原理图如图所示。TH0作为重载时间常数寄存器,当TL0计满溢出后,设置TF0=1申请中断,同时将TH0中的数据自动装载到TL0中重新工作。定时时间计算公式如下:t=(计数最大值―x初值)×机器周期=(―x初值)×12/fosc若fosc=12MHz,则方式2的最大定时时间T=(―0)×12/fosc=0.256(ms)82824.方式3T1设置为方式3时,停止工作;T0设置为方式3时,分成两个独立的8位定时器/计数器。T0方式3原理图如图所示。任务演示任务T5—生产线零件打包机控制。见动画十三——生产线零件打包机控制课堂实践利用T0定时功能,在P1.0引脚上产生周期为100ms的方波信号,设fosc=12MHz。见动画十四——方波发生器4.3串行口一、串行通信的基本概念并行通信单位信息(通常为一个字节)的各位数据同时传送串行通信分类同步通信发送和接收同步进行,从而实现数据的不间断传送异步通信发送与接收没有用同步时钟同步,传送过程中数据之间有间隔传送方式单工半双工全双工2.波特率的概念每秒传送数据的位数称为波特率(BaudRate),单位为波特,即位/秒(b/s)。波特率的倒数称为位传送时间,用Td表示,单位为秒(s)。例如:传送速率每秒10帧数据,每一帧数据11位,则传送波特率为10帧/秒×11位/帧=110b/s位传送时间Td=9.1ms。二、串行口的结构1.串口的总体结构通过设置特殊功能寄存器SCON、PCON来控制串行口的工作方式与波特率。2.串口控制寄存器SCON数据格式如下:SM0、SM1:串行口工作方式选择位。可以设置4种工作方式。9FH9EH9DH9CH9BH9AH99H98H98HSM0SM1SM2RENTB8RB8TIRISM0SM1工作方式功能说明波特率00方式08位移位寄存器方式fosc/1201方式18位异步通信方式T1溢出率的16或32分频10方式29位异步通信方式fosc的32或64分频11方式39位异步通信方式T1溢出率的16或32分频串行接收允许位。由软件设置1允许接收,设为0禁止接收在9位异步通信方式下,由于缓冲器只有8位,故用TB8作为发送的第9位,RB8作为接收的第9位。发送中断标志与接收中断标志。SM2:允许方式2、3多机通信控制位。串口工作方式SM2位功能说明方式0SM2=0此位无意义,设为0方式1SM2=1只有接收到有效的停止位,才将数据送入接收缓冲器保存,并置RI=1,否则数据丢失,不置位RISM2=0无论是否接收到有效的停止位,都将数据保存,并置位RI方式2、3SM2=1只有接收到第9位为1,才将数据送入接收缓冲器保存,并置RI=1,否则数据丢失,不置位RISM2=0无论是否接收到第9位为1,都将数据保存,并置位RI3.电源控制寄存器PCON用来控制串行口的波特率倍增,以及在CHMOS系列单片机中实现电源控制,其格式如下:87HSMODPDIDL波特率倍增位。当SMOD=1时,使串行口波特率加倍。三、串行口方式01.方式0的工作过程(1)发送过程①CPU将数据送入发送缓冲器SBUF后,自动启动串口发送。②8位数据以固定的波特率(fosc/12),低位在前,从RXD引脚串行输出,TXD引脚发送移位时钟信号(频率为fosc/12),每个移位时钟对应一个输出的数据位。③8位数据发送完毕,置位TI=1,申请中断,通知CPU再发送下一个数据。(2)接收过程①软件设置REN=1时,启动接收过程。②串行口以fosc/12固定的波特率,从RXD引脚串行输入数据(低位在前),TXD引脚输出移位时钟信号。③当8位数据接收完毕,将数据送入接收缓冲器SBUF,并置位RI=1,申请中断,通知CPU取走数据。四、串行口方式1、2、31.方式1的工作过程(1)发送过程①CPU将数据送入发送缓冲器SBUF后,启动串行口发送。②以指定的波特率,串行发送一位起始位、8位数据位(低位在