好文档就是一把金锄头!
欢迎来到金锄头文库![会员中心]
电子文档交易市场
安卓APP | ios版本
电子文档交易市场
安卓APP | ios版本

单片机讲义1(第六章定时器计数器)概要PPT课件.ppt

69页
  • 卖家[上传人]:嘀嘀
  • 文档编号:263860630
  • 上传时间:2022-03-10
  • 文档格式:PPT
  • 文档大小:683KB
  • / 69 举报 版权申诉 马上下载
  • 文本预览
  • 下载提示
  • 常见问题
    • 第6章 MCS51的 定时器/计数器 定时器和计数器两种工作模式 (1)计数器工作模式 (2)定时器工作模式 MCS5l单片机的定时器计数器具有4种工作方式(方式0、方式1、方式2和方式3),其控制字均在相应的特殊功能寄存器中,通过对它的特殊功能寄存器的编程,可方便地选择定时器计数器2种工作模式和4种工作方式61 定时器计数器的结构定时器计数器结构 特殊功能寄存器TMOD用于选择定时器计数器T0、T1的工作模式和工作方式 特殊功能寄存器TCON用于控制T0、T1的启动和停止计数,同时包含了T0、T1的状态 TMOD、TCON这两个寄存器的内容由软件设置 单片机复位时,两个寄存器的所有位都被清0定时器计数器T0、T1的逻辑结构 80C51中有两个16位加计数的定时器计数器T0、T1 (l)计数器 两个8位加计数器TLi、THi组成,在不同的工作方式下,其组成结构不同 (2)计数输入 可选择两种计数输入,由 管理 (3)控制逻辑 (4)计数溢出管理 溢出中断请求标志位TFi 6.1.1 工作方式控制寄存器TMODTMODE的功能:用于选择定时器计数器的工作方式和控制模式格式: (1)GATE门控位(控制方式选择) GATE=0时,计数器由内部TRi(i=0,1)位控制启、停。

      GATE=1时,计数器由内部TRi位和外中断引脚确 (i=0,1)控制启、停2) 计数器模式和定时器模式选择位 =0,为定时器模式对振荡时钟12分频脉冲计数 =1,为计数器模式计数器对外部输入脉冲计数(即:引脚T0(P34)或T1(P35)对外部脉冲(负跳变)计数) (3)M1、M0计数器的工作方式选择位 M1、M0共有4种编码,对应于4种工作方式的选择,如表61所示6.1.2 定时器/计数器控制寄存器TCON功能:用于控制计数器的启、停和计数溢出的标志设置 格式:(l)TF1、TF0计数溢出标志位 当计数器计数溢出时,该位置1,表示计数溢出并请求中断进入中断服务程序后由硬件自动清0,使用查询方式时,查询有效后,应以软件方法及时将该位清0 (硬件置位软件清零) (2)TR1、TR0计数内部启、停控制位 TR1(TR0)=1,启动定时器计数器工作 TR1(TR0)=0,停止定时器计数器工作该位可由软件置1或清0 6.1.3 定时器/计数器的操作 定时器计数器的方式设定、启停控制等,都通过对特殊功能寄存器TMOD和TCON的操作来完成 【例】设定T0为方式1的计数方式,并由内部TR0控制启停,其控制字为0101B,设 T1为复位状态,故设定控制字为0000 0101B=05H。

      使用以下指令完成方式设定 MOV TMOD,05H 或 MOV 89H,05H TCON可位寻址操作对T0的启、停控制通过以下位操作指令完成 SETB TR0 或 SETB 8CH ;启动T0计数 CLR TR0 或 CLR 8CH ;停止T0计数62 定时器计数器的工作方式 定时器/计数器按计数器的组成不同,分为4种工作方式如右图所示:方式0:13位计数方式相当于有5位预分频的8位计数方式方式1:16位计数方式方式2:计数常数可自动重装的8位计数方式方式3:两个8位计数器与波特率发生器的工作方式6.2.1 方式 0 6.2.2 方式1 6.2.3 方式 26.2.4 方式 3 在方式3下,T1只作波特率发生器在这样情况下,T1将TF1、TR1资源出借给T0使用因此,在方式3下,T0可以构成两个独立的计数器结构,如图66(a)和图66(b)所示 TL0构成一个完整的8位定时器计数器,而TH0则是一个仅能对fOSC/12脉冲计数的8位定时器说明:方式3是为了增加1个附加的8位定时器计数器而提供的,从而使MCS51具有3个定时器计数器、方式3只适用于定时器计数器T0,定时器计数器T1不能工作在方式3。

      T1处于方式3时相当于TR1=0,停止计数(此时T1可用来作串行口波特率产生器)1工作方式3下的T0 当TMOD的低2位为11时,T0的工作方式被选为方式3,各引脚与T0的逻辑关系框图如下图所示 定时器计数器T0分为2个独立的8位计数器:TL0和TH0TL0使用T0的状态控制位GATE、TR0、 ,而TH0被固定为1个8位定时器(不能为外部计数模式),并使用定时器T1的状态控制位TR1和TF1,同时占用定时器T1的中断请求源TF12. T0工作在方式3下T1的各种工作方式一般情况下,当T1用作串行口的波特率发生器时,T0才工作在方式3T0处于工作方式3时,T1可定为方式0、方式1和方式2,用来作为串行口的波特率发生器,或不需要中断的场合1)T1工作在方式0 T1的控制字中M1、M0=00时,T1工作在方式0T1是一个13位的定时器/计数器 (2)T1作在方式1T1的控制字中M1、M0=01时,T1工作在方式1T1是一个16位的定时器/计数器 (3)T1工作在方式2 T1的控制字中M1、M0=10时,T1的工作方式为方式 2 在这种方式下T1是一个8位的定时器/计数器4)T1工作在方式3 T1的控制字中M1、M0=11时,T1停止计数。

      6.3 定时器计数器对输入信号的要求 (1)当被选定为定时器工作模式时 计数输入信号是内部时钟脉冲,每个机器周期产生1个脉冲使计数器增1因此,定时器计数器的输入脉冲的周期与机器周期一样,为时钟振荡频率的112当采用12 MHZ频率的晶体时,计数速率为1MHZ,输入脉冲的周期间隔为 ls由于定时的精度决定于输入脉冲的周期,因此当需要高分辨率的定时时,应尽量选用频率较高的晶体 (2)当定时器计数器用作计数器时 计数脉冲来自相应的外部输入引脚T0或T1当输入信号产生由1至0的跳变(即负跳变)时,计数器的值增1每个机器周期的S5P2期间,对外部输入引脚进行采样如在第一个机器周期中采得的值为1,而在下一个周期中采得的值为0,则在紧跟着的再下一个机器周期S3P1的期间,计数器加1由于确认1次负跳变要花2个机器周期,即24个振荡周期,因此外部输入的计数脉冲的最高频率为系统振荡器频率的124为了确保某一给定的电平在变化之前能被采样1次,则这一电平至少要保持1个机器周期 6.4 定时器计数器的编程和应用 6.4.1 方式1的应用 【例 61】假设系统时钟频率采用6 MHz,要在P1.0上输出 1个周期为 2 ms的方波。

      【解】方波的周期用定时器T0来确定,即在T0中设置1个初值,在初值的基础上进行计数,每隔lms计数溢出1次,即T0每隔lms产生1次中断,CPU响应中断后,在中断服务程序中对P1.0引脚信号取反T0中断入口地址为000BH为此要做如下几步工作:(l)计算初值设:需要装入T0的初值为X,则有: 初值的计算公式为: 其中:n=13、16、8 (由计数器的的工作方式来决定n 的取值) X= X=65036 将X化为十六进制,即 X=FEOCH=1111 1110 0000 1100B 所以,T0的初值为: TH0=0FEH TL0=0CH (2)初始化程序设计 初始化程序包括定时器初始化和中断系统初始化,主要是对寄存器IP、IE、TCON、TMOD的相应位进行正确的设置,并将计数初值送入定时器中 (3)程序设计 ORG 0000H RESET:AJMP MAIN ;转主程序 ORG 000BH ;T0的中断入口地址 AJMP IT0P ;转T0中断处理程序IT0P ORG 0100HMAIN: MOV SP,60H ;设堆栈指针 MOV TMOD,01H ;设置T0为方式1 0000 0 0 01 ACALL PT0M0 ;调用子程序PT0M0HERE:AJMP HERE ;自身跳转PT0M0:MOV TL0,0CH ;对T0置定时初值(先低后高) MOV TH0,0FEH SETB TR0 ;启动T0开始计时 SETB ET0 ;允许T0计数溢出中断 SETB EA ;CPU开中断 RET IT0P:MOV TL0,0CH ;T0中断服务子程序,T0置初值 MOV TH0,0FEH CPL P10 ;P10的状态取反 RETI 如果CPU不做其它工作,也可以采用查询的方式进行控制,查询方式的参考程序如下: MOV TMOD,01H ;设置T0为方式1 0000 0 0 01 CLR TF0LOOP:SETB TR0 ;启动T0开始定时 (书中这里有错) MOV TL0,0CH ;T0置初值 MOV TH0,0FEHLOOP1:JNB TF0,LOOP1 ;查询TF0标志是否为1,如为1, 说明T0溢出,则往下执行 CLR TR0 ;T0溢出,关闭T0 CPL P10 ;P10的状态求反 SJMP LOOP 【例 62】假设系统时钟为6MHZ,编写定时器T0产生1s定时的程序。

      【解】(1)定时器T0工作方式的确定(1S的确定) 因定时时间较长,采用哪一种工作方式合适呢?由前面介绍的定时器的各种工作方式的特性,可以计算出: 方式0 (n=13)最长可定时16.384 ms: 方式1 (n=16)最长可定时131.072 ms: 方式2 (n=8)最长可定时512 s 由上可见,可选方式 1,每隔100 ms中断1次,中断10次为1s (2)计算计数初值(100 ms的定时初值) X= 所以:X=15 536=3CB0H因此:TH0=3CH, TL0=B0H(3)10次计数的实现 对于中断10次计数,可使T0工作在定时方式,采用循环程序的方法实现 (4)程序设计 ORG 0000HRESET:LJMP MAIN ;上电,转主程序入口MAIN 0RG 000BH ;T0的中断入口地址 LJMP IT0P ;转T0中断处理程序ITOP ORG 1000HMAIN: MOV SP,#60H ;设堆栈指针 M0V B,0AH ;设循环次数1次 MOV TMOD,01H ;设T0工作在方式1 0000 0 0 01 MOV TL0,0B0H ;给T0设初值(先低后高) MOV TH0,03CHLOOP: SETB TR0 ;启动T0开始定时 SETB ET0 ;允许T0中断 SETB EA ;CPU开放中断HERE:SJMP HERE ;等待中断IT0P: MOV TL0,0B0H ;T0中断服务子程序, 重新给T0装入初值 MOV TH0,3CH DJNZ B,LOOP CLR TR0 ;1s定时时间到,停止T0工作 RETI 6.4.2 方式2的应用 【例63】当T0(P34)引脚上发生负跳变时,从P10引脚上输出1个周期为lms的方波。

      如图所示假设系统时钟为6 MHz)【分析】(1)T0工作方式选择 T0引脚上如何引发负跳变? T0定义为方式1计数器模式,T0初值为0FFFFH,可满足要求2)T1定义为方式2定时器模式(方式2 (n=8)最长可定时512 s)在T0引脚产生l次负跳变后,启动T1每500s产生1次中断,在中断服务程序中对P10引脚信号求反,使P10产生周期为1ms的方波解】 (3)计算T1的初值 设T1的初值为X:则 (4)程序设计 ORG 0000H RESET:LJMP MAIN ;复位入口转主程序 ORG 000BH ;T0中断程序入口地址 LJMP IT0P ;转T0中断服务程序 ORG 001BH ;T1中断程序入口地址 LJMP IT1P ;转T1中断服务程序 ORG 0100HMAIN:MOV SP,60H ;堆栈指针 ACALL PT0M2 ;调用对T0,T1初始化子程序LOOP:MOV C,F0 ;标志位送进位位 JNC LOOP ;Cy=0则转T0产生过中断了 吗?产生过中断,则F0=l , T0没有产生过中断,则跳到 LOOP,等待T0中断) SETB TR1 ;启动T1定时 SETB ET1 ;允许T1中断HERE:AJMP HERE ;等待T1中断PT0M2:MOV TMOD,。

      点击阅读更多内容
      关于金锄头网 - 版权申诉 - 免责声明 - 诚邀英才 - 联系我们
      手机版 | 川公网安备 51140202000112号 | 经营许可证(蜀ICP备13022795号)
      ©2008-2016 by Sichuan Goldhoe Inc. All Rights Reserved.