流水灯定时控制和中断系统讲解_第1页
流水灯定时控制和中断系统讲解_第2页
流水灯定时控制和中断系统讲解_第3页
流水灯定时控制和中断系统讲解_第4页
流水灯定时控制和中断系统讲解_第5页
已阅读5页,还剩65页未读 继续免费阅读

下载本文档

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

文档简介

1、流水灯定时控制和中断系统讲解以定时方式控制流水灯3. 2 定时器/计数器3.1 中断系统 本节主要介绍中断的概念、一个完整的中断过程所包含的几个过程、MCS-51单片机是如何来实现中断的?我们怎么利用MCS-51单片机的中断资源为我们的应用系统的中断服务3.1 中断系统 中断的概念计算机设置中断的目的: 在CPU与外设交换信息时,存在着一个快速的CPU与慢速的外设间的矛盾。为解决这个问题,发展了中断的概念。中断的概念: 当CPU正在处理某项事务的时候,如果外界或内部发生了紧急事件,要求CPU暂停正在处理的工作转而去处理这个紧急事件,待处理完以后再回到原来被中断的地方,继续执行原来被中断了的程序

2、,这样的过程称为中断。1) CPU与外设并行工作。解决CPU速度快、外设速度慢的矛盾。2) 实时处理。控制系统往往有许多数据需要采集或输出。实时控制中有的数据难以估计何时需要交换。3) 故障处理。计算机系统的故障往往随机发生,如电源断电、运算溢出、存储器出错等。采用中断技术,系统故障一旦出现,就能及时处理。4)实现人机交互:人和单片机交互一般采用键盘和按键,可以采用中断的方式实现,中断方式时CPU执行效率高,而且可以保证人机交互的实时性,故中断方式在人机交互中得到广泛应用。2. 中断的作用中断源 向CPU提出中断请求的源称为中断源。中断源的优先级别 当几个中断源同时向CPU发出中断请求时,CP

3、U应优先响应最需紧急处理的中断请求。为此,需要规定各个中断源的优先级。一个完整的中断包括哪些过程?中断请求中断判优中断响应中断处理(服务)中断返回3.1.2 MCS-51单片机的中断系统 1)中断源 MCS一51中断系统有5个中断源如下: 来自P3.2引脚上的外部中断请求(外中断0)。 来自P3.3引脚上的外部中断请求(外中断1)。 T0 片内定时器计数器0溢出中断请求。 T1 片内定时器计数器1溢出中断请求。 串行接口片内串行接口完成一帧发送或接收中断请求源。 1、中断源和中断标志 2)、中断请求标志 CPU怎么知道有中断源提出中断请求的呢?每个中断源通过硬件设立一个中断标志,没提出中断时,

4、标志为0,有中断申请时标志为1,CPU每执行一条指令都会去查询这些中断标志,若检测到有标志为1,就知道有源提出中断请求了。犹如看到有同学举手提问了。2)、中断请求标志 中断源 中断标志(所在位置)3)中断标志的产生:对于定时/计数器0、1的中断标志TF0、TF1是在加1计数器加到全零时自动将TF0、TF1置位(置1)对于串行口的中断标志RI和TI的产生: 当串行口作为接收数据时,当接收允许时,根据设置的方式不同,当连续接收到8位(或9位)数据时,RI置1; 当串行口作为发送数据时,当发送完一帧数据(根据设置的方式不同,当连续发送了8位(或9位)数据时),TI置1。对于外部中断0、外部中断1的中

5、断标志IE0、IE1是CPU在每一机器周期的S5P2时采样 引脚,如果引脚的触发方式符合原先设置的变化规律,则置IE0或IE1标志。 外部中断引脚触发的设置: 通过TCON的ITO()和IT1()设置 ITx外部中断x(INTX)触发方式控制位。(X表示0或1) ITX为l,则设置外中断X为边沿触发方式(CPU在每个机器周期的S5 P2采样输入电平,如果在一个周期中采样到高电平,在下个周期中采样到低电平,则硬件使IEX置1); ITX为O,则设置外中断X为电平触发方式。此时外部中断是通过检测输入电平(低电平)来触发的。 采用电平触发和边沿触发时,要注意低电平维持的时间和负脉冲的宽度。2 中断控

