您好,欢迎访问三七文档
当前位置:首页 > 电子/通信 > 综合/其它 > 片机应用技术(C语言版)王静霞主编ch4
本章内容定时/计数器C语言的函数中断系统第4章定时与中断系统定时/计数器8051单片机内部有两个16位的可编程定时/计数器,称为T0(T0)和T1(T1)定时/计数器8051定时器/计数器逻辑结构定时/计数器设置定时/计数器工作方式通过对方式寄存器TMOD的设置,确定相应的定时/计数器是定时功能还是计数功能,工作方式以及启动方法。定时/计数器工作方式有四种:方式0、方式1、方式2和方式3。定时/计数器启动方式有两种:软件启动和硬软件共同启动。除了从控制寄存器TCON发出的软件启动信号外,还有外部启动信号引脚,这两个引脚也是单片机的外部中断输入引脚。定时/计数器设置计数初值T0、T1是16位加法计数器,分别由两个8位专用寄存器组成,T0由TH0和TL0组成,T1由TH1和TL1组成。TL0、TL1、TH0、TH1的访问地址依次为8AH8DH,每个寄存器均可被单独访问,因此可以被设置为8位、13位或16位计数器使用。在计数器允许的计数范围内,计数器可以从任何值开始计数,对于加1计数器,当计到最大值时(对于8位计数器,当计数值从255再加1时,计数值变为0),产生溢出。定时/计数器允许用户编程设定开始计数的数值,称为赋初值。初值不同,则计数器产生溢出时,计数个数也不同。例如:对于8位计数器,当初值设为100时,再加1计数156个,计数器就产生溢出;当初值设为200时,再加1计数56个,计数器产生溢出。定时/计数器启动定时/计数器根据设置的定时/计数器启动方式,启动定时/计数器。如果采用软件启动,则需要把控制寄存器中的TR0或TR1置1;如果采用硬软共同启动方式,不仅需要把控制寄存器中的TR0或TR1置1,还需要相应外部启动信号为高电平。定时器的方式寄存器TMOD作用:TMOD用来确定两个定时器的工作方式。低半字节设置定时器T0,高半字节设置定时器T1。字节地址:89H,不可以位寻址。格式:D7D6D5D4D3D2D1D0GATEC/TM1M0GATEC/TM1M0定时器1定时器0各位的含义:C/T:功能选择位。0为定时器方式;1为计数器方式。M1,M0:方式选择位。可以选择为四种工作方式0、1、2、3之1。四种工作方式的区别后面讲解。GATE:门控位。0:只要软件控制位TR0或TR1置1即可启动定时器开始工作;1:只有INT0或INT1引脚为高电平,且TR0或TR1置1时,才能启动相应的定时器开始工作。返回TF0TH0TL012分频OSC中断高8位低5位控制+T0(P3.4)TR0GATEINT0(P3.2)C/T=0C/T=1例如:设定时器T0为定时工作方式,要求用软件启动定时器T0工作,按方式1工作;定时器T1为计数工作方式,要求软件启动,工作方式为方式2。则根据TMOD各位的定义可知,其控制字为:即控制字为61H,其指令形式为:MOVTMOD,#61H格式:D7D6D5D4D3D2D1D0GATEC/TM1M0GATEC/TM1M001100001定时器的控制寄存器TCON作用:TMOD用来控制两个定时器的启动、停止,表明定时器的溢出、中断情况。字节地址:88H,可以位寻址。系统复位时,所有位均清零。格式:D7D6D5D4D3D2D1D0TF1TR1TF0TR0IE1IT1IE0IT0各位的含义:TCON中的低4位与中断有关,在中断章节中讨论。TF1(8FH):定时器1溢出标志。计满后自动置1。TR1(8EH):定时器1运行控制位。由软件清零关闭定时器1。当GATE=0时,TR1软件置1即启动定时器1。(SETBTR1)当GATE=1时,且INT1为高电平时,TR1置1启动定时器1;定时器的四种工作方式方式的选择:根据M1,M0来选择。00:方式001:方式110:方式211:方式3主要特点:方式0:13位定时器。TH0的8位+TL0的低5位方式1:16位定时器。TH0的8位+TL0的8位方式2:能重复置初始值的8位定时器。TL0和TH0必须赋相同的值。方式3:只适用于定时器0,T0被拆成两个独立的8位定时器TL0,TH0。其中:TL0与方式0、1相同,可定时或计数。用定时器T0的GATE、C/T、TR0、TF0、T0、和INT0控制。TH0只可用作简单的内部定时功能。占用T1的控制位TF1、TR1和INT1,启动关闭仅受TR1控制。定时器的方式0、1示意图返回TF0TH0TL012分频OSC中断高8位8位或低5位控制+T0(P3.4)TR0GATEINT0(P3.2)C/T=0C/T=1定时器的方式2示意图TH08位8位TL012分频OSC控制+T0(P3.4)TR0GATEINT0(P3.2)C/T=0C/T=11中断TF00溢出定时器的初始值的计算对于不同的工作方式,计数器位数不同,故最大计数值M也不同:方式0:M=213=8192方式1:M=216=65536方式2:M=28=256方式3:定时器0分为2个8位计数器,每个M均为256。因为定时/计数器是作加1计数,并在计满溢出时产生中断,因此初值X的计算如下:X=M–计数值计算出来的结果X转换为16进制数后分别写入TL0(TL1)、TH0(TH1)。注意!方式0时初始值写入时,对于TL不用的高3位应填入0!用T1、工作方式0实现1秒延时函数,晶振频率为12MHz。方式0采用13位计数器,其最大定时时间为:8192×1s=8.192ms,因此,定时时间不可能象任务7中一样选择50ms,可选择定时时间为5ms,再循环200次。定时时间为5ms,则计数值为5ms/1s=5000,T1的初值为:X=M计数值=81925000=3192=C78H=0110001111000B13位计数器中TL1的高3位未用,填写0,TH1占高8位,所以,X的实际填写值应为:X=0110001100011000B=6318H举例1用T1方式0实现任务7中1秒延时函数如下:voiddelay1s(){unsignedchari;TMOD=0x00;//置T1为工作方式0for(i=0;i0xc8;i++){//设置200次循环次数TH1=0x63;//设置定时器初值TL1=0x18;TR1=1;//启动T1while(!TF1);//查询计数是否溢出,即定时5ms时间到,TF1=1TF1=0;//5ms定时时间到,将定时器溢出标志位TF1清零}}举例1用T1、工作方式2实现1秒延时,晶振频率为12MHz。因工作方式2是8位计数器,其最大定时时间为:256×1s=256s,为实现1秒延时,可选择定时时间为250s,再循环4000次。定时时间选定后,可确定计数值为250,则T1的初值为:X=M计数值=256250=6=6H。采用T1方式2工作,因此,TMOD=0x20。举例2用定时器工作方式2实现的1秒延时函数如下:voiddelay1s(){unsignedinti;//i取值范围为0~4000,因此不能定义成unsignedcharTMOD=0x20;//设置T1为方式2TH1=6;//设置定时器初值,放在for循环之外TL1=6;for(i=0;i4000;i++){//设置4000次循环次数TR1=1;//启动T1while(!TF1);//查询计数是否溢出,即定时250s时间到,TF1=1TF1=0;//250s定时时间到,将定时器溢出标志位TF1清零}}举例2在C语言程序中,子程序的作用是由函数来实现的,函数是C语言的基本组成模块,一个C语言程序就是由若干个模块化的函数组成的。C程序都是由一个主函数main()和若干个子函数构成,有且只有一个主函数,程序由主函数开始执行,主函数根据需要来调用其他函数,其它函数可以有多个。C语言的函数1.标准库函数标准库函数是由C51的编译器提供的,用户不必定义这些函数,可以直接调用。KEILC51编译器提供了100多个库函数供我们使用。常用的C51库函数包括一般I/O口函数、访问SFR地址函数等,在C51编译环境中,以头文件的形式给出。2.用户自定义函数用户自定义函数是用户根据需要自行编写的函数,它必须先定义之后才能被调用。函数分类和定义函数定义的一般形式是:函数类型函数名(形式参数表)形式参数说明{局部变量定义函数体语句}其中,“函数类型”说明了自定义函数返回值的类型。“函数名”是自定义函数的名字。“形式参数表”给出函数被调用时传递数据的形式参数,形式参数的类型必须要加以说明。ANSIC标准允许在形式参数表中对形式参数的类型进行说明。如果定义的是无参数函数,可以没有形式参数表,但是圆括号不能省略。“局部变量定义”是对在函数内部使用的局部变量进行定义。“函数体语句”是为完成函数的特定功能而设置的语句。函数分类和定义函数调用就是在一个函数体中引用另外一个已经定义的函数,前者称为主调用函数,后者称为被调用函数,函数调用的一般格式为:函数名(实际参数列表);对于有参数类型的函数,若实际参数列表中有多个实参,则各参数之间用逗号隔开。实参与形参顺序对应,个数应相等,类型应一致。函数调用在一个函数中调用另一个函数需要具备如下条件:(1)被调用函数必须是已经存在的函数(库函数或者用户自己已经定义的函数。如果函数定义在调用之后,那么必须在调用之前(一般在程序头部)对函数进行声明。(2)如果程序使用了库函数,则要在程序的开头用#include预处理命令将调用函数所需要的信息包含在本文件中。如果不是在本文件中定义的函数,那么在程序开始要用extern修饰符进行函数原型说明。函数调用中断是指通过硬件来改变CPU的运行方向。计算机在执行程序的过程中,外部设备向CPU发出中断请求信号,要求CPU暂时中断当前程序的执行而转去执行相应的处理程序,待处理程序执行完毕后,再继续执行原来被中断的程序。这种程序在执行过程中由于外界的原因而被中间打断的情况称为“中断”。什么是中断(1)中断服务程序:CPU响应中断后,转去执行相应的处理程序,该处理程序通常称之为中断服务程序。(2)主程序:原来正常运行的程序称为主程序。(3)断点:主程序被断开的位置(或地址)称为断点。(4)中断源:引起中断的原因,或能发出中断申请的来源,称为中断源。(5)中断请求:中断源要求服务的请求称为中断请求(或中断申请。中断基本概念同步工作异常处理实时处理中断特点中断系统的结构+IT0=0IT0=1____INT0T0IT1=0IT1=1____INT1T1TXRXTCONIEIE0TF0IE1TF1TIRIEX0ET0EX1ET1ESEAIPPX01111100000PSPT1PX1PT0SCON中断标志源允许总允许优先级硬件查询低级中断请求PC高级中断请求PC矢量地址矢量地址自然优先级自然优先级MCS-51中断系统内部结构示意图MCS-51系列单片机中断源序号中断源说明1外部中断0请求由P3.2引脚输入,通过IT0位(TCON.0)来决定是低电平有效还是下降沿有效。一旦输入信号有效,即向CPU申请中断,并建立IE0(TCON.1)中断标志。任务9中采用下降沿有效,由按键产生下降沿。2外部中断1请求由P3.3引脚输入,通过IT1位(TCON.2)来决定是低电平有效还是下降沿有效。一旦输入信号有效,即向CPU申请中断,并建立IE1(TCON.3)中断标志。3TF0T0溢出中断请求当T0产生溢出时,T0溢出中断标志位TF0(TCON.5)置位(由硬件自动执行),请求中断处理。4TF1T1溢出中断请求当T1产生溢出时,T1溢出中断标志位TF1(TCON.7)置位(由硬件自动执行),请求中断处理。5RI或TI串行口中断请求当接收或发送完一个串行帧时,内部串行口中断请求标志位RI(SCON.0)或TI(SCON.1)置位(由硬件自动执行),请求中断。中断标志中断标志位位名称说明TF1T1溢出中断标志TCON.7T1被启动计数后,从初值开始加1计数,计满溢出后由硬件置位TF1,同时向CPU发出中断请求,此标志一直保持到CPU响应中断后才由硬件自动清0。也可由软件
本文标题:片机应用技术(C语言版)王静霞主编ch4
链接地址:https://www.777doc.com/doc-3967481 .html