第5章-MCS-51的定时器计数器.复习课程_第1页
第5章-MCS-51的定时器计数器.复习课程_第2页
第5章-MCS-51的定时器计数器.复习课程_第3页
第5章-MCS-51的定时器计数器.复习课程_第4页
第5章-MCS-51的定时器计数器.复习课程_第5页
已阅读5页,还剩42页未读 继续免费阅读

下载本文档

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

文档简介

第5章-MCS-51的定时器计数器.5.1定时/计数器的结构图4.4定时/计数器的结构框图5.2定时/计数器的功能T0和T1增量式、下降沿计数各位全都为1时,再输入一个脉冲溢出→回零TF0或TF1置位,发中断申请定时与计数的不同:时钟脉冲信号定时,内部的时钟振荡器计数,外部引脚

1.计数功能原理对外部事件计数计数脉冲来自引脚T0(P3.4)或T1(P3.5)负跳变(由1变成0)时,计数值增加

1对外部输入脉冲的要求被采样的电平至少要维持一个机器周期,否则会漏计数最高计数频率:晶振频率的1/242.定时功能原理通过计数实现计数脉冲内部时钟脉冲每个机器周期,计数值加1定时时间=计数值×机器周期5.3定时/计数器的工作方式和控制寄存器1.方式寄存器TMOD2.控制寄存器TCON位D7D6D5D4D3D2D1D0字节地址TMODGATEC/TM1M0GATEC/TM1M089H位D7D6D5D4D3D2D1D0字节地址TCONTF1TR1TF0TR0IE1IT1IE0IT088H不可位寻址可位寻址1.方式寄存器TMOD位D7D6D5D4D3D2D1D0字节地址TMODGATEC/TM1M0GATEC/TM1M089H表4.2定时/计数器工作方式设置表M1M0工作方式功能说明00013位定时器/计数器(TH的8位和TL的低5位)

01116位定时器/计数器102自动重装入初值的8位定时器/计数器