6、制 当中断源提出了要求中断请求后,也即相应的中断标志置位后,CPU能否去响应它的中断,还要看:1.各中断源是否分别被允许中断 是否允许中断3、该中断源是否属于高优先级别中断允许中断允许中断允许中断允许中断允许中断允许2) 中断优先级结构 MCS一51中断系统具有两级优先级它们遵循下列两条基本规则: (1)低优先级中断源可被高优先级中断源所中断,而高优先级中断源不能被任何中断源所中断。 (2)一种中断源(不管是高优先级或低优先级)一旦得到响应,与它同级的中断源不能再中断它。 (3)当同时收到几个同一优先级的中断时,响应哪一个中断源取决于内部查询顺序。其优先级由高到低排列如下: 中断源 外部中断0

7、 ( ) 定时器计数器0溢出中断 ( ) 外部中断1 ( ) 定时器计数器l溢出中断 ( ) 串行接口中断 ( )中断嵌套过程CPU执行高级中断服务高级中断请求返回低级中断程序返回主程序响应高级中断低级中断请求CPU执行低级中断响应低级中断CPU在执行的主程序 IE0TCONSCONINT0 IT0=0 IT0=1INT1 IT1=0 IT1=1TF0 IE1TF1T0T1TIRITXDRXDESET0EX0EX1ET1EA自然优先级矢量地址高级中断请求自然优先级矢量地址低级中断请求PX0PT0PX1PT1PSIEIP 中断标志位中断源允许总允许EA中断优先级3.1.2 MCS-51单片机中断

8、系统解:IP的首3位没用,可任意取值,设为000,后面根据要求写就可以了。位D7D6D5D4D3D2D1D0符号XXXPSPT1PX1PT0PX0值00000110实例3-2 设有如下要求,将T0、外中断1设为高优先级,其它为低优先级,求IP的值。IP的值就是06H。实例3-3 在上例中,如果5个中断请求同时发生,求中断响应的次序。解:响应次序为定时器0外中断1外中断0实时器1串行中断。 位D7D6D5D4D3D2D1D0符号XXXPSPT1PX1PT0PX0值000001103 中断响应过程中断响应: 从CPU检测到中断源的申请开始,到转到 该中断源的中断服务程序的入口所经历的过程称中断响应

9、过程.CPU在每一机器周期的S5P2顺序检测被激活了的中 断源,在除下列三种情况下,将会在下一机器周期的S1去响应级别最高的中断源的中断请求三种情况:(1)CPU正在处理同级的或高一级的中断。 (2)现行的机器周期不是当前所执行指令的 最后一个机器周期。 (3)当前正在执行的指令是返回(RETI)指令或是对IE或IP寄存器进行读写的指令。响应中断的过程:采样中断请求标志(在机器周期的S5P2)按优先级查询中断 (在机器周期的S6P2 找到最高级别)由硬件产生一条转移指令(转移到中断服务程序入口)中断标志清零(RI、TI除外) 先将断点地址自动进栈保护相应的入口地址送程序计数器PC置位相应的优先

10、级状态触发器,封锁同级或低级的中断白框内表示CPU自主操作 5个中断源服务程序的 入口地址分别是: 中断源 入口地址 外部中断0 0003H 定时器0溢出 000BH 外部中断1 0013H 定时器1溢出 00lBH 串行接口中断 0023H对外部中断的响应的时间 在无三个条件封锁的情况下:最快要3个机器周期响应必须的时间 IE0或IE1标志从产生到被查询占1个机器周期,(产生后是在下一机器周期才被查询),硬件产生一条长转移指令需2个机器周期。 在由三个条件封锁的情况下:为延长执行程序的时间与响应必须的时间之和。 延长执行程序的时间由所执行的指令时间所定。 若在执行最长的指令(MUL和DIV)

