微机原理及应用 第6章 MCS-51单片机的定时、计数器.ppt_第1页
微机原理及应用 第6章 MCS-51单片机的定时、计数器.ppt_第2页
微机原理及应用 第6章 MCS-51单片机的定时、计数器.ppt_第3页
微机原理及应用 第6章 MCS-51单片机的定时、计数器.ppt_第4页
微机原理及应用 第6章 MCS-51单片机的定时、计数器.ppt_第5页
已阅读5页,还剩28页未读 继续免费阅读

下载本文档

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

文档简介

1、第6章 MCS-51单片机的定时/计数器,复 习,1、SFR使用的注意事项? 字节地址、位地址;位定义;区分控制位和标志位;标志位的清除。 2、中断的处理过程? 采样;查询;响应;处理;返回。 3、主程序设计及结构框架? 中断子程序设计及结构框架? 4、MCS-51中断源有哪些?,第6章 MCS-51单片机的定时/计数器,6.1 定时器的定时与计数功能 6.2 定时器的有关特殊功能寄存器 6.3 定时器的四种工作方式 6.4 定时器的应用,6.1 定时器的定时与计数功能,1 定时器的结构 2 定时器的计数功能 3 定时器的定时功能,1 定时器的结构,定时器的实质是16位加1计数器,1 定时器的

2、结构,加1计数器输入的计数脉冲有两个来源,一个是由系统的时钟振荡器输出脉冲经12分频后送来;一个是T0或T1引脚输入的外部脉冲源。 每来一个脉冲计数器加1,当加到计数器为全1时,再输入一个脉冲就使计数器回零,且计数器的溢出使TCON中TF0或TF1置1,向CPU发出中断请求(定时/计数器中断允许时)。 如果定时/计数器工作于定时模式,则表示定时时间已到;如果工作于计数模式,则表示计数值已满。 可见,由溢出时计数器的值减去计数初值才是加1计数器的计数值。,2 定时器的计数功能,设置为计数器模式时。在每个机器周期的S5P2期间采样T0、T1引脚电平。 当晶振频率为12MHz时,最高计数频率不超过1

3、/2MHz,即计数脉冲的周期要大于2 s。,3 定时器的定时功能,设置为定时器模式时:加1计数器是对内部机器周期计数(1个机器周期等于12个振荡周期,即计数频率为晶振频率的1/12)。 计数值N乘以机器周期Tcy就是定时时间t 。,6.2 定时器的有关寄存器,6.2.1 TCON定时器控制/状态寄存器,1)启动控制位TR0、TR1 =0,停止定时器工作;=1,启动定时器工作 例:启动T0:SETBTR0 停止T0:CLRTR0,2)溢出中断标志位TF0、TF1 定时器溢出时,由硬件置位TFx=1; 若中断开放,向CPU请求中断,CPU响应Tx中断后,自动清0 TFx。,若中断禁止,可用软件检测

4、TFx(判跳),必须软件清0。 WAIT:JBC TF0,NEXT;检测T0是否溢出,溢出,TF0清0。 SJMPWAIT ;未溢出,继续检测 NEXT: ;处理溢出,JNB TF0, $ ;检测T0是否溢出,未溢出,继续检测 CLR TF0;溢出,TF0清0. ;处理溢出.,6.2.2 TMOD定时器方式寄存器(89H),2)功能选择位C/T: =0,定时功能,计数内部机器周期脉冲; =1,计数功能,计数引脚T0(T1)输入的负脉冲。,3)方式选择位M1、M0:4种工作方式:13/16/8位,1)门控方式选择位GATE : =0,非门控方式(内部启动): 只要TRx=1,就启动定时器工作;

5、只要TRx=0,就停止定时器工作。 =1,门控方式(外启动):只有当TRx=1且引脚INTx=1才启动定时器。,确定定时器工作方式指令:MOV TMOD,#方式字;字节访问 例:设T0用方式2非门控定时,T1用方式1门控计数。 MOVTMOD,#,11010010B,6.2.3 定时器的数据寄存器 TH1 TL1、TH0 TL08DH 8CH、8BH 8AH,可预置初值的16位加1计数器 TH0、TL0、 TH1、TL1 预置T0初值指令:MOVTH0,#XH MOVTL0,#XL,任何时候都可对它的当前值进行读/写操作, 它们都只能字节寻址。,6.3 定时器的四种工作方式,6.3.1 定时/

6、计数器的工作方式0 方式0为13位计数,由TL0的低5位(高3位未用)和TH0的8位组成加1计数器。TL0的低5位溢出时向TH0进位,TH0溢出时,置位TCON中的TF0标志,向CPU发出中断请求。,定时器模式时有:Nt/Tcy 计数初值计算的公式为: 定时器的初值还可以采用计数个数直接取补法获得。 计数模式时,计数脉冲是T0引脚上的外部脉冲。,门控位GATE具有特殊的作用。当GATE=0时,经反相后使 或门输出为1,此时仅由TR0控制与门的开启,与门输出1 时,控制开关接通,计数开始;当GATE=1时,由外中断引脚信号控制或门的输出,此时控制与门的开启由外中断引脚信号和TR0共同控制。当TR

