您好,欢迎访问三七文档
当前位置:首页 > 建筑/环境 > 电气安装工程 > 单片机中断系统与定时器计数器应用
单片机中断系统与定时器/计数器应用MCS-51单片机中断系统MCS-51单片机定时器/计数器一、MCS-51单片机中断系统单片机需要处理的任务按系统对实时性要求的不同可以分为两类。一类对于实时性要求不严格。另一类对实时性的要求非常严格。对于实时性要求严格的系统,通常采用MCS-51单片机提供的中断功能。当前程序断点响应中断请求中断服务函数返回当前程序1、中断源中断源即指能够发出中断申请的来源。中断申请信号既可以自外部的部件发出,也可以由单片机内部的功能单元发出。中断源中断标志位清零方式外中断0IE0硬件清零外中断1IE1硬件清零片内定时/计时器0(T0)溢出中断TF0硬件清零片内定时/计时器1(TI)溢出中断TF1硬件清零片内串行口发送/接收中断TI/RI软件清零2、与中断有关的特殊功能寄存器1IE0TF01IE1TF1TIRI≥1自然优先级中断入口地址自然优先级中断入口地址PCPC高级中断请求低级中断请求IPIETCONIT0=0EX0IT1=0IT1=1INT0INT1INT1T0T1TXDRXDET0EX1ET1ESEAPX0PT0PX1PT1PS1010101010SCON中断标志各中断源允许总允许优先级硬件查询IT0=1(1)定时器/计数器控制寄存器TCON该寄存器的低4位用于外部中断的控制,高4位用于定时器/计数器中断T0、T1的控制,TCON.7TCON.6TCON.5TCON.4TCON.3TCON.2TCON.1TCON.0TF1TR1TF0TR0IE1IT1IE0IT0IT0(TCON.0)外部中断0触发方式控制位。IT0=l;//设定外部中断0为下降沿触发模式IT0=0;//设定外部中断0为低电平触发模式IE0(TCON.l)外部中断0中断请求标志位。当有外部的中断请求时该位就会置1(由硬件完成),在CPU响应中断后,由硬件自动将IE0清零。TR0(TCON.4)定时器/计数器T0启停控制位,可由软件设置。TR0=1;//启动定时器/计数器T0,TR0=0;//停止定时器/计数器T0。TF0(TCON.5)定时器/计数器T0溢出中断请求标志位。当T0计数产生溢出时,由硬件置为1,在CPU响应中断后,由硬件将其自动清零。IT1(TCON.2)外部中断l触发方式控制位,用途与IT0相同。IE1(TCON.3)外部中断1中断请求标志位,用途和lE0相同。TR1(TCON.6)定时器/计数器T1启停控制位。用途与TR0相同。TFl(TCON.7)定时器/计数器Tl溢出中断请求标志位。用途与TF0相同。(2)串行口控制寄存器SCON片内串行口完成接收或发送的中断请求信号RI和TI在串行口控制寄存器SCON中,SCON的高6位用于串行口工作方式设置和串行口发送/接收控制,Rl和TI是其中的低两位。SCON.7SCON.6SCON.5SCON.4SCON.3SCON.2SCON.1SCON.0SM0SM1SM2RENTB8RB8TIRIRI串行口接收中断请求标志位。RI=0表示没有串行口接收中断申请,RI=l表示有串行口接收中断申请(即完成一帧数据的接收)。中断系统不会自动撤除RI中断,必须由用户在中断服务程序中通过将RI清零来撤除。即RI=0。TI串行口发送中断请求标志位。TI=0表示没有串行口发送中断申请,TI=l表示有串行口发送中断申请(即完成一帧数据的发送)。中断系统不会自动撤除TI中断,必须由用户在中断服务程序中通过将TI清零来撤除。即TI=0。(3)中断允许控制寄存器IE在MCS-51中断系统中,中断的允许或禁止是由片内可进行位寻址的8位中断允许控制寄存器IE来控制的IE.7IE.6IE.5IE.4IE.3IE.2IE.1IE.0EA--ESET1EX1ET0EX0EACPU总中断允许位。EA=0关中断,EA=1开中断。EX0外部中断0中断允许位。EX0=1允许外部中断0中断,EX0=0禁止外部中断0中断。ET0定时器/计数器T0中断允许位。ET0=1允许T0中断,ET0=0禁止T0中断。EX1外部中断l中断允许位。EX1=1允许外部中断1中断,EX=0禁止外部中断1中断。ET1定时器/计数器Tl中断允许位。ET1=1允许T1中断,ET1=0禁止T1中断。ES串行口中断允许位。ES=1允许串行口中断,ES=0禁止串行口中断。MCS-51单片机复位时,IE被清零,此时CPU关中断,各中断源的中断也都被屏蔽。若系统需要用中断方式进行事件处理,则系统初始化程序中需要对IE编程。对IE编程时,不仅要开需要的中断,还要开CPU的中断。例如:EA=1;//CPU开中断EX1=1;//CPU中断巳开,对EXl的操作有效,允许外部中断1中断。(4)中断优先级寄存器IPMCS-51单片机有两个中断优先级,可实现两级中断服务嵌套,每个中断源都可设定为高或低中断优先级。MCS-51中断系统对各中断源的中断优先级有一个统一的规定,称为自然优先级(也称为系统缺省优先级)。中断源优先级外部中断0最高级↓最低级定时器T0中断外部中断1定时器T1中断串行口中断MCS-51单片机的中断优先级采用了自然优先级和人工设置高、低优先级的策略,中断处于同一级别时,就由自然优先级确定。开机时每个中断都处于低优先级,中断优先级可以通过中断优先级寄存器IP中的相应位的状态来设定。IP.7IP.6IP.5IP.4IP.3IP.2IP.1IP.0---PSPT1PX1PT0PX0PX0外部中断0优先级设定位。PT0定时器/计数器T0优先级设定位。PX1外部中断0优先级设定位。PT1定时器/计数Tl优先级设定位。PS串行口优先级设定位。IP中某位设为1,相应的中断级别就设置成高优先级,否则就是低优先级。3、中断服务函数的写法中断源入口地址(汇编语言用)中断号(C语言用)外部中断00003H0定时器/计数器T0溢出中断000BH1外部中断10013H2定时器/计数器T1溢出中断001BH3串行口发送/接收中断0023H4MCS-51的中断服务函数格式如下:void函数名()interruptm(usingn){中断服务程序内容}一个简单的中断服务C程序写法如下:voidT1_time()interrupt3{TH1=(65536一10000)/256;TL1=(65536-10000)%256;}上面这段代码是定时器T1的一个简单的中断服务函数,定时器T1的中断序号是3,因此要写成interrupt3,中断服务程序的内容是给两个存放初值的寄存器TH1、TL1装入新值。二、MCS-51单片机定时器/计数器1、定时器/计数器内部结构MCS-51单片机有2个16位的定时器/计数器T0和T1,4种工作方式,2种工作模式,定时器和计数器使用内部同一个电路,实现对内部脉冲计数完成定时功能和对外部脉冲计数完成计数功能。定时器/计数器是MCS-51单片机非常重要的内部资源,在以后的程序设计中经常要用到,用于实现定时和计数功能。CPUTH1TL1TH0TL0TCONTMODP3.3P3.2中断溢出启动启动工作方式工作方式T1(P3.5)T0(P3.4)溢出16位16位其内部主要包括:①两个16位可编程定时器/计数器,简称为定时器0(T0)和定时器1(T1)。②一个8位的定时器/计数器方式寄存器TMOD。主要用于设定定时器/计数器的工作方式,有四种工作方式。③一个8位的定时器/计数器控制寄存器TCON。主要用于控制定时器/计数器的启动与停止,并保存T0、T1的溢出和中断标志。2、与定时器/计数器有关的特殊功能寄存器(1)定时器/计数器控制寄存器TCONTCON的低4位用于控制外部中断,高4位用于控制定时器/计数器的启动和中断请求。(2)定时器/计数器工作方式寄存器TMOD工作方式寄存器TMOD可位寻址,用于设置定时器/计数器的工作模式和工作方式,其中低4位用于T0的设置,高4位用于T1的设置。TMOD.7TMOD.6TMOD.5TMOD.4TMOD.3TMOD.2TMOD.1TMOD.0GATEM1M0GATEM1M0控制T1控制T0GATE门控位GATE=0时,只要用软件使TCON中的TR0或TR1为l,就可以启动定时器/计数器工作。GATA=1时,要用软件使TR0或TRl为l,同时外部中断引脚(INT0)(与TR0对应)或(INT1)(与TR1对应)也为高电平时才能启动定时器/计数器工作,即此时定时器/计数器的启动条件加上了(INT0)或(INT1)引脚为高电平。M1、M0定时器/计数器工作方式设置位M1M0工作方式功能描述00方式0,13位定时器/计数器,由TLX(X=0,1)的低5位和THX的高8位组成01方式1,16位定时器/计数器,由TLX的8位和THX的8位组成10方式2,8位自动重装初值的定时器/计数器,TLx作计数器,THx作为预置数寄存器11方式3,两个独立的8位定时器/计数器,不能用于T13、定时器/计数器工作方式(1)方式0—13位定时器/计数器方式(M1M0=00)12分频振荡器TH0(8位)TL0(5位)&≥11TF0中断请求T0(P3.4)TR0GATEINT0(P3.2)C/T=0C/T=1S由THx的全部8位和TLx的低5位(TLx的高3位未用)构成13位加1计数器,当TLx低5位计数计满时直接向THx进位;当全部13位计数计满'溢出时,溢出标志位TFx由硬件自动置l,向CPU发出中断申请。(2)方式1—16位定时器/计数器方式(M1M0=01)在方式l下,由THx的全部8位和TLx的全部8位构成16位计数器,当TLx计数满时直接向TFx进位,当THx和TLx均计数溢出时,溢出标志位TFx置1,向CPU发出中断申请。12分频振荡器TH0(8位)TL0(8位)&≥11TF0中断请求T0(P3.4)TR0GATEINT0(P3.2)C/T=0C/T=1S(3)方式2—8位自动重装初值定时器/计数器方式(M1M0=10)12分频振荡器TL0(8位)&≥11TF0中断请求T0(P3.4)TR0GATEC/T=0C/T=1TH0(8位)重新装入SINT0(P3.2)在方式2下,16位定时器/计数器被拆成两个8位寄存器THx和TLx.,以TLx作计数器,而THx作为预置数寄存器用于存放计数的初值。在对定时器/计数器初始化时,这两个8位寄存器必须装入相同的初值。当计数计满滥出时,TFx由硬件置1,向CPU发出中断申请,同时单片机内部硬件电路自动将THx中的计数初值重新装入TLx中。(4)方式3—两个8位定时器/计数器方式(M1M0=11)12分频振荡器TL0(8位)&≥11TF0中断请求T0(P3.4)TR0GATEC/T=0C/T=112分频振荡器TH0(8位)TF0中断请求TR1SSINT0(P3.2)方式3仅适用于定时器/计数器T0。4、定时器/计数器初始化在单片机应用系统中,使用定时器/计数器时都要先对其进行初始化,所谓初始化就是在程序开始处需要对定时器/计数器及中断寄存器做必要的设置。通常定时器/计数器初始化过程如下。①对TMOD赋值,以确定T0和T1的工作方式。②计算初值,并将初值写入TH0、TL0或TH1、TL1。③采用中断方式时,则对IE赋值,开放中断。④TR0或TRl置位,启动定时器/计数器开始定时或计数。5-1-4计算时间常数X(计算初值)1.计数器初值的计算:计数器模式下必须给计数器设置计数器初值,这个计数器初值是送到TH(TH0/TH1)和TL(TL0/TL1)中的。计数器是在计数初值基础上以加法计数的,并能在计数器从全“1”变为全“0”时自动产生定时溢出中断请求。因此,可以把计数器计满为零所需要的计数值设定为C,计数初值设定为TC,由此便可得到如下的计算公式:TC=M-C式中,M为计数器模值。在方式0时M为213;在方式1时M为216;在方式2和方式3时M为28。2.定时器初值的计算:在定时器模式下,计数器由单片机主脉冲经12分频后计数。因此,定时器定时时间T的计算公式
本文标题:单片机中断系统与定时器计数器应用
链接地址:https://www.777doc.com/doc-2594150 .html