11、 4个机器周期,则延长时间为3个机器周期。 若正在执行的是RETI指令或者是访问IE或IP指令,则延长时间最长为5个机器周期。(执行本指令1个机器周期再加上执行最长的指令4个机器周期(2)CPU响应中断的条件 没有同级或高优先级的中断正在处理; 正在执行指令必须执行完最后一个机器周期(换言之, 正在执行的指令完成前, 任何中断请求都得不到响应); 若正在RETI或读写IE或IP寄存器,则必须执行完当前指令的下一条其它指令之后才会响应。 单片机一旦响应中断请求, 就由硬件完成以下功能: 自动清除相应的中断请求标志位(串行口中断请求标志RI和TI除外); 保护断点和现场,把被响应的中断源所对应的中

12、断服务程序的入口地址(中断矢量)送入PC, 从而转入相应的中断服务程序。 结束中断服务程序,恢复断点和现场,并返回响应中断之前的程序继续执行。(3)CPU响应中断的过程3.1.3 中断服务函数C51编译器支持在C语言源程序中直接编写8051单片机的中断服务函数,从而减轻使用汇编语言的繁琐程度,提高了开发效率。1.中断服务函数的一般形式void 函数名(void) interrupt m unsing n代表中断号,是一个常量,取值范围是0-31。C51编译器允许32个中断,从8m+3处产生中断向量 代表中断函数将要选择使用的寄存器组,也是一个常量,取值范围是03。 程序存储器ROM0000H:

13、复位后,程序的入口地址(PC=0000H)0023H:串行口中断入口(中断号m=4)0003H:外部中断0入口(中断号m=0)000BH:定时器/计数器0中断入口(中断号m=1)0013H:外部中断1入口(中断号m=2)001BH:定时器1 /计数器中断入口(中断号m=3)002BHMCS-51单片机中断入口8字节关于USING的说明using不仅可以用于中断服务函数的定义中,也可以用于普通的内部函数,但不能用于外部函数。就中断服务函数而言如果不使用using,则在进入中断服务函数的时候,中断函数中所用到的全部工作寄存器都要入栈,函数返回之前所有的寄存器内容出栈;如果使用using,则在进入中

14、断服务函数的时候,只将当前工作寄存器组入栈,用using指定的工作寄存器组的内容不变也不入栈,函数返回之前将被保护的工作寄存器组出栈。提 示(1)使用using可缩减中断服务函数的入栈操作时间,因此可以使中断得到更及时的处理;但同时,使用using要十分小心,要保证寄存器组切换在所控制的区域内,否则会导致错误。(2)中断函数的编写包括两部分:中断源的初始化函数和中断服务函数。概括地说,中断源初始化函数就是对中断源所需要的一些变量进行设置,其形式与其他普通函数一样一般在主函数里实现;而中断服务函数就是规定系统在发生相应的中断的时候要执行哪些操作。(3)中断函数的调用过程与一般函数调用相似,但一般

15、函数是程序中事先安排好的;而何时调用中断函数事先无法确定,调用中断函数的过程是由硬件自动完成的。中断函数的类型及参数都为void类型中断函数既不能进行参数传递,也没有返回值,因此,中断函数的形式参数列表和函数类型标识符名均为void。定时器0的定义方式:void intr_time0(void) interrupt 1 2.中断函数的编写(1)中断的初始化所谓初始化,是对将要用到的MCS-51系列单片机内部部件或扩展芯片进行初始工作状态设定。针对中断来说,就是对IE,IP进行初始化编程,实现如下要求:1)CPU开中断与关中断。2)某个中断源中断请求的允许和禁止(屏蔽)。3)各中断源优先级别的设

