您好,欢迎访问三七文档
第4章80C51的定时/计数器与中断系统第4章80C51的定时/计数器与中断系统学习目的1、了解80C51定时/计数器的结构与工作原理;2、掌握80C51定时/计数器工作方式的特点及应用;3、了解中断的概念和中断的功能;4、掌握80C51中断系统结构、处理过程和使用方法。学习重点和难点1、定时器/计数器的初始化;2、定时器/计数器与中断的综合应用;3、中断系统结构、处理过程和使用方法;4、外部中断源的扩展方法。第4章80C51的定时/计数器与中断系统4.180C51定时器/计数器4.1.1定时器的结构及控制4.1.2定时器的四种工作方式4.1.3定时器的应用第4章80C51的定时/计数器与中断系统1、定时计数的概念----一个定时/计数的形象实例假如有一个水容器1000滴水刚好装满初始时已经装入400滴水问:还需滴入多少滴水才能将其装满?答:还需滴入600滴水才能将其装满,601滴溢出。答:还需600秒时间才能将其装满,601秒溢出。问:如果每秒滴入1滴水,还需多长时间才能将其装满?这就是“计数”这就是“定时”这就是“计数初值”4.1.1定时器的结构及控制第4章80C51的定时/计数器与中断系统定时与计数的关系定时/计数器:对电脉冲进行计数的单元电路。定时与计数的关系用计数器为周期性脉冲计数,产生定时。定时和计数是同一个概念,本质上定时只是计数的一个特例。定时计数器工作时,关心问题:1、定时/计数器(容器)的位宽度。2、初值(容器初始已有水滴数)的设置。3、水溢出以后的处理。第4章80C51的定时/计数器与中断系统定时/计数器的计数方向、初值计算及溢出处理计数方向加计数:每个脉冲计数器加1减计数:每个脉冲计数器减1。计数器的容量:计数器有一定的计数范围(脉冲计数的最大个数),由计数器的位宽度决定。不同CPU计数器的容量不同,若为16位,则计数容量最大可存放数值为全1时,即FFFFH=65535,216=65536为刚好溢出时的值。计数器的溢出:当加到计数器为全1时,再输入一个脉冲就使计数器回零并溢出。计数器溢出会产生溢出位,作为程序处理溢出的标记。初值计算2n=X初值+要求(计数或定时)X初值=2n—要求(计数或定时)第4章80C51的定时/计数器与中断系统2、定时/计数器结构GATEC/TM1M0GATEC/TM1M0TH1TL1TH0TL0T1方式T0方式T1(P3.5)外部输入脉冲引脚机器周期脉冲内部总线TMODTCON外部中断相关位TF1TR1TF0TR0溢出启动溢出启动定时器T1定时器T0T0(P3.4)CPU溢出中断请求INT1(P3.3)INT0(P3.2)第4章80C51的定时/计数器与中断系统(1)51单片机定时/计数的输入脉冲源的控制作计数器用对T0(P3.4)、T1(P3.5)和T2(P1.0)引脚上输入的外部脉冲进行计数。当外部输入脉冲发生负跳变时,进行“+1”计数,外部输入脉冲周期应大于2个机器周期。作定时器用对系统的时钟振荡器输出脉冲的12分频信号(fOSC/12)进行计数定时。即机器内部震荡信号的1/12分频,每一个机器周期做一次“+1”运算。以机器周期为最小定时单位。3、定时/计数器的控制第4章80C51的定时/计数器与中断系统1)启动控制位TR0、TR1=0,停止定时器工作;=1,启动定时器工作例:启动T0:SETBTR0停止T0:CLRTR02)溢出中断标志位TF0、TF1定时器溢出时,由硬件置位TFx=1;若中断开放,向CPU请求中断,CPU响应Tx中断后,自动清0TFx。若中断禁止,可用软件检测TFx(判跳),必须软件清0。WAIT:JBCTF0,NEXT;检测T0是否溢出,溢出,TF0清0。SJMPWAIT;未溢出,继续检测NEXT:…;处理溢出D0D1D2D3D4D5D6D7IT0IE0IT1IE1TR0TF0TR1TF188898A8B8C8D8E8F位地址TCON字节地址88H位定义JNBTF0,$;检测T0是否溢出,未溢出,继续检测CLRTF0;溢出,TF0清0.……;处理溢出.(2)定时器控制/状态寄存器TCONWAITNTFX=1?YNEXTTFXß0HERENTFX=0?YTFXß0第4章80C51的定时/计数器与中断系统2)功能选择位C/T:=0,定时功能,计数内部机器周期脉冲;=1,计数功能,计数引脚T0(T1)输入的负脉冲。3)方式选择位M1、M0:4种工作方式:13/16/8位1)门控方式选择位GATE:=0,非门控方式(内部启动):只要TRx=1,就启动定时器工作;只要TRx=0,就停止定时器工作。=1,门控方式(外启动):只有当TRx=1且引脚INTx=1才启动定时器。确定定时器工作方式指令:MOVTMOD,#方式字;字节访问例:设T0用方式2非门控定时,T1用方式1门控计数。MOVTMOD,#GATEC/TM1M0GATEC/TM1M0T1T0M1M0方式功能描述00013位01116位1028位自动重装113T0为两个8位11010010B(3)定时器方式寄存器TMOD(89H)第4章80C51的定时/计数器与中断系统可预置初值的16位加1计数器TH0、TL0、TH1、TL1预置T0初值指令:MOVTH0,#XHMOVTL0,#XL任何时候都可对它的当前值进行读/写操作,它们都只能字节寻址。(4)定时器的计数数据寄存器TH1TL1、TH0TL08DH8CH、8BH8AH第4章80C51的定时/计数器与中断系统4.1.2定时器的四种工作方式第4章80C51的定时/计数器与中断系统TF1TR1TF0TR0GATEC/TM1M0GATEC/TM1M01&≥110T0引脚INT0引脚00机器周期TH0TL08位5位溢出TCONTMODD0D7D7D0申请中断11定时/计数器的工作方式0方式0为13位计数,由TL0的低5位(高3位未用)和TH0的8位组成加1计数器。TL0的低5位溢出时向TH0进位,TH0溢出时,置位TCON中的TF0标志,向CPU发出中断请求。11113位计数器第4章80C51的定时/计数器与中断系统16X=2-N2定时/计数器的工作方式1方式1的计数位数是16位,由TL0作为低8位、TH0作为高8位,组成了16位加1计数器。TF1TR1TF0TR0GATEC/TM1M0GATEC/TM1M01&≥110T0引脚INT0引脚10机器周期TH0TL08位8位溢出TCONTMODD0D7D7D0申请中断计数个数N与计数初值X的关系为:第4章80C51的定时/计数器与中断系统8X=2-N3定时/计数器的工作方式2方式2为自动重装初值的8位计数方式。工作方式2特别适合于用作较精确的脉冲信号发生器。如:串行口波特率发生器的使用TF1TR1TF0TR0GATEC/TM1M0GATEC/TM1M01&≥110T0引脚INT0引脚10机器周期TH0TL08位溢出TCONTMODD0D7D7D0申请中断计数个数N与计数初值X的关系为:第4章80C51的定时/计数器与中断系统4定时/计数器的工作方式3方式3只适用于定时/计数器T0,将T0分成为两个独立的8位计数器TL0和TH0。TL0作为定时/计数器:TL0占用原T0控制位及相关引脚:其操作和功能与方式0、1基本相同。TH0仅作定时器:TH0占用T1控制位:TR1、TF1及T1中断源。TF1TR1TF0TR0GATEC/TM1M0GATEC/TM1M01&≥110T0引脚INT0引脚11机器周期TH0TL08位溢出TCONTMODD0D7D0申请中断机器周期8位申请中断溢出第4章80C51的定时/计数器与中断系统4定时/计数器的工作方式3定时器T0工作于方式3时,T1只能工作在方式0、1、2计数溢出时输出送串行口,此时T1作为串行口波特率发生器使用。以确定串行通讯的速率。启动:设置好工作方式0、1、2时相当于TR1=1,T1便自动开始运行;停止:当设置为工作方式3时相当于TR1=0,T1停止计数。GATEC/TM1M0GATEC/TM1M010T1引脚P3.512分频TH1TL18位溢出TMODD7D0重载入10fosc10T1引脚P3.512分频TH1TL18位溢出0Xfosc8或5位8位串行口串行口第4章80C51的定时/计数器与中断系统4.1.3定时器的编程应用1、定时器的初始化编程2、定时器的溢出处理编程格式3、定时器的应用举例第4章80C51的定时/计数器与中断系统1、定时器初始化编程使用定时器工作之前,先写入方式、控制寄存器,确定好定时器工作方式:①MOVTMOD,#方式字;启动方式选择(内外共同启动/内启动)功能选择—(计数/定时)位数选择—(8/13/16位)②MOVTHx,#XH;计算时间常数X,MOVTLx,#XL;Tx时间常数初值装入数据寄存器,③(SETBEA);开Tx中断(SETBETx)④SETBTRx;启动控制Tx定时器(启动/停止)GATEC/TM1M0GATEC/TM1M0定时器初始化编程:在主程序中进行第4章80C51的定时/计数器与中断系统定时/计数器应用时的初值计算计数器的初值由程序设定设计数器宽度为n,定时时长为T,要求计数脉冲个数为N,计数初值为X,机器周期为TCY。计数:2n=N+XX=2n-N定时:2n=T/TCY+XX=2n-T/TCY=-T/TCY计数器的初值由程序设定方式1、2、3实际应用时可以直接写负值。X=-N计数方式X=-T/TCY定时方式第4章80C51的定时/计数器与中断系统2、溢出处理编程格式及初值恢复方式(自动重装/软件重装)1)查询方式:先查询定时器溢出标志,再进行溢出处理。WAITNTFX=1?Y恢复计数初值NEXTTFXß0启动C/T设置TMOD及计数初值溢出处理;定时器初始化MOVTMOD,#方式字;启动方式、功能、位数选择MOVTHx,#XH;计算时间常数X,MOVTLx,#XL;SETBTRx;启动Tx定时器WAIT:JBCTFx,PT;检测溢出标志SJMPWAITPT:MOVTHx,#XH;软件恢复初值MOVTLx,#XL;重装时间常数…;溢出处理SJMPWAIT第4章80C51的定时/计数器与中断系统2、溢出处理编程格式及初值恢复方式(自动重装/软件重装)1)查询方式:先查询定时器溢出标志,再进行溢出处理。WAITNTFX=0?Y恢复计数初值TFXß0启动C/T设置TMOD及计数初值溢出处理…;定时器初始化MOVTMOD,#方式字;启动方式、功能、位数选择MOVTHx,#XH;计算时间常数X,MOVTLx,#XL;SETBTRx;启动Tx定时器WAIT:JNBTFx,$;检测溢出标志CLRTFx;溢出,TF清0.MOVTHx,#XH;软件恢复初值MOVTLx,#XL;重装时间常数…;溢出处理SJMPWAIT第4章80C51的定时/计数器与中断系统2、溢出处理编程格式及初值恢复方式(自动重装/软件重装)2)中断方式:采用主子程序结构:主程序初始化后执行其他任务,中断返回软件重装时间常数溢出中断服务程序子程序开始保护现场恢复现场设置Tx工作方式设定Tx初值主程序开始打开TX中断启动定时器T1执行其他操作等待中断中断服务程序中处理溢出ORG0000HLJMPMAINORG000BH(001BH);T0(T1)中断入口LJMPPTSMAIN:MOVTMOD,#方式字;启动方式、功能、位数选择MOVTHx,#XH;计算时间常数X,MOVTLx,#XL;初值装入数据寄存器,SETBEA;开Tx中断SETBETxSETBTRx;启动控制Tx定时器)…;初始化后执行其他程序SJMP$PTS:PUSHPSWMOVTHx,#XH;软件重装时间常数MOVTLx,#XL…;溢出中断服务程序POPPSWRETIEND第4章80C51的定时/计数器与中断系统[例3]如图4-7所示,P1口中接有八个发光二极管,编程使八个管轮流点亮,每个管亮100ms,采用定时T0方式1,
本文标题:第4章定时与中断
链接地址:https://www.777doc.com/doc-3350891 .html