第5章-80C51单片机的中断与定时_第1页
第5章-80C51单片机的中断与定时_第2页
第5章-80C51单片机的中断与定时_第3页
第5章-80C51单片机的中断与定时_第4页
第5章-80C51单片机的中断与定时_第5页
已阅读5页,还剩81页未读 继续免费阅读

下载本文档

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

文档简介

第5章80C51单片机的中断与定时,教学基本要求:(1)、了解单片机系统有关中断的概念;(2)、了解单片机定时器/计数器的功能;(3)、熟悉与中断控制有关的控制寄存器的功能及用法;(4)、熟悉与定时/计数控制有关的控制寄存器功能及用法;(5)、掌握单片机中断系统的应用方法;(6)、掌握单片机定时器/计数器的应用方法;教学重点:(1)、单片机中断系统的中断服务流程;(2)、单片机定时器/计数器的工作方式0、2;教学难点:(1)、中断采样、中断查询、中断响应、中断撤消,5.1中断概述,(1)有关中断的概念(a)中断当中央处理器CPU正在处理某件事情的时候,外界发生了紧急事件请求,要求CPU暂停当前的工作,转而去处理这个紧急事件。处理完毕后,再回到原来被暂停的地方,继续原来的工作,这样的过程称为中断。(b)中断嵌套即指在中断过程中又发生了新中断的现象。(c)中断源向CPU发出中断请求的来源。,(d)中断请求或中断申请中断源要求CPU为其服务的请求。(e)中断查询即指CPU通过测试各中断控制寄存器中各标志位的状态,以确定有没有中断请求发生以及是哪一个中断源提出中断请求的过程。(f)中断响应即指CPU对中断源提出的中断请求的接受,发生在中断查询之后。(g)中断处理或中断服务中断处理就是执行中断服务程序。,(h)中断返回中断返回是指CPU在执行完中断服务程序后,返回原来暂停的地方(断点),继续执行原来程序的过程。,5.2.1中断源与中断向量80C51单片机共有3类5个中断源,即外部中断2个、定时中断2个和串行中断1个。(1)外中断(a)由外部信号引起,共有2个中断源,即外部中断“0”和外部中断“1”。由/INT0(P3.2)和/INT1(P3.3)引入。(b)外中断的两种信号触发方式(通过有关控制位定义)电平方式:低电平有效脉冲方式:脉冲下降沿有效,高低电平状态都应至少维持一个机器周期。,5.280C51单片机的中断系统,(2)定时中断定时中断是为满足定时或计数的需要设置的。80C51单片机共有2个定时器/计数器中断源,即T/C0和T/C1。定时器/计数器内部的计数结构对脉冲信号进行计数,当计数结构发生计数溢出时,即表明定时时间到或计数值已满,此时就以计数溢出信号作为中断请求信号,向CPU申请中断,同时置位一个溢出标志位,作为单片机接受中断请求的标志。定时器/计数器作为定时功能使用时,计数结构需要的计数脉冲信号来自单片机内部。定时器/计数器作为计数功能使用时,计数结构需要的计数脉冲信号来自单片机外部,由T0(P3.4)、T1(P3.5)引入。,(3)串行中断串行中断是为串行数据传送的需要设置的。每当串行口接收或发送完一组串行数据时,就产生中断请求信号向CPU申请中断。80C51单片机的中断向量列表外部中断00003H定时/计数器0000BH外部中断10013H定时/计数器0001BH串行发送中断0023H串行接收中断0023H5.2.2中断控制所谓中断控制就是指单片机提供给用户使用的中断控制的手段,用户可通过设置中断控制寄存器的状态位来使用中断系统。中断控制的本质就是利用指令对中断控制寄存器进行操作。80C51具有4个相关的控制寄存器:TCON,IE,IP,SCON。,(1)定时器控制寄存器(TCON)TCON的功能:用于保存外部中断请求以及定时器/计数器的计数溢出信号。TCON的字节地址:88H;位地址:8FH88H。TCON的内容及格式如下:,与中断控制有关的控制位共有6位:(a)IE0、IE1:外中断请求标志位CPU采样/INT0,/INT1端,如出现有效中断请求信号,则由硬件电路对该位自动置1。在中断响应后,由硬件电路对该位自动清0。,(b)IT0、IT1:外中断请求触发方式控制位IT0(IT1)=1,脉冲方式(后沿负跳有效);IT0(IT1)=0,电平方式(低电平有效);由软件置1或清0,即人工编程。例:SETBIT0;或CLRIT0;(C)TF0、TF1:计数溢出标志位当计数结构产生溢出时,由硬件电路对该位自动置1;当转向中断服务时,再由硬件电路对该位自动清0。计数溢出标志位的使用有两种情况:1)采用中断方式时,作中断请求标志位使用;2)采用查询方式时,作查询状态位来使用,必须利用软件对该位清0。,(2)串行口控制寄存器(SCON)SCON的功能:用于串行数据通信的控制。SCON的字节地址:98H;位地址:9FH98H。SCON的内容及格式如下:,与中断控制有关的控制位共有2位:(a)TI:串行口发送中断请求标志位发送完一帧串行数据后,由硬件电路对该位自动置1,在转向中断服务程序后,用软件对该位清0。(b)RI:串行口接收中断请求标志位接收完一帧数据后,由硬件电路对该位自动置1,在转向,中断服务程序后,用软件对该位清0。TI、RI标志位的使用有两种情况:1)采用中断方式时,作中断请求标志位使用;2)采用查询方式时,作查询状态位来使用;无论采用何种方式,都必须利用软件对该位清0。(3)中断允许控制寄存器(IE)IE的功能:中断系统的开关。IE的字节地址:0A8H;位地址:0AFH0A8H。IE的内容及格式如下:,与中断控制有关的控制位共有6位:(a)EA:中断允许总控制位EA=0:中断总禁止;EA=1:中断总允许;(b)EX0、EX1:外部中断允许控制位EX0、EX1=0:禁止外中断;EX0、EX1=1:允许外中断;(c)ET0、ET1:定时器/计数器中断允许控制位ET0、ET1=0,禁止定时(或计数)中断;ET0、ET1=1,允许定时(或计数)中断;(d)ES:串行中断允许控制位ES=0,禁止串行中断;,ES=1,允许串行中断;注意:1)MCS-51单片机复位后(IE)=00H,即中断系统处于禁止状态;2)单片机在中断响应后不会自动关闭中断,需使用有关指令禁止中断,即以软件方式关闭中断。(4)中断优先级控制寄存器(IP)IP的功能:决定各中断源的优先权。IP的字节地址:0B8H;位地址:0BFH0B8H。IP的内容及格式如下:,与中断控制有关的控制位共有5位:(a)PX0:外部中断0优先级设定位;(b)PT0:定时中断0优先级设定位;(c)PX1:外部中断1优先级设定位;(d)PT1:定时中断1优先级设定位;(e)PS:串行中断优先级设定位;为0的位优先级为低,为1的优先级为高。5.2.3中断优先级控制中断优先级是为中断嵌套服务的。MCS-51单片机具有两级优先级,因此它具备两级中断服务嵌套的功能,其中断优先级的控制原则是:(a)低优先级中断请求不能打断高优先级的中断服务,但高优,先级中断请求可以打断低优先级的中断服务,实现中断嵌套。(b)如一个中断请求已被响应,则同级的其它中断响应将被禁止。即同级不能嵌套。(c)如果同级的多个中断请求同时出现,则按CPU查询次序确定那个中断请求被响应。查询次序:外部中断0定时中断0外部中断1定时中断1串行中断中断优先级控制,除了中断优先级控制寄存器之外,还有两个不可寻址的优先级状态触发器:一个用于指示某一高优先级中断正在进行服务,从而屏蔽其它高优先级中断;另一个用于指示某一低优先级中断正在进行服务,从而屏蔽其它低优先级中断,但不能屏蔽高优先级的中断。,中断初始化与中断控制寄存器状态设置MCS-51单片机的中断系统在使用之前,必须在单片机的应用程序初始化部分进行设置,具体情况如下:(a)外部中断:中断总允许、外中断允许、中断触发方式设定、中断优先级设定(b)定时中断:中断总允许、定时中断允许、中断优先级设定;(c)串行中断:中断总允许、串行中断允许、中断优先级设定。MCS-51单片机中断系统的4个控制寄存器既可以进行字节寻址,又可进行位寻址,对位状态的设置,既可以使用字节操作指令,又可以使用位操作指令。例:设要开放外中断0,则可以使用以下指令:MOVIE,#81H;或SETBEA;SETBEX0;80C51单片机中断系统内部结构图,5.2.4中断响应过程中断响应过程发生在中断查询之后,包括中断响应、中断处理、中断返回三个阶段。因此,必须首先研究中断查询。所谓中断查询就是指CPU通过测试TCON和SCON中各标志位的状态,以确定有没有中断请求发生以及是哪一个中断源提出中断请求的过程。中断请求标志位的置位方式由于单片机中断类型的不同而存在差异。(a)对于外中断,必须通过采样的方法把外中断请求信号锁定在TCON的相应标志位中;(b)对于定时中断和串行中断,可以通过硬件电路直接置位的方法将TCON和SCON中各自的中断请求标志位置“1”。,(1)中断采样(针对外中断)中断请求采样:即如何识别外部中断请求信号并把它锁定在TCON的相应标志位中。采样时刻:在每个机器周期的S5P2(第5状态,第2节拍)时刻,对/INT0(P3.2)和/INT1(P3.3)引脚进行。对于电平方式的外中断请求,采样为高IE0(IE1)0,为低IE0(IE1)1;对于脉冲方式外中断请求,采样先高后低IE0(IE1)1;否则IE0(IE1)0。(2)中断查询中断查询:CPU对中断请求标志位的查询来获悉有无中断请求发生以及是哪一个中断源提出中断请求;,查询次序:按优先级顺序进行;查询时刻:每个机器周期的最后一个状态S6,一旦查到有中断请求发生,接着就从相临的下一个机器周期的S1状态开始进行中断响应。(3)中断响应中断响应的主要内容:由硬件电路自动生成一条长调用指令LCALLaddr16(即程序存储器中相应中断区的入口地址),生成LCALL指令后,就由CPU执行,从而转移到真正的中断服务程序。中断响应是有条件的,并不是查询到的所有中断请求都能被立即响应,当存在下列情况之一时,中断响应被封锁:(a)CPU正处在为一个同级或高级的中断服务中;(b)查询中断请求的机器周期不是当前指令的最后一个机器,周期;(c)当前指令是返回指令(RET,RETI)或访问IE,IP指令。MCS-51单片机对中断查询结果不作记忆,当有新的查询结果出现时,因为以上原因而被拖延的查询结果将不复存在,其中断请求也就不能再被响应了。中断响应的条件:(a)有中断源发出有效的中断请求信号;(b)EA=1,即CPU开总中断;(c)申请中断的中断源的中断允许位为1,即没有屏蔽;(d)中断响应没有被封锁。(4)中断响应时间即指从查询中断请求标志位到转向中断区入口地址所需的,机器周期数。最短响应时间:3个机器周期(1个查询机器周期和2个LCALL指令机器周期);最长响应时间:8个机器周期(2+4+2)。一般的中断响应时间在38个机器周期之间。(5)中断处理即执行中断服务程序的过程。(6)中断返回指CPU在执行完中断服务程序后,返回原来暂停的地方(断点),继续执行原来程序的过程。,中断请求的撤消问题中断响应后,TCON或SCON中的中断请求标志应及时清除,否则就意味着中断请求依然存在,弄不好就会造成中断的重复查询和响应,因此,必须在中断响应后及时清除中断请求信号(即将中断请求标志位清0)。(1)定时中断请求的撤消定时中断的中断请求是由硬件电路自动撤消的(即硬件电路自动把标志位(TF0或TF1)清0),无需用户干预。(2)脉冲方式外部中断请求的撤消外部中断请求的撤消包括两项内容:(a)中断标志位的清0;(b)外部中断请求信号的撤消;,对于脉冲方式的外部中断请求,其标志位(IE0或IE1)的清0是由硬件电路自动完成的;由于中断请求信号是脉冲信号,因此,中断请求信号也是自动撤消的。(3)电平方式外部中断请求的撤消对于电平方式的外部中断请求,其标志位(IE0或IE1)的清0是由硬件电路自动完成的;由于中断请求信号是低电平信号,因此,必须借助外电路将其拉高,否则,在以后的机器周期采样时又会将标志位(IE0或IE1)置“1”,造成重复中断响应。结合硬件电路,只需在中断服务程序中增加两条指令就可在P1.0口线上产生一个负脉冲,将中断请求低电平信号撤消:ORLP1,#01H;P1.0输出高电平ANLP1,#0FEH;P1.0输出低电平,(4)串行中断软件撤消串行中断的标志位TI,RI,硬件电路不会将其自动清0,因为在中断响应后,还需测试TI,RI的状态,以判定是接收还是发送操作,然后才能清除。应使用软件方法进行,加在中断服务程序中。5.2.5中断服务程序中断服务流程(1)现场保护和现场恢复现场保护:为了使中断服务程序的执行不破坏CPU中寄存器或存储单元的原有内容,以免在中断返回后影响主程序的运行,须把CPU中有关寄存器或存储单元的内容推入堆栈中保护起来。这个过程称现场保护。,现场恢复:中断服务结束后,在返回主程序前,把保存的现场内容从堆栈中弹出,以恢复寄存器或存储单元的原有内容。现场保护和现场恢复利用PUSH、POP指令实现,现场保护一定要位于中断处理程序前面,而现场恢复一定要位于中断处理程序后面。(2)开中断和关中断开中断即中断允许,关中断即中断屏蔽。在现场保护和现场恢复的过程中,即使有更高级的中断请求,也不允许中断嵌套。(3)中断处理(4)中断返回利用RETI指令把程序运行从中断服务程序转回到被中断的,主程序上去,这条指令位于中断服务程序的最后一条指令。RETI指令执行时,首先将响应中断时置位的优先级触发器复位,然后将断点地址从堆栈中弹出送PC,接着CPU从断点处重新执行被中断的主程序。,返回,返回,返回,80C51单片机中断系统内部结构图,返回,返回,单片机C语言程序设计,一:C51对标准C的扩展1、C51数据类型,数据类型就是数据的格式,它决定数据的值域范围、占用存储单元的个数及能参与哪种运算。,编写C51程序,先要确定数据类型、储存分区应尽可能采用无符号格式(unsigned)C51中,多字节数据采用“大端对齐”格式,C51数据类型表,在编程时,为了书写方便,经常用简化的缩写形式来定义数据类型。其方法是在源程序开头使用#define语句自定义简化的类型标识符。例如:#defineucharunsignedchar#defineuintunsignedint这样,在编程中,就可以用uchar代替unsignedchar,用uint代替unsignedint来定义变量。,2020/6/7,35,bit定义位变量名字,编译器在位寻址区自动分配该位变量;Sbit声明SFR区位变量的名字和地址,地址是确定的。(或位寻址区变量的某确定位),说明:,sbitCY=0 xD7;,bitflag1=0;,含义:赋值,含义:声明,sfr用于声明字节型(8位)的SFR;sfr16用于声明字型(16位)的SFR。如:sfrP0=0 x80;sfr16DPTR=0 x82;,2、C51数据的存储类型KEILC51完全支持8051单片机的硬件结构,该编译器通过将变量、常量定义成不同的存储类型的方法,将他们定义在不同的存储区中。,经常使用的变量应该置于片内RAM中,要用bdata、data、idata来定义不常使用的变量或规模较大的变量应该置于片外RAM中,要用pdata、xdata来定义,带存储类型的变量的定义的一般格式为数据类型存储类型变量名变量存储类型定义举例:chardatavar1;/*var1定位在内部RAM*/bitbdataflags;/*flags定位在内部RAM的位寻址区*/floatidatax,y,z;/*x,y,z变量定位在内部RAM,但只能采用间址寻址方式*/unsignedintpdatai;/*无符号整型变量i定位在外部RAM,并用MOVXRi访问*/unsignedcharxdatav1044;/*无符号三维数组变量,定位在外部RAM,并占据1044=160字节存储空间*/,如果定义时略去存储类型标志符,编译器会自动选择默认的类型,由SMALL,COMPACT和LARGE存储模式指令限制。,charvar;/SMALL模式时,var定位于data存储区/COMPACT模式时,var定位于pdata存储区/LARGE模式时,var定位于xdata存储区,3、80C51特殊功能寄存器(SFR)的C51定义80C51单片机中,地址范围为80HFFH的单元为SFR寄存器。为了能直接访问这些SFR,KEILCx51提供了一种自主形式的定义方法,这种定义方法与标准C语言不兼容,只适用于对8051系列单片机进行C语言编程。特殊功能寄存器C51定义的一般语法格式如下:sfrsfr_name=intconstant;“sfr”是定义语句的关键字,其后必须跟一个80C51单片机真实存在的特殊功能寄存器名,“=”后面必须是一个整型常数,不允许带有运算符的表达式,是特殊功能寄存“sfr_name”的字节地址,这个常数值的范围必须在SFR地址范围内,位于0 x800 xFF。,例如:sfrSCON=0 x98;/*串口控制寄存器地址98H*/sfrTMOD=0 x89;/*定时/计数器方式控制寄存器地址89H*/80C51系列单片机的特殊功能寄存器的数量与类型不尽相同,因此建议将所有特殊的“sfr”定义放入一个头文件中,该文件应包括MCS-51单片机系列机型中的SFR定义。C51编译器的“reg51.h”头文件就是这样一个文件。对于位寻址的SFR中的位,C51的扩充功能支持特殊位的定义,像SFR一样不与标准C兼容,使用sbit来定义位寻址单元。,第一种格式:sbitbit-name=sfr-nameintconstant;“sbit”是定义语句的关键字,后跟一个寻址位符号名(该位符号名必须是80C51单片机中规定的位名称),“=”后的“sfr-name”必须是已定义过的SFR的名字,“”后的整常数是寻址位在特殊功能寄存器“sfr-name”中的位号,必须是07范围中的数。例如:sfrPSW=0 xD0;/*定义PSW寄存器地址为D0H*/sbitOV=PSW2;/*定义OV位为PSW.2,地址为D2H*/sbitCY=PSW7;/*定义CY位为PSW.7,地址为D7H*/,第二种格式:sbitbit-name=intconstantintconstant;“=”后的intconstant为寻址地址位所在的特殊功能寄存器的字节地址,“”符号后的intconstant为寻址位在特殊功能寄存器中的位号。例如:sbitOV=0 xD02;/*定义OV位地址是D0H字节中的第2位*/sbitCY=0 xD07;/*定义CY位地址是D0H字节中的第7位*/,第三种格式:sbitbit-name=intconstant;“=”后的intconstant为寻址位的绝对位地址。例如:sbitOV=0 xD2;/*定义OV位地址为D2H*/sbitCY=0 xD7;/*定义CY位地址为D7H*/特殊功能位代表了一个独立的定义类,不能与其它位定义和位域互换。,4、80C51并行接口及C51定义80C51系列单片机并行I/O接口除了芯片上的4个I/O口(P0P3)外,还可以在片外扩展I/O口。80C51单片机I/O口与数据存储器统一编址,即把一个I/O口当作数据存储器中的一个单元来看待。使用C51进行编程时,80C51片内的I/O口与片外扩展的I/O可以统一在一个头文件中定义,也可以在程序中(一般在开始的位置)进行定义,其定义方法如下:对于80C51片内I/O口按特殊功能寄存器方法定义。例如:sfrP0=0 x80;/*定义P0口,地址为80H*/sfrP1=0 x90;/*定义P1口,地址为90H*/,对于片外扩展I/O口,则根据硬件译码地址,将其视作为片外数据存储器的一个单元,使用#define语句进行定义。例如:#include#definePORTAXBYTE0 xFFC0absacc.h是C51中绝对地址访问函数的头文件,将PORTA定义为外部I/O口,地址为FFC0H,长度为8位。一旦在头文件或程序中对这些片外I/O口进行定义后,在程序中就可以自由使用变量名与其实际地址的联系,以便使程序员能用软件模拟MCS-51的硬件操作。,5、80C51位变量及C51定义使用C51编程时,定义了位变量后,就可以用定义了的变量来表示80C51的位寻址单元。位变量的C51定义的一般语法格式如下:位类型标识符(bit)位变量名;例如:bitdirection_bit;/*把direction_bit定义为位变量*/bitlook_pointer;/*把look_pointer定义为位变量*/,6、C51常用头文件,#include#include本征函数,如_crol_、_cror_;#include输入输出函数,如scanf、printf;#include数学计算函数,如abs、sin;#include字符串处理函数,如strcpy;#include类型转换及内存分配函数,如atoi;#include绝对地址访问函数,如XBYTE,二中断应用的C语言编程,C51编译器支持在C源程序中直接开发中断程序。中断服务程序是通过按规定语法格式定义的一个函数。中断服务程序的函数定义的语法格式如下:返回值函数名(参数)模式重入interruptmusingninterruptm其中m是中断号(0到31),中断号告诉编译器中断程序的入口地址,中断号对应着IE寄存器中的使能位。,下表给出了对应关系,在进入中断服务程序前的程序中使用一组工作寄存器,进入中断服务程序后,由“usingn”切换到另一组寄存器,中断返回后又恢复到原寄存器组。这样互相切换的两组寄存器中的内容彼此都没有被破坏。为中断程序指定工作寄存器组的缺点是:所有被中断调用的过程都必须使用同一个寄存器组,否则参数传递会发生错误。中断不允许用于外部函数,它对函数目标代码影响如下:当调用函数时,SFR中的ACC,B,DPH,DPL和PSW入栈。如果不使用寄存器组切换,则甚至中断函数所需要的所有工作寄存器都入栈。函数退出前,所有的寄存器内容出栈;,2020/6/7,52,【例】编程实现:上电后,流水灯由下至上依次亮灭并循环。按一次键流水灯方向改变一次。,ORG0000HLJMPMAINORG0003HLJMPINTT0ORG0100HMAIN:MOVIE,#81HSETBIT0MOVSP,#3FHMOVA,#0FEHCLR00HLOOP:MOVP2,ALCALLDELAYJB00H,LOOP1RLALJMPLOOPLOOP1:RRALJMPLOOPINTT0:CPL00HRETIDELAY:END,ucharFlag=0,ScanNum=0 xfevoidmain(void)IE=0 x81;IT0=1;SP=0 x3f;while(1)if(Flag=0)/由下至上亮ScanNum=_crol_(ScanNum,1);P2=ScanNum;else/由上至下亮ScanNum=_cror_(ScanNum,1);P2=ScanNum;DelayMs(500);,voidEx0()interrupt0Flag=Flag;,5.380C51单片机的定时器/计数器,定时方法概述(1)软件定时(a)依靠执行一个循环程序以进行时间延迟;(b)定时精确,无须增加硬件电路,但占有CPU资源。(2)硬件定时硬件电路完成,不占有CPU资源,定时时间长,使用不灵活。(3)可编程定时器定时通过对系统时钟脉冲的计数来实现,使用灵活、方便。,MCS-51单片机有两个定时器/计数器(T/C0,T/C1),均为十六位加法计数结构,分别由TH0,TL0,TH1,TL1两个8位计数器组成。80C51单片机定时器/计数器逻辑结构图。MCS-51单片机的定时器/计数器具有定时和计数功能:(1)计数功能(a)所谓计数:指对外部事件进行计数,外部事件的发生以输入脉冲表示,因此,计数功能的实质是对外来脉冲进行计数。(b)计数输入端:T0(P3.4)、T1(P3.5)。(c)有效计数脉冲:外部输入的脉冲在下降沿有效,进行计数器加1。(d)计数采样时刻:每个机器周期的S5P2(共要2个周期)。,5.3.1定时器/计数器的计数和定时功能,(e)计数时刻:计数采样时刻的下一个机器周期的S3P1。(f)计数脉冲频率:1/24fosc。(2)定时功能定时功能也是通过计数器的计数来实现的。计数脉冲来自内部,每个机器周期产生一个计数脉冲,即每个机器周期计数器加1,计数频率为1/12fosc。5.3.1用于定时器/计数器的控制寄存器定时器/计数器的控制寄存器有3个:TCON、TMOD、IE。(1)定时器控制寄存器(TCON)TCON的功能:用于保存外部中断请求以及定时器/计数器的计数溢出信号。TCON的字节地址:88H;位地址:8FH88H。,TCON的内容及格式如下:,与定时有关的控制位共有4位:(a)TF0、TF1:计数溢出标志位当计数结构产生溢出时,由硬件电路对该位自动置1;当转向中断服务时,再由硬件电路对该位自动清0。计数溢出标志位的使用有两种情况:1)采用中断方式时,作中断请求标志位使用;2)采用查询方式时,作查询状态位来使用,必须利用软件对该位清0。,(b)TR0、TR1:定时器运行控制位TR0、TR1=0,停止T/C工作;TR0、TR1=1,启动T/C工作。该位根据需要以软件方法置1或清0。(2)工作方式控制寄存器(TMOD)TMOD的功能:用于设定两个定时器/计数器的工作方式。TMOD的字节地址:89H,应采用字节传送指令设置其内容。TMOD的内容及格式如下:,与定时有关的控制位共有8位,分两组:,(a)GATE:门控位GATE=0,以运行控制位TR0、TR1启动T/C;GATE=1,以外中断请求信号(/INT1,/INT0)启动T/C。(b)C/T:定时方式或计数方式选择位C/T=0,定时工作方式;C/T=1,计数工作方式。(c)M1M0:工作方式选择位M1M0=00方式0M1M0=01方式1M1M0=10方式2M1M0=11方式3,(3)中断允许寄存器(IE)IE的功能:中断系统的开关。IE的字节地址:0A8H;位地址:0AFH0A8H。IE的内容及格式如下:,与定时有关的控制位共有3位:(a)EA:中断允许总控制位EA=0:中断总禁止;EA=1:中断总允许;(b)ET0、ET1:定时器/计数器中断允许控制位ET0、ET1=0,禁止定时(或计数)中断;ET0、ET1=1,允许定时(或计数)中断;,5.3.3定时工作方式0,(1)电路逻辑结构方式0是13位计数结构的工作方式,其计数器由TH全部8位和TL的低5位构成,TL的高3位不用。,(2)定时和计数应用(a)在方式0下,作计数功能时,计数值范围18192(213),计数可从08191开始。(b)在方式0下,作定时功能时,定时时间计算公式:(213-计数初值)晶振周期12或(213-计数初值)机器周期。注意:1)T/C是可编程的,TH,TL可以按字节寻址。例:MOVTL0,#Data;MOVTH0,#Data;TL0,TH0中的初值可通过指令预置。2)计数脉冲TL5位TH8位TF假设fosc=6MHz,则最长、最短定时时间分别为2s、16384s,例:假设单片机fosc=6MHz,使用定时器1以方式0产生周期为500s的等宽正方波连续脉冲,由P1.0输出,以查询方式完成。解:1)计算计数初值利用定时器/计数器1的定时功能,定时时间250s。假设待求的计数初值为X:则:(213-X)210-6S=25010-6S得:X=8067(十进制),1111110000011(二进制),十六进制表示:高8位0FCH送TH1,低5位03H送TL1。,2)TMOD寄存器初始化,根据以上分析,TMOD寄存器应初始化位00H。3)由T/C1的TCON中TR1位控制其启动,停止:TR1=1启动,TR1=0停止;4)程序设计:ORG0000HLJMPMAINORG0100HMAIN:MOVTMOD,#00H;T/C1方式0MOVTH1,#0FCH;设计数初值MOVTL1,#03H;,MOVIE,#00H;禁止中断SETBTR1;启动定时器LOOP:JNBTF1,LOOP;查询计数溢出否MOVTH1,#0FCH;重置计数初值MOVTL1,#03H;CLRTF1;清计数溢出标志CPLP1.0;输出取反AJMPLOOP;重复循环END思考题:1)如采用中断方式,如何编程?2)如P1.0输出的不是方波,而是矩形波(高电平100s,低电平200s),其它条件不变,如何编程?,#includesbitP1_0=P10;voidmain(void)TMOD=0 x00;TH1=0 xfc;TL1=0 x03;IE=0 x00;TR1=1;for(;)dowhile(!TF1);TH1=0 xfc;TL1=0 x03;TF1=0;P1_0=!P1_0;,5.3.4定时工作方式1,(1)电路逻辑结构方式1是16位计数结构的工作方式,由TH全部8位和TL全部8位构成。,(2)定时和计数应用(a)在方式1下,作计数功能时,计数值范围165536(216),计数可从065535开始。(b)在方式1下,作定时功能时,定时时间计算公式:(216-计数初值)晶振周期12或(216-计数初值)机器周期。注意:1)T/C是可编程的,TH,TL可以按字节寻址。例:MOVTL0,#Data;MOVTH0,#Data;TL0,TH0中的初值可通过指令预置。2)计数脉冲TL8位TH8位TF假设fosc=6MHz,则最长、最短定时时间分别为2s、131ms。,例:假设单片机fosc=6MHz,使用定时器1以方式1产生周期为500s的等宽正方波连续脉冲,由P1.0输出,以中断方式完成。解:1)计算计数初值利用定时器/计数器1的定时功能,定时时间250s。假设待求的计数初值为X:则:(216-X)210-6S=25010-6S得:X=65410(十进制),十六进制表示:FF83H高8位0FFH送TH1,低8位83H送TL1。,2)TMOD寄存器初始化,根据以上分析,TMOD寄存器应初始化位10H。3)由T/C1的TCON中TR1位控制其启动,停止:TR1=1启动,TR1=0停止;4)程序设计:ORG0000H;主程序LJMPMIANORG001BHLJMPLOOP1MAIN:MOVTMOD,#10H;T/C1方式1,MOVTH1,#0FFH;设计数初值MOVTL1,#83H;SETBEA;开总中断SETBET1;T/C1允许中断SETBTR1;启动定时器HERE:SJMP$;等待中断中断服务程序ORG0200H;LOOP1:MOVTH1,#0FFH;重置计数初值MOVTL1,#83H;CPLP1.0;输出取反RETI;中断返回END,#includesbitP1_0=P10;voidmain(void)TMOD=0 x10;/*T/C0工作在定时器非门控制方式1*/P1_0=0;TH1=0 xff;/*预置计数初值*/TL1=0 x83;EA=1;/*CPU中断开放*/ET1=1;/*T/C0中断开放*/TR1=1;/*启动T/C0开始定时*/dowhile(1);/*等待中断*/voidtime(void)interrupt3using1TH1=0 x0ff;TL1=0 x83;P1_0=!P1_0;/*P1.0取反*/,5.3.5定时工作方式2,(1)电路逻辑结构方式2是自动重新加载计数初值工作方式,以TL作计数器,以TH作预置寄存器,初始化时把计数初值分别装入TL和TH中。当计数溢出后,由预置寄存器TH以硬件方法自动给计数器TL重新加载初值。,(2)循环定时和循环计数应用(a)在方式2下,作计数功能时,计数值范围1256(28),计数可从0255开始。(b)在方式2下,作定时功能时,定时时间计算公式:(28-计数初值)晶振周期12或(28-计数初值)机器周期。注意:1)T/C是可编程的,TH,TL可以按字节寻址。例:MOVTL0,#Data;MOVTH0,#Data;TL0,TH0中的初值可通过指令预置。2)计数脉冲TL8位TF假设fosc=6MHz,则最长、最短定时时间分别为2s、512s。,例:假设单片机fosc=6MHz,使用T/C0以方式2产生100s定时,在P1.0输出周期为200s的连续方波脉冲。解:1)计算计数初值利用定时器/计数器0的定时功能,定时时间100s。假设待求的计数初值为X:则:(28-X)210-6S=10010-6S得:X=206(十进制),十六进制表示:CEH0CEH送TH0,0CEH送TL0。,2)TMOD寄存器初始化,根据以上分析,TMOD寄存器应初始化为02H。3)由T/C0的TCON中TR0位控制其启动,停止:TR0=1启动,TR0=0停止;4)程序设计(查询方式)ORG0000H;主程序LJMPMAINMAIN:MOVTMOD,#02H;T/C0方式2MOVTH0,#0CEH;设计数初值MOVTL0,#0CEH;,MOVIE,#00H;禁止中断SETBTR0;启动定

温馨提示

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

评论

0/150

提交评论