MCS51单片机定时计数器.ppt_第1页
MCS51单片机定时计数器.ppt_第2页
MCS51单片机定时计数器.ppt_第3页
MCS51单片机定时计数器.ppt_第4页
MCS51单片机定时计数器.ppt_第5页
已阅读5页,还剩39页未读 继续免费阅读

下载本文档

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

文档简介

1、定时/计数器的结构 定时/计数器的工作方式 定时/计数器的应用 单片机音乐,第6章定时/记数器,本章内容,Single Chip Microcomputer,概述,通常采用以下三种方法来实现定时或计数: 1硬件法 硬件定时功能完全由硬件电路完成,不占用CPU时间。但当要求改变定时时间时,只能通过改变电路中的元件参数来实现,很不灵活。 2软件法 软件定时是执行一段循环程序来进行时间延时,优点是无额外的硬件开销,时间比较精确。但牺牲了CPU的时间。 3可编程定时器计数器,MSC-51单片机定时/计数器的结构,返回,定时电路集成在芯片中,称为定时器/计数器。MCS-51的单片机内有两个16位可编程的

2、定时器/计数器,分别称为定时器/计数器0和定时器/计数器1,它们具有四种工作方式,其控制字和状态均在相应的特殊功能寄存器中,通过对控制寄存器的编程,就可方便地选择适当的工作方式。,图-:定时/计数器结构,定时器/计数器的控制寄存器,1工作方式控制寄存器(TMOD),GATE:门控位。GATE = 0 启动不受 /INT0或 /INT1的控制;GATE = 1 启动受 /INT0 或 /INT1 的控制。 C/ : 外部计数器 / 定时器方式选择位。C/ = 0 定时方式;C/ = 1 计数方式。 M1M0:工作模式选择位。 M1 M0 模式 说明 0 0 0 13位定时/计数器,高八位TH(7

3、 0)+ 低五位TL(4 0) 0 1 1 16位定时/计数器,TH(7 0)+ TL(7 0) 1 0 2 8位计数初值自动重装,TL(7 0) TH(7 0) 1 1 3 T0运行,而T1停止工作,8位定时/计数。,定时/计数器控制寄存器(TCON),TR0:定时 / 计数器0运行控制位。软件置位,软件复位。与GATE有关,分两种情况: GATE = 0 时:若TR0 = 1,开启T0计数工作;若TR0 = 0,停止T0计数。 GATE = 1 时:若TR0 = 1 且/INT0 = 1时,开启T0计数; 若TR0 = 1 但 /INT0 = 0,则不能开启T0计数。 若TR0 = 0,

4、停止T0计数。 TR1:定时 / 计数器1运行控制位。用法与TR0类似。,定时器/计数器的工作方式,定时/计数器工作方式,工作方式0是13位计数结构的工作方式,其计数器由TH的全部8位和TL的低5位构成,TL的高3位没有使用。当C/T=0时,多路开关接通振荡脉冲的12分频输出,13位计数器以次进行计数。这就是定时工作方式。当C/T=1时,多路开关接通计数引脚(To),外部计数脉冲由银南脚To输入。当计数脉冲发生负跳变时,计数器加1,这就是我们常称的计数工作方式,图-2:定时/计数器工作方式0逻辑结构,在工作方式0下,计数器的计数值由下式确定: 213-X=8192-X 计数值范围是: 1819

5、2(213) 定时器的定时值由下式确定: T=N*Tcy=(8192-X)*Tcy,2.定时/计数器工作方式1,当M1,M0=01时,定时/计数器处于工作方式1,此时,定时/及数器的等效电路如图所示,可以看出,方式0和方式1的区别仅在于计数器的位数不同,方式0为13位,方式1则为16位,由TH0作为高8位,TL0为低8位,有关控制状态字与方式0相同。则只需将工作方式0的计算公式中的213改为216就可得到工作方式1的计数值计算公式和定时时间计算公式。,图-:定时/计数器工作方式逻辑结构,3定时/计数器工作方式2,当M1,M0=10时,定时/计数器处于工作方式2,此时,定时/及数器的等效电路如图