113T0分成两个独立的8位定时器/计数器T1在方式3时停止工作T1T0C/T定时器方式或计数器方式选择位C/T=1,计数器C/T=0,定时器GATE门控标志位GATE=1TR0/TR1=1且/INT0(或/INT1)高电平,才工作用于测量/INT0(或/INT1)端出现的正脉冲的宽度GATE=0TR0/TR1=1,就工作2.控制寄存器TCON位D7D6D5D4D3D2D1D0字节地址TCONTF1TR1TF0TR0IE1IT1IE0IT088HTF0/TF1溢出标志位计满溢出时,由硬件置1中断响应后,硬件自动清0TR1/TR0运行控制位软件置1后,开始工作系统复位时,清0查询方式时,此位可作状态查询注意:查询后,由软件清05.4定时/计数器的4种工作方式T04种:方式0、1、2、3T13种:方式0、1、2设置为方式3,将停止工作作为串行通信口的波特率发生器(方式2)1.方式0TMOD的M1M0为0013位计数:TL0的低5位(高3位未用)+TH0的8位TL0的低5位溢出时,向TH0进位TH0溢出时,置位TCON中的TF0标志,发出中断请求计数个数M与计数初值NM=213-N213:溢出时的计数值定时时间tt=M×机器周期=(213-N)×机器周期N=213-t/机器周期计数初值N=8191~0计数范围:1~81922.方式1TMOD的M1M0为0116位:TL0+TH0计数个数M与计数初值N:M=216-N定时时间t=M×机器周期计数初值N=65535~0;计数范围:1~655363.方式2TMOD的M1M0为10自动重装初值的8位计数方式:TL0:8位定时/计数器;TH0:8位初值寄存器计数个数M与计数初值N:M=28-N定时时间t=M×机器周期计数初值N=255~0;计数范围:1~256较精确的脉冲信号发生器T1在方式2,作为波特率发生器定时器/计数器的初值计算设计数器计数的最大值:M计数值:N初值:XX的计算方法计数状态:X=M-N定时状态:X=M-定时时间/TT=12÷晶振频率4.方式3TMOD的M1M0为11只适用于T0T0分成为两个独立的8位计数器TL0、TH0TL0:定时器和计数器占用T0的控制位TH0:定时器仅借用T1的TR1、TF1不受门控;启、停受TR1控制溢出时,置位TF1T1:只能作定时器,波特率发生器原则上,仍可按方式0、1、2工作不能使用TR1和TF1,也不能发出中断请求方式设定后,自动运行;要停止工作,只需设定为方式3T1溢出判断通过在线“飞读”TH1和TL1,判断是否溢出。串行通信应用中T1:串行口波特率发生器,工作于方式2T0:工作于方式3可充分利用单片机的定时/计数器资源。5.5定时/计数器的设计举例51单片机的定时/计数器,常工作于中断场合应用设计步骤(1)计算定时/计数器的初值(2)主程序中,初始化定时/计数器的初始化中断初始化TH0、TL0、TH1、TL1、TMOD、TCON、IP、IE(3)中断服务程序设计[例1]方式1利用定时/计数器T0的方式1,产生一个50Hz的方波,此方波由P1.0引脚输出,晶振频率为12MHz。思路:f=50Hz,则其周期为T=1/50=0.02s计满0.01s,P1.0输出0,再计满0.01S,P1.0输出1T0产生0.01s定时实现方法查询方式:查TF0标志中断方式:中断服务程序解题步骤(1)定时0.01s的初值计算机器周期=12÷12MHz=1μs0.01s内T0需要计数N次N=0.01s÷1μs=0.01/(10-6)=10000若用方式1的16位计数器,T0的初值X为 X=M-N=216-10000=55536(2)T0的TMOD的初始化GATE=0,C/T=0,M1M0=01,即:T0的方式1(3)实现方法查询的方法和中断的方法实现方法(1)查询方式查询T0的TF0:为1,定时时间到,对P1.0取反操作缺点:占用CPU ORG 0000H LJMP MAIN ;跳转到主程序 ORG 0100H ;主程序MAIN: MOV TMOD,#01H ;置T0工作于方式1LOOP: MOV TH0,#0D8H ;装入计数初值 MOV TL0,#0F0H SETB TR0 ;启动定时器T0

JNB TF0,$ ;TF0=0,定时时间未到,等待 CLR TF0 ;TF0=1,定时时间到,清TF0 CPL P1.0 ;P1.0取反输出 SJMP LOOP END(2)中断方式定时到,TF0=1,向CPU申请中断,CPU响应中断后,执行中断程序,中断程序中对P1.0取反操作 ORG 0000H LJMP MAIN ;跳转到主程序 ORG 000BH ;T0的中断入口地址 LJMP T0_INT ;转向中断服务程序 ORG 0100HMAIN: MOV TMOD,#01H ;置T0工作于方式1 MOV TH0,#0D8H ;装入计数初值 MOV TL0,#0F0H

SETB ET0 ;T0开中断 SETB EA ;CPU开中断 SETB TR0 ;启动T0 … … ;继续执行主程序其它部分 SJMP $ ;等待中断T0_INT: ;P1.0取反输出 CPLP1.0

;重装入计数初值 MOVTH0,#0D8H MOVTL0,#0F0H

;中断返回 RETI ENDT0_INT: ;重装入计数初值 MOVTH0,#0D8H MOVTL0,#0F0H ;P1.0取反输出 CPLP1.0