7、0=1时,外中断引脚信号引脚的高电平启动计数,外中断引脚信号引脚的低电平停止计数。这种方式常用来测量外中断引脚上正脉冲的宽度。,6.3.2 定时/计数器的工作方式1 方式1的计数位数是16位,由TL0作为低8位、TH0作为高8位,组成了16位加1计数器 。,计数个数N与计数初值X的关系为:,6.3.3 定时/计数器的工作方式2 方式2为自动重装初值的8位计数方式。,工作方式2特别适合于用作较精确的脉冲信号发生器。如:串行口波特率发生器的使用,计数个数N与计数初值X的关系为:,6.3.4 定时/计数器的工作方式3 方式3只适用于定时/计数器T0,将T0分成为两个独立的8位计数器TL0和TH0 。

8、,TL0作为定时/计数器:TL0占用原T0控制位及相关引脚:其操作和功能与方式0、1基本相同 TH0仅作定时器:TH0占用T1控制位: TR1、TF1及T1中断源。,6.3.4 定时/计数器的工作方式3 定时器T0工作于方式3时, T1只能工作在方式0、1、2,计数溢出时输出送串行口,此时T1作为串行口波特率发生器使用。以确定串行通讯的速率。 启动:设置好工作方式0、1、2时相当于TR1=1,T1便自动开始运行; 停止:当设置为工作方式3时相当于TR1=0, T1停止计数。,6.4 定时器的应用,1、定时器的初始化编程 2、定时器的溢出处理编程格式 3、定时器的应用举例,1、定时器初始化编程,

9、使用定时器工作之前,先写入方式、控制寄存器,确定好定时器工作方式:,MOV TMOD,# 方式字;启动方式选择(内外共同启动/内启动) 功能选择(计数/定时) 位数选择 (8/13/16位) MOV THx,#XH;计算时间常数X, MOV TLx,#XL ;Tx时间常数初值装入数据寄存器 , (SETB EA) ;开Tx中断 (SETB ETx) SETB TRx ;启动控制Tx定时器(启动/停止),定时器初始化编程:在主程序中进行,.计算时间常数X(计算初值),计数功能:X= 2n -计数值n:13/16/8 定时功能:X= 2n - t/T t:定时时间s 、T:机器周期s,由于计数器是

10、加1计数器,并在益处时产生中断请求, 因此不能将计数值送入计数器作为初值,而应送入计数值的补码数作为初值,计数器运行之前,需要预先给定初值,.预置初值,方式0 MOVTHx,#X高8位 MOVTLx,#X低5位,方式1 MOVTHx,#X高8位 MOVTLx,#X低8位,方式2 MOVTHx,#X8位 MOVTLx,#X8位,方式3 MOVTH0,#X8位 MOVTL0,#Y8位,2、 溢出处理编程格式及初值恢复方式(自动重装/软件重装),1)查询方式:先查询定时器溢出标志,再进行溢出处理。 ;定时器初始化 WAIT:JBC TFx,PT ;检测溢出标志 SJMP WAIT PT:MOVTHx

11、,#XH ;软件恢复初值,重装时间常数 MOVTLx,#XL ;溢出处理 SJMPWAIT,2)中断方式:初始化后执行其他任务,中断服务程序中处理溢出 ORG0000H LJMPMAIN ORG000BH(001BH);T0(T1)中断入口 LJMPPTS MAIN:;初始化后执行其他程序 PTS:MOVTHx,#XH;软件重装时间常数 MOVTLx,#XL ;溢出中断服务程序 RETI,3、定时器的应用举例,【例6-2、3】 :设fosc=12MHz。由P1.0输出周期为2ms的等宽度连续方波,使用T1的方式0、1。,解:每隔1ms改变一次P1.0的输出状态。用T1非门控方式定时。 计算时间

12、常数:方式1:X = 216 - t/T = 216 -1000/1 = FC18H,(1)查询方式: ORG0000H START:MOVTMOD, #10H;(主程序开始)定时器T1工作方式1 CLRP1.0;设置方波的起始状态 MOVTL1, #18H MOVTH1, #0FCH;送初值,保证定时时间为1ms SETBTR1;启动定时器 LOOP:JNBTF1, $;查询是否溢出,等待1ms定时到 MOVTL1, #18H;溢出处理 MOVTH1, #0FCH;再送计数初值,保证定时时间始终为1ms CLRTF1;清溢出标志,以便下次判断 CPLP1.0;改变P1.0的状态 SJMPLO

13、OP;产生连续的方波 END,方式0:X = 213 - t/T = 213 -1000/1 = 1C18H,0000 0000B MOVTL0,#18H MOVTH0,#0E0H 。 MOVTL0,#18H MOVTH0,#0E0H,(2)中断方式,ORG0000H AJMPSTART;跳转主程序 ORG 001BH LJMPPITO1;跳转中断服务程序 ORG 0100H START:MOVSP, #60H;堆栈初始化 MOVTMOD, #10H;(主程序开始)定时器T1工作方式1 MOVTH1, #0FCH;设置计数初值 MOVTL1, #18H CLRP1.0;设置方波的起始状态 SE