6、所示,图-:定时/计数器工作方式逻辑结构,具有自动重装载功能,即自动加载计数初值 ,在这种工作方式中,16位计数器分为两部分,以TL0为计数器,以TH0作为预置寄存器 ,当计数溢出时 ,TH以硬件方法自动给计数器TL0重新加载 。,工作在方式下,计数器的计数值由下式确定: 28-X=256-X 计数范围为: 1256 定时器的定时值由下式确定: T=N*Tcy=(256-X)*Tcy,定时/计数器工作方式,当M1,M0=10时,定时/计数器处于工作方式2,此时,定时/及数器的等效电路如图所示,图-5:定时/计数器工作方式3等效电路,工作方式3只适用于定时/计数器T0。当T0工作在方式3时,TH

7、0和TL0被分为两个独立的8位计数器。TL0可作为定时器或计数器使用,占用了T0本身的控制信号TF0和TR0。TH0只能作为定时器使用,且占用了定时/计数器T1的两个控制信号TR1和TF1。 当T0工作于方式3时,T1只能工作在方式0、方式1或方式2,并且由于已没有计数溢出标志位TF1可供使用,只能把计数溢出直接送给串行口,作串行口的波特率发生器使用。等效电路图如下,图-:方式下的作为波特率发生器等效电路,TH1 (8位),TL1 (8位或5位),12分频,OSC,TL1 (8位),TH1 (8位),12分频,OSC,C/T=0,C/T=1,C/T=0,C/T=1,串行口,串行口,T1(P3.

8、5),T1(P3.5),T1工作方式0(或1),T1工作方式2,定时/计数器应用举例,在使用定时/计数器时,应做好四件事:设置TMOD以选择工作方式;计算并设置计数初值THX,TLX;设置IE、IP以规定中断的开放/禁止及优先级;设置TCON以启动/停止定时/计数器的工作。,工作方式的应用 【例】设单片机晶振频率fosc=6MHZ,使用定时器1以方式0产生周期为600s的等宽方波脉冲,并由P1.7输出,以查询方式完成。 解:(1)计算计数初值欲产生周期为600s的等宽方波脉冲,只需在P1.7端以300s为周期交替输出高低电平即可,因此定时时间应为300s。设待求计数初值为N,则: (213-N

9、)210-6=30010-6 N=8042=1F6AH0001111101101010B 将低5位01010B=0A写入TL1,将高8位有效值11111011B=FBH写入TH1中。,(2)TMOD初始化 为把定时/计数器1设定为方式0,则M1M0=00。为实现定时功能应使C/=0,为实现定时器启动应使GATE=0,因此设定工作方式控制寄存器TMOD=00H。 (3)由TR1启动和停止定时器 TR1=1为启动,TR1=0为停止 参考程序如下: ORG 1000H START: MOV TCON,#00H ;清TCON MOV TMOD,#00H ;工作方式设定 MOV TH1,#0FBH ;计

10、数初值设定 MOV TL1,#0AH,MOV IE,00H ;关中断 SETB TR1 ;启动TR1 LOOP0: JBC TF1,LOOP1 ;查询是否溢出 SJMP LOOP0 LOOP1: MOV TH1,#0FBH ;重设初值 MOV TL1,#0AH CPL P1.7 ;输出取反 SJMP LOOP0 END,工作方式应用 【例】已知某生产线的传送带上不断地有产品单向传送,产品之间有较大间隔,如图6-6所示。使用光电开关统计一定时间内的产品个数。假定红灯亮时停止统计,红灯灭时才在上次统计结果的基础上继续统计,试用单片机定时/计数器T1的方式1完成该项产品的计数任务。 解:(1) 初始

11、化: GATE=1, C/T=1, M0M1=01,故TMOD=11010000B=0D0H,TCON=00 (2)T1在方式1时, 溢出产生中断, 且计数器回零, 故在中断服务程序中, 需用R0计数中断次数,以保护累积计数结果。 (3) 启动T1计数, 开T1中断。,参考程序如下: ORG 0000H AJMP START ORG 001BH AJMP T1INT ORG 0100H START: MOV SP, #60H MOV TCON, #00H MOV TMOD, #0D0H MOV TH1, #0FFH,图-:产品传送带原理图,MOV TL1, #0FFH MOV R0, #00H

12、 MOV P3, #28H ;置P3.5,P3.3为输入状态 SETB TR1 SETB ET1 SETB EA MAIN: LCALL DISP ORG 0A00H,T1INT: INC R0 MOV TH1, #0FFH MOV TL1, #0FFH RETI DISP: RET END,工作方式的应用 【例】使用定时器T0以方式2产生200微秒定时,在P1.0输出周期为400微秒的连续方波。已知晶振频率fosc=6MHz。 (1)计算计数初值 (256-N)210-6=20010-6 N=156=9CH (2)TMOD初始化 工作方式2时,M1M0=10,实现定时功能C/=0,GATE=