;中断返回 RETI END[例2]方式1利用定时/计数器T1产生一个1Hz的方波,此方波由P0.0引脚输出,晶振频率为6MHz思路:f=1Hz,T=1s此题转化为由定时器产生:0.5s定时机器周期=12/6MHz=2*10-6s65536*2*10-6s=0.131072s=131072μs0.5s定时,实现方法T1:方式1完成100ms定时在中断程序里设置一个“软时钟”,即一个CLOCK=30H内存单元每中断一次,CLOCK加1,CLOCK累计5次(即0.5s),对P0.0取反操作解题步骤:(1)确定初值N计数值M=t/Tcy=100×10-3/(2×10-6)=50000N=216-M=65536-50000=15536=3CB0H即应将3CH送入TH1、0B0送入TL1中。(2)初始化控制字TMODGATE=0,C/T=0,M1M0=01,即:T1的方式1;实现程序:;**************伪指令************************* LED BIT P0.0 CLOCK DATA 30H;**************主程序入口地址************************* ORG 0000H LJMP MAIN ;跳转至主程序;**************中断入口地址************************* ORG 001BH LJMP T1_INT ;跳转至T1中断服务程序 ORG 0030HMAIN: ;**************中断初始化************************* MOV TMOD,#10H MOV TH1,#3CH ;装入计数初值 MOV TL1,#0B0H SETB ET1 ;开放T1中断

SETB EA ;开放总中断

SETB TR1 ;启动T1时钟

;… … ;继续执行主程序其它部分 SJMP $ ;等待中断;**************T1中断服务程序*************************T1_INT: PUSH ACC ;保护现场 PUSH PSW CLR TR1 MOV TH1,#3CH ;重新装入计数初值 MOV TL1,#0B0H SETB TR1 INC CLOCK ;软时钟加1 MOV A,CLOCK CJNE A,#5,TMPLTMPL: JC RETURN ;不到0.5s返回 CPL LED ;到0.5s闪烁变换 MOV CLOCK,#0 ;软时钟清零RETURN:

POP PSW POP ACC

RETI END[例3]方式2利用定时/计数器T0产生一个1kHz的方波,此方波由P0.0引脚输出,晶振频率为6MHz机器周期=12/6MHz=2*10-6s思路:f=1kHz,T=1ms此题转化为由定时器产生:500μs定时500μs定时,实现方法T0:方式2即自动重装初值的8位计数方式开放T0中断,在中断程序里对P0.0取反操作解题步骤:(1)计数初值N计数值M=t/Tcy=500×10-6/(2×10-6)=250N=28-M=256-250=06H06H送入TH0和TL0(2)初始化控制字TMODGATE=0,C/T=0,M1M0=10,即:T0的方式2;实现程序:;**************伪指令************************* LED BIT P0.0;**************主程序入口地址************************* ORG 0000H LJMP MAIN ;跳转至主程序;**************中断入口地址************************* ORG 00BH LJMP T0_INT ;跳转至T1中断服务程序 ORG 0100HMAIN: ;**************中断初始化************************* MOV TMOD,#02H MOV TH0,#06H ;装入计数初值 MOV TL0,#06H

SETB ET0 ;开放T0中断 SETB EA ;开放总中断

SETB TR0 ;启动T0时钟

;… … ;继续执行主程序其它部分 SJMP $ ;等待中断;**************T0中断服务程序*************************T0_INT: CPL LED ;不需重新装入计数初值

RETI END定时/计数器门控位GATE的应用当GATE=0时定时/计数器的运行只受控于:TR0(或TR1)当GATE=1时定时/计数器的运行受控于:TR0(和TR1)和INT0(或INT1)在TR0=1(或TR1=1)时若INT0=1(或INT1=1),则启动计数;若INT0=0(或INT1=0),则停止计数。可以利用这一点测试外部输入脉冲的宽度。[例4]GATE=1利用T0的门控位GATE,编程实现检测外部输入脉冲的宽度。/INT0(P3.2)TMOD=#09HTH0=TL0=#00h等待INT0变低电平后TR0=1T0开始计时计时开始计时停止T0停止计时源程序:ORG 00hMOV TMOD,#09H ;设置T0为方式1,定时方式工作, ;GATE=1MOV TL0,#00H ;设计数初值为0MOV TH0,#00H MOV R0,#30H ;地址指针送R0JB P3.2,$ ;等待INT0变低SETB TR0 ;启动定时器JNB P3.2,$ ;等待INT0变高电平JB P3.2,$ ;启动计数,并等待INT0再次变低CLR TR0 ;停止计数器MOV @R0,TL0 ;读取计数值INC R0MOV @R0,TH0 ;读取计数值SJMP $END寻找待测脉冲的下降沿不足:如果机器周期为1/12MHZ,则这种方法的最大被测脉冲宽度为65.536微秒由于靠软件启动和停止计数,有一定的测量误差,其中最大可能的误差由指令的时序确定。