16、定。4)外部中断请求的触发方式。(2)中断服务函数中断服务函数就是规定系统在发生相应的中断的时候要执行哪些操作。 实例【实例外接一个扬声器,当与(外部中断1输入引脚)变为低电平时,扬声器发声。 多个外部中断源系统设计多中断源系统的设计方法。1定时器中断作为外部中断使用 把外部中断引线接到定时/计数器T0或T1的引脚上,将它设成计数方式,时间常数设为负1的补码,使引脚发生负跳变(即来一个脉冲)加1后变零向CPU提出中断请求。 2中断和查询结合的方式实例3-4#includesbit p13=P13;void main() IT0=0; EA=1;EX1=1; p13=1; while(1);vo

17、id isr_int1() interrupt 2int i; p13=p13; for(i=1000;i0;i-);实例3-5:电平触发与跳变触发的比较#include#includevoid serial_init();void isr_int0();main() serial_init(); IT0=0;EA=1;EX0=1; while(1);void isr_int0() interrupt 0 printf(External interrupt 0 respondedn); void serial_init() SCON=0X52; MOD=(TMOD&0X0F)|0X20; TH

18、1=221; TR1=1;电平触发的输出情况跳变触发输出情况main() serial_init(); IT0=1; EA=1;EX0=1; while(1);案例4:蒸汽锅炉参数越限报警控制液位上、下限SL1、SL2开关取自“色带指示报警仪”,分别接,。蒸汽压力下限SP开关接。炉堂温度上限ST开关接。输出接发光二极管,与4个参数对应,越限时则相应的LED点亮。#includevoid isr_int0(void);main() IT0=0; EX0=1; EA=1; while(1) 主函数(初始化)void isr_int0(void) interrupt 0 char temp1; P1

19、 = 0 x0ff; temp1 = P1; temp1 =temp10;i-): 多个外部中断源系统设计多中断源系统的设计方法。1定时器中断作为外部中断使用 把外部中断引线接到定时/计数器T0或T1的引脚上,将它设成计数方式,时间常数设为负1的补码,使引脚发生负跳变(即来一个脉冲)加1后变零向CPU提出中断请求。 2中断和查询结合的方式3.2 定时/计数器 本节主要介绍定时/计数器的功能、结构,工作方式,以及如何应用定时/计数器为单片机的应用系统服务。定时/计数器的功能: 作定时器用:如同闹钟或手机的定时功能; 作计数器用:对外来的脉冲个数进行统计;MCS-51的定时/计数器资源: 51有2

20、个16位的计数器T0、T1; 52有3个16位的计数器T0、T1和T2;注意: 1、要使用定时/计数器前,首先必须对它进行初始化编程,设置它的功能、工作方式,送时间常数,并设置与中断相关的命令 2、计数器为加1计数,若长度为n位,则计数范围为:12n ; 送入计数器的初值称为时间常数,它以计数次数作为负数的补码设置的。定时功能 对片内机器周期进行计数,即每个机器周期产生一 个计数脉冲,计数加1。实时控制、实时采样、定时控制等。振荡器12 加 1计数器TFx申请中断TX端C/T=0C/T=1控制信号TRx定时、计数的工作原理定时、计数的工作原理计数功能 对片外从T0()、T1()引脚输入的外部脉

21、冲信号进行计数,下降沿计数加1。计数频率为晶振频率的1/24。生产线上产品计数、检测电机转速等功能。振荡器12 加 1计数器TFx申请中断TX端C/T=0C/T=1控制信号TRx3.2.1 定时/计数器的结构THX高8位计数器TLX高8位计数器定时/计数器控制寄存器定时/计数器工作模式寄存器1、定时计数器的组成2、定时器工作方式寄存器 T1T0GATE 定时器计数器运行控制位 定时器方式或计数器方式选择位。 时,为计数器方式; 时,为定时器方式。M1M0工作方式 选择MI Mo 方式 0 0 00 1 11 0 21 1 3 (字节地址89H)GATE 定时器计数器运行控制位,用来确定对应的外