13、0。定时器1不用,无关位设定为0,可得TMOD=02H。 参考程序如下: ORG 000BH LJMP LOOP0 ORG 0200H,START: MOV TCON,#00H MOV TMOD,#02H ;定时器方式2 MOV TH0,#9CH ;计数初值 MOV TL0,#9CH SETB EA ;允许总中断 SETB ET0 ;T0中断允许 SETB TR0 ;启动T0 HERE: SJMP HERE ;等待中断 ORG 0500H ;中断服务程序 LOOP0: CPL P1.0 RETI END,工作方式的应用 【例】假设有一个用户系统中已使用了两个外部中断源, 并置定时器 T1 于方

14、式 2, 作串行口波特率发生器用, 现要求再增加一个外部中断源, 并由P1.0 口输出一个5 Hz的方波(假设晶振频率为 6 MHz)。 在不增加其它硬件开销时,可把定时/计数器T0置于工作方式3,利用外部引脚T0端作附加的外部中断输入端,把TL0预置为0FFH,这样在T0端出现由1至0的负跳变时,TL0溢出,申请中断,相当于边沿激活的外部中断源。在方式3下,TH0总是作8位定时器用,可以靠它来控制由P1.0输出的5kHz方波。 由P1.0输出5kHz的方波,即每隔100s使P1.0的电平发生一次变化。则TH0中的初始值:X=M-N=256-100/2=206。 下面是有关的程序:,MOV T

15、L0, 0FFH MOV TH0, 206 MOV TL1, BAUD ; BAUD根据波特率要求设置常数 MOV TH1, BAUD MOV TMOD, 27H ; 置T0工作方式3,TL0工作于计数器方式 MOV TCON, 55H ; 启动定时器 T0、 T1, 置外部中断 0 和 1为边沿激活方式 MOV IE, 9FH ; 开放全部中断 TL0 溢出中断服务程序(由 000BH单元转来): TL0INT: MOV TL0, 0FFH ; 外部引脚 T0 引起中断处理程序 RETI,TH0 溢出中断服务程序(由 001BH转来): TH0INT: MOV TH0, 206 CPL P1

16、.0 RETI 此处串行口中断服务程序、 外中断0和外中断1的中断服务程序没有列出。,5. 定时器作外部中断源应用 MCS51单片机有两个定时器计数器,当它们选择计数工作方式时,T0或T1引脚上的负跳变将使T0或T1计数器加1,若把定时器计数器设置成计数工作方式,计数初值设定为满量程,一旦计数从外部引脚输入一个负跳变信号,计数器To或T1加1,产生溢出中断,这样,便可把外部计数输入端T0(P34)或T1(P35)扩展为外部中断源输入。,【例】将T1设置为工作方式2(自动恢复常数)及外部计数方式,计数器TH1、TLl初值设置为FFH,当计数输入端T1(P35)发生一次负跳变,计数器加1并产生溢出

17、标志,向 CPU申请中断,中断处理程序使累加器A内容加1,送P1口输出,然后返回主程序。 编程如下: ORG 0000H AJMP MAIN ORG 0013H AJMP INT MAIN: MOV SP, #53H MOV TMOD, #60H ;T1方式2,计数 MOV TL1,#0FFH MOV TH1, #0FFH,SETB TR1 ;启动T1 SETB ET1 ;T1中断允许 SETB EA ;CPU中断开放 LOOP: SJMP LOOP ;等待 INT: INC A ;T1中断处理 MOV P1, A RETI ;中断返回 END,单片机音乐,声音的频谱范围为20Hz-200KH

18、z,人的耳朵能辨别的声音频率大概在200Hz-20KHz。利用定时/计数器可以方便地产生一定频率的矩形波,接上喇叭就能发出一定频率的声音,改变定时/计数器的初值,即可改变频率,即改变音调。用延时程序或另一个定时器控制某一频率信号持续的时间长短,就可以控制节拍。音调和节拍是音乐的两大要素,有了音调和节拍,就可以演奏音乐了。 用单片机产生音频脉冲,只要算出该音频的周期T,然后用定时器定时1/2 T,定时时间到时,将输出脉冲的I/O管脚反相,再重新计时输出,定时时间到再反相,重复此过程就可在此I/O管脚得到此音频脉冲。,乐曲中,每个音符都对应着确定的频率,每一频率都对应定时器的一个频率初值。每个节拍