14、TBEA;开中断 SETBET1 SETBTR1;启动定时器 SJMP$;等待中断 PITO1:MOVTL1, #18H MOVTH1, #0FCH;再送计数初值,保证定时时间始终为1ms CPLP1.0;输出方波 RETI;中断返回 END,00000000B MOVTL0,#18H MOVTH0,#0E0H MOVTL0,#18H MOVTH0,#0E0H,解:计算初值:方式2:X = 28 - 100 = 156 = 9CH TMOD初始化: GATE=0 , C/T=1, M1M0=10B,ORG0000H AJMPSTART;转主程序 ORG0100H START:MOVIE, #0

15、0H;(主程序开始)关中断 MOVTMOD, #06H;设置定时器T0方式2计数 MOVTH0, #9CH;设置计数初值 MOVTL0, #9CH SETBTR0;启动计数 LOOP:JBCTF0, LOOP1;查询计数是否计满溢出 SJMPLOOP LOOP1:INCA;累加器加1 SJMPLOOP END,【例6-4】用T0以工作方式2计数,每计100次进行累加器加1操作。,解:计算初值:方式2:X = 28 t(fosc/12)=256-100(6/12)=CEH TMOD初始化: GATE=0 , C/T=0, M1M0=10B,ORG0000H START:MOV TMOD, #02

16、H;定时器T0工作方式2 CLRP1.0;设置方波的起始状态 MOVTL0, #0CEH ;送计数初值, MOVTH0, #0CEH; 保证定时时间始终为100s SETBTR0;启动定时器 LOOP:JNBTF0, $;等待100s定时到 CLRTF0;清溢出标志,以便下次判断 CPLP1.0;改变P1.0的状态 SJMPLOOP;产生连续的方波 END,【例6-5】用T0以工作方式2产生5kHz的连续方波,并由P1.0输出。设fosc=6MHz,查询方式。,解:频率=每秒钟内T0输入的脉冲数 T0:计数方式2,T1:定时方式1 计算基准初值:T1定时方式1: X = 216 t(fosc/

17、12) =65536-125000(6/12) =0BDCH TMOD初始化: T1:GATE=0 , C/T=0,M1M0=01B T0:GATE=0 , C/T=1,M1M0=10B,【例6-7】用单片机的定时器设计一个工频计,并用二极管以二进制形式显示所测频率。设fosc=6MHz,ORG0000H AJMPMAIN ORG001BH AJMPT_1 ORG0100H MAIN:MOVSP, #60H;堆栈初始化 MOVP1,#00;测量前显示0 MOVTMOD, #16H; T0计数方式2,定时器T1定时方式1 MOVTH0, #00H;设置T0计数初值 MOVTL0, #00H MO

18、VTH1, #0BH;设置T1定时初值125ms MOVTL1, #0DCH MOVR3,#8;设置软件计数器 SETBEA;开中断 SETBET1 ORLTCON,#0101000B;同时启动定时器T1和计数器T0 SJMP$;等待中断,T_1:DJNZR3,NEXT;1s时间未到则中断返回,继续定时 ANLTCON,#10001111B;1s定时到,同时关闭T1、T0 MOVA,TL0;读出频率值到A CPLA;取反,低电平点亮二极管 MOVP1,A;送P1口进行显示 MOVTH0, #00H;重新设置T0计数初值 MOVTL0, #00H MOVTH1, #0BH;重新设置T1定时初值1

19、25ms MOVTL1, #0DCH MOVR3,#8;重新设置软件计数器 ORLTCON,#0101000B;同时启动定时器T1和计数器T0 RETI;中断返回 EXIT:MOVTH1, #0BH; 1s未到,重新设置T1定时初值125ms MOVTL1, #0DCH RETI;中断返回 END,解: INT1引脚输入被检测信号,记录在正脉冲的时间内包含 机器脉冲个数。设fosc=12MHz,使用门控位,定时方式1 1)设脉宽小于65.5ms 等待查询INT1,正脉冲过后,读出TH1TL1,送给R3R2。,START:MOV TMOD,#90H MOV TL1,#0H MOV TH1,#0H WAIT1:JBP3.3,WAIT1 SETB TR1 WAIT2 :JNBP3.3,WAIT2 WAIT3 : JBP3.3,WAIT3 CLRTR1 MOVR2,TL1 MOVR3,TH1 ,门控方式测量正脉冲宽度,2)设脉宽大于65.5ms,中断方式记录TH1TL1溢出中断次数。,计算脉宽的子程序的计算式如下: 脉宽t = (R4 216 + R3 R2 ) T(T为机器周期),ORG 0000H AJMP MAIN ORG 001BH INCR4 ;记录T1溢出次数 RETI ORG 0100H MAIN:MO

温馨提示

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

评论

0/150

提交评论