22、部中断请求引脚( )是否参与T0或T1的操作控制。当GATE=0时,外部中断请求引脚( )不参与定时器控制, 当GATE=1时,外部中断请求引脚( ) 参与定时器控制.011TR0TR0=1定时/计数启动TR0=0定时/计数停止定时/计数器运行控制位10可见当GATE=1时,外部中断请求引脚( ) 参与定时器控制.GATE常用于对外部中断0或1引脚的脉冲宽度的测量 设置GATA=1,TR0=1,则由 控制定时/计数器的运行.此时定时/计数器记录的时间就是 引脚高电平的宽度2TCON控制寄存器 定时器/计数器T0运行控制,TR0=0时停止,TR0=1时开启。定时器/计数器T1运行控制,TR1=0

23、时停止,TR1=1时开启。定时器/计数器T0溢出标志。溢出时自动置1,中断响应后自动复位,也可软件复位定时器/计数器T1溢出标志。溢出时自动置1,中断响应后自动复位,也可软件复位 位: 定时器计数器作定时还是作计数功能选择位。 作定时用(对内部的时钟计数); - 定时/计数器输入频率, - 晶振频率 ; 作计数用(对外部脉冲计数) 3.2.2 定时/计数器的工作方式 定时器/计数器有四种工作方式 ,通过TMOD的M1M0两位来共同设置四种不同的工作方式。四种方式主要区别在于,计数器的长度不同、时间常数的置入方式不同,实际可用的计数器的数量不同。方式0 : M1M0=00 T1和T0 组成两个独