19、都有固定的时间,都对应延时程序的一个参数或定时器的一个节拍初值。可以将每一音符对应的定时器频率初值和节拍参数或节拍初值计算出来,把乐谱中所有音符对应的定时器频率初值和节拍参数按顺序排列成表格,然后用查表程序依次取出,产生指定频率的音符并控制节奏,就可以实现演奏效果。 为了控制演奏的结束,结束符和休止符可以分别用代码00H和FFH来表示,若查表结果为00H,则表示曲子终了;若查表结果为FFH,则产生相应的停顿效果。为了产生节奏感,在某些音符(例如两个相同音符)间可以插入一个时间单位的频率略有不同的音符,以示区别。,乐曲的12平均率规定:每2个八度音(如简谱中的中音1与高音1)之间的频率相差1倍。

20、在2个八度音之间,又可分为12个半音。音符A(简谱中的低音6)的频率为440Hz,音符B到C之间、E到F之间为半音,其余为全音。 【例】 用单片机演奏“生日快乐”歌曲,设用定时器T0工作于方式1产生频率,用T1控制节拍,P2.5驱动蜂鸣器,晶振频率为6MHz。节拍以1/8拍为基准,其它节拍为该节拍的N倍,用循环N次1/8基准节拍实现。电路如上图所示所示。表6-1列出了C调各音符频率与T0初值N的对照表。“#”表示半音,用于上升或下降半个音。 参考程序如下: BASE EQU 62500 ;设定1/8拍 SPEAKER EQU P2.5 ;设定输出口 ;主程序 ORG 0000H ;从0地址开始

21、 JMP INITIAL ;跳至INITIAL,ORG 000BH ;TIMER0中断向量 JMP TONEINT ;跳至TIMER0中断子程序 ORG 001BH ;TIMER1中断向量 JMP BEATINT ;跳至TIMERl中断子程序 INITIAL: MOV TMOD,#11H ;设定定时器模式;启用定时器 MOV IE,#10001010B ;定时器中断开放 MOV SP,#70H ;移开堆栈 START: CLR F0 ;节拍结束标志 MOV R7,#0 ;音阶起始间距 MOV R6,#0 ;节拍起始间距,LOOP : LCALL LOADTONE ;载入音阶 LCALL LOA

22、DBEAT1 ;载入节拍 JNB F0,$ ;节拍结束? CLR F0 JMP LOOP ;下一个音节 ;载入音节 LOADTONE: MOV DPTR,#TONE ;指定音阶起始地址 MOV A, R7;指定间距 MOVC A,A+DPTR;读取音阶 JNZ CONTINUE;判断是否为最后一个音? MOV R6,#0;节拍从头开始,MOV R7,#0;音阶从头开始 JMP LOADTONE;跳到LOADTONE CONTINUE: MOV 20H,A;储存定时器值高字节 MOV TH0,A;指定定时器值高字节 INC R7;下一个间距 MOV A,R7;指定间距 MOVC A,A+DPTR

23、;读取定时器值低字节 MOV 21H,A ;储存定时器值低字节 MOV TL0,A;指定定时器值低字节 INC R7;下一个间距 SETB TR0;启动TIMER0 RET;返回,;载入节拍 LOADBEAT1: MOV DPTR,#BEAT ;指定节拍起始地址 MOV A,R6 ;指定间距 MOVC A,A+DPTR ;读取节拍 MOV R5,A ;指定节拍 MOV TH1,#BASE ;指定定时器初值高字节 MOV TL1,#BASE ;指定定时器初值低字节 SETB TR1 ;启动TIMERl RET ;返回,;音符中断子程序 TONEINT: CLR TR0;关闭TIMER0 CPL SPEAKER;驱动喇叭 MOV A, 20H;取回定时器初值高字节 MOV TH0, A ;指定定时器初值高字节 MOV A, 21H;取回定时器初值低字节 MOV TL0, A;指定定时器初值低字节 SETB TR0;启动TIMER0 RETI;T0中断返回,;节拍中断子程序 BEATINT: CLR TR1;关闭TIMERl DJNZ R5, AGAIN;循环结束? CLR TR0;关闭TIMBR0 SETB F0;F01,结束节拍 JMP EXIT1;跳至EXIT1 AGAIN: MOV TH1,#BASE ;指定定时器初值

温馨提示

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

评论

0/150

提交评论