ORG 0000H LJMP MAIN ORG 000BH LJMP DVT0 ORG 0030HMAIN: ……..

CLR R1 ……..DVT0: INC R1 RETI定时/计数器用于外部中断扩展扩展方法将定时/计数器设置为计数器方式计数初值设定为满程将待扩展的外部中断源接到定时/计数器的外部计数引脚从该引脚输入一个下降沿信号,计数器加1后便产生定时/计数器溢出中断。[例5]定时/计数器扩展外部中断利用T0扩展一个外部中断源步骤将T0设置为计数器方式,按方式2工作TH0、TL0的初值均为0FFHT0允许中断,CPU开放中断初始化程序

MOV TMOD,#06H ;置T0为计数器方式2 MOV TL0,#0FFH ;置计数初值 MOV TH0,#0FFH SETB EA ;CPU开中断 SETB ET0 ;允许T0中断 SETB TR0 ;启动T0工作 [例6]定时/计数器对外部事件计数利用T1对外部事件计数要求计1000个脉冲后,点亮指示灯指示灯低电平点亮晶振频率为12MHz解题步骤:计数方式计数初值N计数值M=1000N=216-M=65536-1000=FC18HGATE=0,C/T=1,M1M0=01 led bitP1.0 ;红灯 org 00h ;主程序入口 ljmp main org 001Bh ;定时器1中断入口地址

ljmp i_t1 org 030hmain: setb led_red ;点亮红灯 mov tmod,#51h ;T1工作在方式1,用于计数 mov TH1,#0FCh ;设定时器初值 mov TL1,#018h ;设定时器初值 setb et1 ;中断T1允许 setb ea ;总中断允许 setb TR1 ;定时器T1开始计数 sjmp $ ;等待中断i_t1: clr led clr TR1 ;定时器T1计数停止

reti ;中断返回 end小结两个T/C定时/计数四种工作方式:重点是方式1、2两个控制寄存器:TMOD、TCON初值的计算典型应用作业:P123:5.8、5.9、5.10[例7]方式3只适用于:定时器T02个8位定时器/计数器TH0借用了定时器T1的溢出中断标志TF1运行控制位TR1[例]假设有一个用户系统中,已经使用了两个外部中断源置定时器T1于方式2,作串行口波特率发生器用P1.0口输出一个5Hz的方波现要求:再增加一个外部中断源假设:晶振频率6MHz解题思路(1)在不增加其它硬件开销时,可把定时器/计数器T0置于工作方式3,利用外部引脚T0端作附加的外部中断输入端(2)把TL0预置为0FFH,这样在T0端出现由1至0的负跳变时,TL0立即溢出,申请中断,相当于边沿激活的外部中断源。(3)在方式3下,TH0总是作8位定时器用,可以靠它来控制由P1.0输出的5kHz方波。(4)置定时器T1于方式2,作串行口波特率发生器解题步骤(1)由TH0控制,使P1.0输出的电平每隔100μs发生一次变化,TH0中的初始值X=M-N=256-100/2=206(2)TL0预置为0FFH,这样在T0端出现由1至0的负跳变时,TL0立即溢出,申请中断(3)

温馨提示

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

评论

0/150

提交评论