24、立的13位定时/计数器。 13位数的高8位存放在TH1或TH0中,低5位存放在TL1或TL0中(TL中的高3位为零) 计数范围: 18192 时间常数:方式1 : M1M0=01 T1和T0 组成两个独立的16位定时/计数器。 16位数的高8位存放在TH1或TH0中,低8位存放在TL1或TL0中 计数范围: 165536 时间常数: (FFFFH) (0000H)方式2 : M1M0=10 T1和T0 组成两个独立的8位定时/计数器(由TL1和TL0担当。 8位数的分别存放在THX和TLX中,当TLX加1计数器加到零后,将 THX中的时间常数自动的又送回TLX中,重新开始计数。计数范围: 12

25、56 时间常数:1111111100000000方式3(只适用于T0) : M1M0=11 T0 由TH0和TL0组成两个独立的8位定时/计数器。TH0借用了T1的启动和中断标志。 T1只能用于不产生中断的方式0-2的任何一种以及作为串口的波特率发生器。3.3.3 定时/计数器的应用举例1、定时/计数器的时间常数和溢出率的计算TC(时间常数)送入定时/计数器THX和TLX的初始值。X(计数长度) 计数器的实际计数值, t(定时时间)定时时间的倒数即为溢出率=1/t例如:设晶振为12MHz,求定时器定时时间为5ms时的时间常数 (1)采用13位(n=13)计数器时TC=8192-5000=319

26、2=0C78H=01100011 11000BTH0=0 x63; TL0=0 x18;(2)采用16位(n=16)计数器时TC=65536-5000=60536=EC78H TH0=0 xec; TL0=0 x78;(3)采用8位计数器时12M时钟时8位计数器的最大定时时间为256s,一次定时5MS不能达到要求,在中断程序中可采用多次溢出累加法 时间常数=2n-定时时间/机器周期2 定时器/计数器的初始化编程四个步骤:(1)设置TMOD方式字,只能用字节寻址。如:TMOD=0 x11 ;两个16位定时器 TMOD=0 x22 ;两个8位自动重装初值定时器 TMOD=0 x51 ;T1为16位

27、计数器,T0为16位定时器(2)将定时时间常数和初值放入TH和TL,只能字节寻址。如: TH0=0 x07; TL0=0 xFF; TH1=0 x01; TL1=0 xF8;(3)定时器中断的开放一般用位寻址赋值,如: EA=1; ET0=1; ET1=1;也可以用字节寻址赋值: IE=0 x8a; 在运行中若要停止中断,对应用 EA=0; ET0=0; 和 ET1=0;指令(4)启动定时器或计数器,一般用位寻址,如: TR0=1; TR1=1;在运行中若要停止定时或计数,对应用 TR0=0; 和 TR1=0;3、应用实例(1)试用定时/计数器T0编程使P1.0 产生周期为40ms的方波信号

28、(设晶振频率为6MHZ )解: 时间常数的计算:定时时间为方波周期的一半即 t=20ms=20000 ;晶振频率为6MHZ,即机器周期为2 时间常数TC=216-t/机器周期=65536-20000/2=55536 =D8F0 HA、若采用中断方式: 要在主函数中对中断相关初始化内容设置好,中断允许寄存器IE,中断优先级寄存器IP进行设置。 # include # define P10 P10 主函数 void main( ) TMOD =0 x01; / 设T0为方式1定时 TH0=0 xD8 ; TL0=0 xF0 ; / 送时间常数 ET0=1; / 允许T0中断 EA=1 ; / CP

29、U允许中断 TR0=1 ; / 启动T0定时器 P10 =1; / while(1) ; / 等待中断中断服务函数 void T00(void) interrupt 1 TH0=0 xD8; / 重送时间常数; TH0=0 xD8 ; TL0=0 xF0 ; /送时间常数 P10 = !P10 / /中断返回B、采用查询方式# include # define P10=P10 void main( ) TMOD =0 x01 ;/ 设T0为方式1定时 TH0=0 xD8 ; TL0=0 xF0 /送时间常数 ET0=1; / 允许T0中断 EA=1 ; / CPU允许中断 TR0=1 ; /

30、启动T0定时器 P10 =1; / while (1) while(TF0=0) ; / 等待定时溢出发出请求 TF0=0; / 清中断标志,为下次中断来到准备 TH0=0 xD8; / 重送时间常数; TH0=0 xD8 ; TL0=0 xF0 ; /送时间常数 P10 = !P10 ; / 延时时间超过定时器最大能定时的时间的处理 可以外设一个计数变量,若要定时1S,可用方式1先定时20ms,外计数器值为50,在20ms定时到后,对计数器减1,不等于0,则继续定时等待,直到50次定时到后,即总定时时间为1S,1S到后再作相应的处理。处理完了,再重新定时1S。B、采用查询方式# includ

31、e # define P10=P10 void main( ) TMOD =0 x01 / 设T0为方式1定时 TH0=0 xD8 ; TL0=0 xF0 /送时间常数 ET0=1; / 允许T0中断 EA=1 / CPU允许中断 TR0=1 / 启动T0定时器 P10 =1; / while (1) while(TF0=0) ; / 等待定时溢出发出请求 TF0=0; / 清中断标志,为下次中断来到准备 TH0=0 xD8; /重送时间常数; TH0=0 xD8 ; TL0=0 xF0 ; /送时间常数 P10 = !P10 ; / unsigned char count=50;/应设置全局

32、变量if (-count=0) P10=!P10; count=50; # include # define P10 P10 void main( ) TMOD =0 x01; / 设T0为方式1定时 TH0=0 xD8 ; TL0=0 xF0 ; / 送时间常数 ET0=1; / 允许T0中断 EA=1 ; / CPU允许中断 TR0=1 ; / 启动T0定时器 P10 =1; / while(1) ; / 等待中断中断服务函数 void T00(void) interrupt 1 TH0=0 xD8; / 重送时间常数; TH0=0 xD8 ; TL0=0 xF0 ; /送时间常数 P10 = !P10 / /中断返回if (-count=0) P10=

温馨提示

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

评论

0/150

提交评论