实验2定时器实验.doc_第1页
实验2定时器实验.doc_第2页
实验2定时器实验.doc_第3页
实验2定时器实验.doc_第4页
实验2定时器实验.doc_第5页
已阅读5页,还剩3页未读 继续免费阅读

下载本文档

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

文档简介

验2 定时器实验【实验目的】 学习单片机的定时器及中断的使用 学习单片机编程及keil C的使用【实验原理】1 程序介绍本实验例子通过定时器实现在P1.0口输出一个方波实验。图2-1 MCS-51定时/计数器结构2 MCS-51定时/计数器MCS-51的单片机内有两个16位可编程的定时/计数器,结构如图2-1所示,定时器T0由特性功能寄存器TL0(低8位)和TH0(高8位)构成,定时器T1由特性功能寄存器TL1(低8位)和TH1(高8位)构成。特殊功能寄存器TMOD控制定时寄存器的工作方式,TCON则用于控制定时器T0和T1的启动和停止计数,同时管理定时器T0和T1的溢出标志等。2.1 TMOD寄存器介绍定时/计数器的方式控制字TMOD,字节地址为89H,其格式如表2-1:表2-1 TMOD寄存器D7D6D5D4D3D2D1D0GATAM1M0GATAM1M0T1方式字段T0方式字段低四位是定时/计数器T0的方式控制字段,高四位是定时/计数器T1的方式控制字段。其中M1、M0为工作方式选择位,为定时器和计数器选择位,GATE为门控位。MCS-51的定时/计数器共有四种工作方式,下面我们逐个进行介绍。 工作方式0当M1,M0=00时,定时/计数器处于工作方式0;在该方式下定时/计数器0与定时/计数器1完全相同,我们以定时/计数器0作介绍,工作方式0的内部结构如图2-2所示。工作方式0是13位计数结构的工作方式,其计数器由TH的全部8位和TL的低5位构成。当=0时,为定时工作方式。当=1时,为计数工作方式。不管是定时器还是计数器工作方式,当TL的低5位溢出时,都会向TH进位,而全部13位计数器溢出时,则会向定时/计数器溢出标志位TF0进位。GATA位的状态决定定时器运行控制取决于TR0一个条件还是TR0和INT0这两个条件。当GATA=1时,运行控制由TR0控制。当GATA=0时,运行控制由TR0和INT0两个条件共同控制,TR0是确定定时/计数器的运行控制位,由软件置位或清“0”。TF0是定时/计数器的溢出状态标志,溢出时由硬件置位,TF0溢出中断被CPU响应时,转入中断时硬件清“0”,TF0也可由程序查询和清“0”。图2-2 定时/计数器工作方式0在该工作方式下,计数器的计数值范围是:1至8192(213)当为定时工作方式时,定时时间的计算公式为:(213-计数初值)晶振周期12或(213-计数初值)机器周期如果单片机的晶振选为6.000MHz,则最小定时时间为:213-(213-1) 1/610-612=210-6(s)=2(us) 工作方式1当M1,M0=01时,定时/计数器处于工作方式1,在该方式下定时/计数器0与定时/计数器1完全相同,我们仍以定时/计数器0作介绍。工作方式1的内部结构如图2-3所示:图2-3 定时/计数器工作方式1方式1与方式0的区别仅在于计数器的位数不同,方式0为13位,而方式1为16位,由TH0作高8位,TL0作低8位,有关控制状态字(GATA、TF0、TR0)和方式0相同。在该工作方式下,计数器的计数值范围是:1-65536(216)当为定时工作方式时,定时时间的计算公式为:(216计数初值)晶振周期12或(216计数初值)机器周期如果单片机的晶振选为6.000MHz,则最小定时时间为:213(2161)1/610-612=210-6(s)=2(us) 工作方式2当M1M0=10时,定时/计数器处于工作方式2。在该方式下定时/计数器0与定时/计数器1完全相同,我们仍以定时/计数器0作介绍。工作方式2的内部结构如图2-4所示:图2-4 定时/计数器工作方式2工作方式0和1的最大特点就是计数溢出后,计数器为全0,在循环定时或循环计数应用时就存在需要反复设置初值的问题,这给程序设计带来许多不便,同时也会影响计时精度。工作方式2就针对这个问题而设置,它具有自动重装载功能,即自动加载计数初值。在这种工作方式中,16位计数器分为两部分,即以TL0为计数器,以TH0作为预置寄存器,初始化时把计数初值分别加载至TL0和TH0中,当计数溢出时,不再象方式0和方式1那样需要“人工干预”,由软件重新赋值,而是由预置寄存器TH以硬件方法自动给计数器TL0重新加载。程序初始化时,给TL0和TH0同时赋以初值,当TL0计数溢出时,置位TF0的同时把预置寄存器TH0中的初值加载给TL0,TL0重新计数。如此反复,这样省去了程序不断需给计数器赋值的麻烦,而且计数准确度也提高了。但这种方式也有其不利的一面,计数值有限,最大只能到255。这种工作方式很适合于那些重复计数的应用场合。例如我们可以通过这样的计数方式产生中断,从而产生一个固定频率的脉冲。也可以当作串行数据通信的波特率发送器使用。 工作方式3当M1M0=11时,定时/计数器处于工作方式3,内部结构图如图2-5所示。图2-5 定时/计数器T0工作方式3在该方式下,定时/计数器0被拆成两个独立的8位计数器TL0和TH0。其中TL0既可以作计数器使用,也可以作为定时器使用,定时/计数器0的各控制位和引脚信号全归它使用。其功能和操作与方式0或方式1完全相同。TH0只能作为简单的定时器使用,而且由于定时/计数器0的控制位已被TL0占用,因此只能借用定时/计数器1的控制位TR1和TF1,也就是以计数溢出去置位TF1,TR1则负责控制TH0定时的启动和停止。由于TL0既能作定时器也能作计数器使用,而TH0只能作定时器使用而不能作计数器使用,因此在方式3下,定时/计数器0可以构成二个定时器或者一个定时器和一个计数器。如果定时/计数器0工作于方式3,那么定时/计数器1的工作方式就会受到一定的限制,因为它的一些控制位已被定时/计数器借用,只能工作在方式0、方式1或方式2下,如图2-6所示:图2-6 定时/计数器T0工作方式3下T2的工作方式在这种情况下,定时/计数器1通常作为串行口的波特率发生器使用,以确定串行通信的速率,因为已没有TF1被定时/计数器0借用了,只能把计数溢出直接送给串行口。当作波特率发生器使用时,只需设置好工作方式,即可自动运行。如要停止它的工作,需送入一个把它设置为方式3的方式控制字即可,这是因为定时/计数器1本身就不能工作在方式3,如硬把它设置为方式3,自然会停止工作。2.2 TCON寄存器介绍定时器控制积存器TCON,字节地址为88H,位地址为88H8FH,其格式如表2-2所示:表2-2 TCON寄存器TCOND7D6D5D4D3D2D1D0TF1TR1TF0TR0IE1IT1IE0IT0位地址8FH8EH8DH8CH8BH8AH89H88HTF1:定时器T1的溢出中断申请位。T1被允许计数后,从初值开始加1,当产生溢出时TF1=1,向CPU请求中断,直到CPU响应该中断时才由硬件清0(也可由查询程序清0).TR1:TF0:定时器T0的溢出中断申请位。T0被允许计数后,从初值开始加1,当产生溢出时TF0=1,向CPU请求中断,直到CPU响应该中断时才由硬件清0(也可由查询程序清0).TR0:IE1:外部边沿触发中断1请求标志,其功能和操作类似于TF0。IT1:外部中断1类型控制位,通过软件设置或清楚,用于控制外中断的触发信号类型。IT1=1,边沿触发。IT=0是电平触发。IE0:外部边沿触发中断0请求标志,其功能和操作类似于IE1。IT0:外部中断0类型控制位,通过软件设置或清楚,用于控制外中断的触发信号类型。其功能和操作类似于IE1。3 MCS-51的中断系统中断是指计算机在执行某一程序的过程中, 由于计算机系统内、 外的某种原因, 而必须中止原程序的执行,转去执行相应的处理程序, 待处理结束之后, 再回来继续执行被中止的原程序的过程。3.1 MCS-51的中断结构由图2-7可知,MCS-51有5个中断源,两个中断优先级控制,可实现两个中断服务嵌套。当CPU支持中断屏蔽指令后,可将一部分或所有的中断关断,只有打开相应的中断控制位后,方可接收相应的中断请求。程序设置中断的允许或屏蔽,也可设置中断的优先级。图2-7 MCS-51中断系统结构3.2 MCS-51的中断源8051有5个中断源,两个外部中断INT0(P3.2)和INT1(P3.3)、三个内部中断(两个片内定时/计数器溢出中断TF0和TF1,一个串行口中断TI或RI),这几个中断源由TCON和SCON两个特殊功能寄存器进行控制。TCON寄存器我们在上面已经介绍,SCON是串行口控制寄存器,结构如表2-3所示:表2-3 SCON寄存器SCOND7D6D5D4D3D2D1D0-TIRI位地址 99H98HTI:MCS-51串行口的发送中断标志,在串行口以方式0发送时,每当发送完8位数据,由硬件置位。如果以方式1、方式2或方式3发送时,在发送停止位的开始时TI被置1,TI=1表示串行发送器正向CPU发出中断请求,向串行口的数据缓冲器SBUF写入一个数据后就立即启动发送器继续发送。但是CPU响应中断请求后,转向执行中断服务程序时,并不清零TI,TI必须由用户的中断服务程序清“0”,即中断服务程序必须有“CLR TI”或“ANL SCON, #0FDH”等指令来清零TI。RI:串行口接收中断标志.若串行口接收器允许接收,并以方式0工作,每当接收到8位数据时,RI被置1,若以方式1、2、3方式工作,当接收到半个停止位时,TI被置1,当串行口一方式2或3方式工作,且当SM2=1时,仅当接收到第9位数据RB8为1后,同时还要在接收到半个停止位时,RI被置1。RI为1表示串行口接收器正向CPU申请中断。同样RI标志由用户的软件清“0”。3.3 中断处理流程CPU响应中断请求后,就立即转入执行中断服务程序。不同的中断源、不同的中断要求可能有不同的中断处理方法,但它们的处理流程一般都如下所述。 现场保护和现场恢复中断是在执行其它任务的过程中转去执行临时的任务,为了在执行完中断服务程序后,回头执行原先的程序时,知道程序原来在何处打断的,各有关寄存器的内容如何,就必须在转入执行中断服务程序前,将这些内容和状态进行备份即保护现场。中断服务程序完成后,要继续执行原先的程序,就需把保存的现场内容从堆栈中弹出,恢复寄存器和存储单元的原有内容,这就是现场恢复。 中断打开和中断关闭在中断处理进行过程中,可能又有新的中断请求到来,但是现场保护和现场恢复的操作是不允许被打扰的,否则保护和恢复的过程就可能使数据出错,为此在进行现场保护和现场恢复的过程中,必须关闭总中断,屏蔽其它所有的中断,待这个操作完成后再打开总中断,以便实现中断嵌套。 中断服务程序中断服务程序就是执行中断处理的具体内容,一般以子程序的形式出现,所有的中断都要转去执行中断服务程序,进行中断服务。 中断返回中断返回就是被程序运行从中断服务程序转回到原工作程序上来。在MCS-51单片机中,中断返回是通过一条专门的指令实现的。 4 程序分析 中断入口程序编写Keil Cx51编译器支持在C语言程序中直接编写8051单片机的中断服务函数程序,从而减轻了采用汇编语言编写中断服务程序的繁琐程度。Keil Cx51编译器对函数进行了扩展,增加了一个扩展关键字interrupt,它是函数定义时的一个选项,加上这个选项即可以将一个函数定义成中断服务函数。它定义中断服务函数的一般形式为:函数类型 函数名(形式参数表) interrupt n using n关键字interrupt后面的n是终端号。N的取值范围为031,编译器重8*n+3处产生中断向量表,具体终端号n和中断向量表取决于8051系列单片机型号,常用中断源和中断向量表如表2-4所示:表2-4 常用中断号与中断向量表如我们要定义定时器0中断,则可以做如下定义:void T0Intr() interrupt 1 / 定时器T0中断入口 函数执行体 定时器初始化如果我们要使用定时器,则必须要先对定时器进行初始化,其示例代码如下: TMOD = 0x02; / 定时器0选择模式2 TH0 = TL0 = 256-(MCU_FREQUENCY/MCU_TIMES/10); / 初始值 ET0 = 1; / 使能定时器0中断 EA = 1; / 使能全局中断【实验步骤】第一步启动Keil,新建一个工程,如图2-8所示:图2-8 keil主界面第二步新建一个Timer.C,并加入到工程中,输入如下内容: #include #define MCU_FREQUENCY 12000 /MCU主频,用于计算延时,为 /了常量计算准确,用KHz表示#define MCU_TIMES 12 /每指令周期所需的时钟周期 /标准51核MCU为12sbit TIMER_OUTPUR = P10;void T0Intr() interrupt 1 / 定时器T0中断入口

温馨提示

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

评论

0/150

提交评论