51单片机原理与应用第6章课件_第1页
51单片机原理与应用第6章课件_第2页
51单片机原理与应用第6章课件_第3页
51单片机原理与应用第6章课件_第4页
51单片机原理与应用第6章课件_第5页
已阅读5页,还剩57页未读 继续免费阅读

下载本文档

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

文档简介

1、第6章 定时器/计数器 (课时:8学时)第1页,共62页。教学目的 了解定时器/计数器的结构与工作原理。掌握定时器/计数器的四种工作方式的特点及应用。用定时器/计数器设计一个可产生一定频率方波的信号源。用定时器/计数器设计一个脉冲宽度调制(PWM)信号以控制直流电动机转速。用定时器/计数器设计一个用于流水生产线上的产品自动计数器。用定时器/计数器设计一个测量电平脉冲宽度的程序。用定时器/计数器设计一个电子音乐程序。用定时器/计数器设计一个电子音乐程序。 学习重点和难点 定时器/计数器的初始化。定时器/计数器与中断的综合应用。 第2页,共62页。第6章 定时器/计数器6.1 定时器/计数器的结构

2、与原理 6.2 定时器/计数器的控制 6.3 定时器/计数器的四种工作方式及应用 本章小结习题 第3页,共62页。6.1 定时器/计数器的 结构与原理 6.1.1 定时器/计数器的结构 6.1.2 定时器/计数器的原理 6.1.3 定时器/计数器的功能 第4页,共62页。6.1.1 定时器/计数器的结构8051单片机内部设有两个16位可编程定时器/计数器,简称为定时器0(T0)和定时器1(T1)。16位的定时器/计数器分别由两个8位寄存器组成,即:T0由TH0和TL0构成,T1由TH1和TL1构成。每个寄存器均可单独访问,这些寄存器是用于存放定时初值或计数初值的。有一个8位的定时器方式寄存器T

3、MOD和一个8位的定时器控制寄存器TCON。这些寄存器之间是通过内部总线和控制逻辑电路连接起来的,定时器/计数器的工作方式、定时时间和启停控制通过由指令来确定这些寄存器的状态来实现。TMOD主要用于设定定时器的工作方式,TCON主要用于控制定时器的启动与停止,并保存T0、T1的溢出和中断标志。第5页,共62页。6.1.1 定时器/计数器的结构 定时器/计数器结构框图 第6页,共62页。6.1.2 定时器/计数器的原理 16位的定时器/计数器实质上是一个加l计数器,可实现定时和计数两种功能,其功能由软件控制和切换。定时器属硬件定时和计数,是单片机中效率高而且工作灵活的部件。 在定时器/计数器开始

4、工作之前,CPU必须将一些命令(称为控制字)写入定时器/计数器。将控制字写入定时器/计数器的过程叫定时器/计数器的初始化。在初始化程序中,要将工作方式控制字写入定时器方式寄存器(TMOD),工作状态控制字(或相关位)写入定时器控制寄存器(TCON),赋定时/计数初值给TH0(TH1)和TL0(TL1)。 第7页,共62页。6.1.2 定时器/计数器的原理定时器/计数器的定时功能。计数器的加1信号由振荡器的12分频信号产生,即每过一个机器周期,计数器加1,直至计满溢出。定时器的定时时间与系统的时钟频率有关。因一个机器周期等于12个时钟周期,所以计数频率应为系统时钟频率的十二分之一。如果晶振频率为

5、12MHz,则机器周期为1s。通过改变定时器的定时初值,并适当选择定时器的长度(8位、13位或16位),可以调整定时时间。 第8页,共62页。6.1.2 定时器/计数器的原理定时器/计数器的计数功能。通过外部计数输入引脚T0(P3.4)和T1(P3.5)对外部信号计数,外部脉冲的下降沿将触发计数。计数器在每个机器周期的S5P2期间采样引脚输入电平,若一个机器周期S5P2期间采样值为1,下一个机器周期S5P2期间采样值为0,则计数器加1,再下一个机器周期S3P1期间,新的计数值装入计数器。因检测一个由1至0的跳变需要两个机器周期,故外部信号的最高计数频率为时钟频率的二十四分之一。如果晶振频率为1

6、2MHz,则最高计数频率为0.5MHz。虽然对外部输入信号的占空比无特殊要求,但为了确保给定电平在变化前至少被采样一次,外部计数脉冲的高电平与低电平保持时间均需在一个机器周期以上。 第9页,共62页。6.1.3 定时器/计数器的功能 定时器/计数器具有定时和计数两种功能,应用范围如下。1. 定时与延时控制方面 可产生定时中断信号,以设计出各种不同频率的信号源;产生定时扫描信号,对键盘进行扫描以获得控制信号,对显示器进行扫描以不间断地显示数据。2. 测量外部脉冲方面 对外部脉冲信号进行计数可测量脉冲信号的宽度、周期,也可实现自动计数。3. 监控系统工作方面 对系统进行定时扫描,当系统工作异常时,

7、使系统自动复位,重新启动以恢复正常工作。第10页,共62页。6.2 定时器/计数器的控制 6.2.1 定时器方式寄存器TMOD 6.2.2 定时器控制寄存器TCON第11页,共62页。6.2.1 定时器方式寄存器TMOD 定时器方式寄存器TMOD的作用是设置T0、T1的工作方式。 TMOD的格式:各位的功能说明:(1) GATE:门控位。GATE=0:软件启动定时器,即用指令使TCON中的TR1(TR0)置1即可启动定时器1(定时器0)。GATE=1:软件和硬件共同启动定时器,即用指令使TCON中的TR1(TR0)置1时,只有外部中断INT0(INT1)引脚输入高电平时才能启动定时器1(定时器

8、0)。 第12页,共62页。6.2.1 定时器方式寄存器TMOD(2) C/T:功能选择位。C/T=0时,以定时器方式工作。C/T=1时,以计数器方式工作。(3) M1、M0:方式选择位。 定时器工作方式选择位定义 M1 M0工作方式功能描述0 0方式013位计数器0 1方式116位计数器1 0方式2自动重装初值8位计数器1 1方式3定时器0:分为两个独立的8位计数器定时器1:无中断的计数器第13页,共62页。6.2.2 定时器控制寄存器TCON 定时器控制寄存器TCON的作用是控制定时器的启动与停止,并保存T0、T1的溢出和中断标志。 TCON的格式:各位的功能说明:(1) TF1(TCON

9、.7):定时器1溢出标志位。当定时器1计满溢出时,由硬件自动使TF1置1,并申请中断。对该标志位有两种处理方法,一种是以中断方式工作,即TF1置1并申请中断,响应中断后,执行中断服务程序,并由硬件自动使TF1清0;另一种以查询方式工作,即通过查询该位是否为1来判断是否溢出,TF1置1后必须用软件使TF1清0。 第14页,共62页。6.2.2 定时器控制寄存器TCON 各位的功能说明:(2) TR1(TCON.6):定时器1启停控制位。GATE=0时,用软件使TR1置1即启动定时器1,若用软件使TR1清0则停止定时器1。GATE=1时,用软件使TR1置1的同时外部中断INT1的引脚输入高电平才能

10、启动定时器1。(3) TF0(TCON.5):定时器0溢出标志位。其功能同TF1。(4) TR0(TCON.4):定时器0启停控制位。其功能同TR1。(5) IE1(TCON.3):外部中断1请求标志位。(6) IT1(TCON.2):外部中断1触发方式选择位。(7) IE0(TCON.1):外部中断0请求标志位。(8) IT0(TCON.0):外部中断0触发方式选择位。 第15页,共62页。6.3 定时器/计数器的四种 工作方式及应用 6.3.1 定时器/计数器的初始化 6.3.2 方式0及应用实例 6.3.3 方式1及应用实例 6.3.4 方式2及应用实例 6.3.5 方式3 第16页,共

11、62页。6.3.1 定时器/计数器的初始化1. 定时器/计数器的初始化步骤 定时器/计数器是一种可编程部件,在使用定时器/计数器前,一般都要对其进行初始化,以确定其以特定的功能工作。初始化的步骤如下。(1) 确定定时器/计数器的工作方式,确定方式控制字,并写入TMOD。(2) 预置定时初值或计数初值,根据定时时间或计数次数,计算定时初值或计数初值,并写入TH0、TL0或TH1、TL1。(3) 根据需要开放定时器/计数器的中断,给IE中的相关位赋值。(4) 启动定时器/计数器,给TCON中的TR1或TR0置1。 第17页,共62页。6.3.1 定时器/计数器的初始化2. 定时初值或计数初值的计算

12、方法 不同工作方式的定时初值或计数初值的计算方法如下表所示。表中T 表示定时时间,T机表示机器周期。 工作方式计数位数最大计数值最大定时时间定时初值计算公式计数初值计算公式方式013213=8192213T机X=213-T/T机X=213-计数值方式116216=65536216T机X=216-T/T机X=216-计数值方式2828=25628T机X=28-T/T机X=28-计数值第18页,共62页。6.3.1 定时器/计数器的初始化【例1】 用定时器0方式0,定时5ms,以中断方式工作,进行程序初始化设计,晶振频率为6MHz。解:用定时器0方式0时,定时器/计数器方式寄存器TMOD低4位中的

13、M1M0应取00;可设定为软件启动定时器,故GATE取0;因用定时功能,C/T取0;定时器方式寄存器TMOD高4位为无关位,一般都取0,所以TMOD应为00H。 晶振频率为6MHz,T机=12/fosc=12/(6106)=2s 定时初值X=213-T/T机=213-5103/2=8192-2500=5692 =163CH=1011000111100B 因TL0的高3位未用,对计算出的定时初值X要进行修正,即在低5位前插入3个0,修正后的定时初值 X=1011000100011100B=B11CH第19页,共62页。6.3.1 定时器/计数器的初始化 定时器以中断方式工作,故将中断总允许位EA

14、和定时器0的中断允许位ET0置1。 参考程序: 75 89 00MOV TMOD,#00H;置定时器0为工作方式075 8C B1MOV TH0,#0B1H;定时初值的高8位75 8A 1CMOV TL0,#1CH;定时初值的低8位D2 AFSETB EA;开放中断总允许位D2 A9SETB ET0;开放定时器0的中断允许位D2 8CSETB TR0;启动定时器0第20页,共62页。6.3.2 方式0及应用实例 在方式0下,以定时器0为例,定时器/计数器是一个由TH0中的8位和TL0中的低5位组成的13位加1计数器(TL0中的高3位不用);若TL0中的第5位有进位,直接进到TH0中的最低位。定

15、时器/计数器0方式0逻辑结构如下图所示。当门控位GATE=0时,或门输出始终为1,与门被打开,与门的输出电平始终与TR0的电平一致,实现由TR0控制定时器/计数器的启动和停止。若软件使TR0置1,接通控制开关,启动定时器0,13位加1计数器在定时初值或计数初值的基础上进行加1计数;溢出时,13位加1计数器为0,TF0由硬件自动置1,并申请中断,同时13位加1计数器继续从0开始计数。若软件使TR0清0,关断控制开关,停止定时器0,加1计数器停止计数。 第21页,共62页。6.3.2 方式0及应用实例定时器/计数器0方式0逻辑结构 C/TC/T第22页,共62页。6.3.2 方式0及应用实例【例2

16、】 在P1.0输出周期为1 ms(频率1kHz)的方波,采用定时器1方式0设计程序,晶振频率为12MHz。解:根据题意,只要使P1.0每隔500s取反一次即可得到周期1 ms的方波,因而T1的定时时间为500s。 用定时器1方式0时,定时器/计数器方式寄存器TMOD高4位中的M1M0应取00;可设定为软件启动定时器,故GATE取0;因为用定时功能,C/T取0;定时器方式寄存器TMOD低4位为无关位,一般都取0,所以TMOD应为00H。 晶振频率为12MHz,T机=12/fosc=12/(12106)=1s 定时初值 X=213-T/T机=213-500/1=8192-500=7692 =1E0

17、CH=1111000001100B 因TL1的高3位未用,对计算出的定时初值X要进行修正,即在低5位前插入3个0,修正后的定时初值 X=1111000000001100B=F00CH 第23页,共62页。6.3.2 方式0及应用实例地址机器码程序注释 ORG 0000H0000H02 00 50 LJMP MAIN ORG 0050H0050HD2 90MAIN: SETB P1.0;置P1.0初始状态0052H75 89 00 MOV TMOD,#00H;置定时器1为工作方式00055H75 8D F1 MOV TH1,#0F0H;置500s定时初值0058H75 8B 0C MOV TL1

18、,#0CH005BHD2 8E SETB TR1;启动定时器1005DH10 8F 02 LP1: JBC TF1,LP2;查询计数溢出0060H80 FB SJMP LP1;未到500s继续计数0062H75 8D F1 LP2: MOV TH1,#0F0H;重新置500s定时初值0065H75 8B 0C MOV TL1,#0CH0068HB2 90 CPL P1.0;输出取反006AH80 E4 SJMP LP1;重复循环 END参考程序:第24页,共62页。6.3.2 方式0及应用实例【例3】 P1口做输出口,控制八只灯(P1口输出低电平时灯被点亮),同一时间只有两盏灯点亮,按一定的规

19、律每隔1秒循环点亮下一盏灯;采用定时器0方式0设计延时子程序,定时时间为5ms,晶振频率为6MHz。解:延时子程序要求延时1s,又规定定时时间5ms,可在硬件定时的基础上再加软件计数来实现1s的延时;5ms定时初值的计算参见例1,软件计数值为200。 用定时器0方式0时,定时器/计数器方式寄存器TMOD低4位中的M1M0应取00;可设定为软件启动定时器,故GATE取0;因用定时功能,C/T取0;定时器方式寄存器TMOD高4位为无关位,一般都取0;所以TMOD应为00H。 设定时器0的溢出标志位以查询方式工作。 第25页,共62页。主程序: ORG 0000H0000H21 50 AJMP MA

20、IN ORG 0150H0150H7A 06 MAIN: MOV R2,#06H0152H74 FC MOV A,#0FCH;灯点亮的初始状态0154HF5 90 NEXT: MOV P1,A0156H51 00 ACALL DELAY0158H23 RL A;点亮左边一盏灯0159HDA F9 DJNZ R2,NEXT015BH7A 06 MOV R2,#06H015DHF5 90 NEXT1: MOV P1,A015FH03 RR A;点亮右边一盏灯0160H51 00 ACALL DELAY0162HDA F9 DJNZ R2,NEXT10164H80 EA SJMP MAIN第26页,

21、共62页。延时子程序: ORG 0200H0200H79 C8 DELAY: MOV R1,#200;置5ms计数循环初值0202H75 89 00 MOV TMOD,#00H;置定时器0为工作方式00205H75 8C B1 MOV TH0,#0B1H;置5ms定时初值0208H75 8A 1C MOV TL0,#1CH020BHD2 8C SETB TR0;启动定时器1020DH10 8D 02 LP1: JBC TF0,LP2;查询计数溢出0210H80 FB SJMP LP1;未到5ms继续计数0212H75 8C B1 LP2: MOV THO,#0B1H;重新置5ms定时初值021

22、5H75 8A 1C MOV TL0,#1CH0218HD9 F3 DJNZ R1,LP1;未到1s继续循环021AH22 RET;返回主程序 END第27页,共62页。6.3.2 方式0及应用实例【例4】 每隔1秒使P1.1输出取反一次同时使片内RAM区20H单元中的内容加1,采用定时器0方式0设计程序,晶振频率6MHz。解:根据题意,定时时间为1s,因方式0最大计数值为8192,机器周期为2s,则方式0的最大定时时间为16.384ms;显然不能满足本题的定时时间要求,因而需另设软件计数器,即在硬件定时的基础上再加软件计数。 设硬件定时时间10 ms,软件计数的次数则为100次。 定时初值

23、X=213-T/T机=213-10103/2=8192-5000 =3192=0C78H=0110001111000B 因TL0的高3位未用,对计算出的定时初值X要进行修正,即在低5位前插入3个0,修正后的定时初值 X=0110001100011000B=6318H 定时器以中断方式工作。 第28页,共62页。主程序: ORG 0000H0000H02 00 50 LJMP MAIN ORG 000BH;定时器0的中断入口地址000BH02 02 00 LJMP SER0;指向中断服务程序 ORG 0030H0030HD2 90MAIN: SETB P1.1;置P1.1初始状态0032H75

24、20 00 MOV 20H,#00H;20H单元清00035H78 64 MOV R0,#64H;软件计数100次0037H75 89 00 MOV TMOD,#00H;置定时器0为工作方式0003AH75 8C 63 MOV TH0,#63H;置10ms定时初值003DH75 8A 18 MOV TL0,#18H0040HD2 AF SETB EA0042HD2 A9 SETB ET00044HD2 8C SETB TR00046H80 FESJMP $参考程序:第29页,共62页。中断服务程序: ORG 0000H0000H02 00 50 LJMP MAIN ORG 0100H0100H

25、75 8C 63 SER0:MOV TH0,#63H;重新置10ms定时初值0103H75 8A 18 MOV TL0,#18H0106HD8 04 DJNZ R0,EXIT;未到1s继续计数0108HB2 91 CPL P1.1010AH05 20 INC R0010CH32 EXIT: RETI END参考程序:第30页,共62页。6.3.3 方式1及应用实例 在方式1下,以定时器0为例,定时器/计数器是一个由TH0中的8位和TL0中的8位组成的16位加1计数器。方式1与方式0基本相似,最大的区别是方式1的加1计数器位数是16位。 定时器/计数器0方式1逻辑结构 C/TC/T第31页,共6

26、2页。6.3.3 方式1及应用实例【例5】 利用定时器1测量高电平脉冲的宽度,采用定时器1方式1设计程序,晶振频率6MHz。解: 根据题意,用定时器1方式1时,被测高电平脉冲从外部中断INT1(P3.3)引脚输入,门控位GATE取1,即由软件和硬件共同启动定时器;被测脉冲为高电平时,启动定时器1,开始计数;被测脉冲变为低电平时,停止定时器1,停止计数,计数值分别存放到片内RAM区40H、41H、42H单元中;计数值与机器周期的乘积就是所测脉冲的宽度。 用定时器1方式1时,定时器/计数器方式寄存器TMOD 高4位中的M1M0应取01,GATE取1;因为用定时功能,C/T取0;定时器方式寄存器TM

27、OD低4位取0,所以TMOD应为90H。 定时初值为00H。 定时器以查询方式工作。 第32页,共62页。 ORG 0000H0000H02 00 50 LJMP MAIN ORG 0050H0050H75 40 00 MAIN: MOV 40H,#00H;数据存储单元清00053H75 41 00 MOV 41H,#00H0056H75 42 00 MOV 42H,#00H0059H75 89 90 MOV TMOD,#90H;置定时器1为工作方式1005CH75 8D 00 MOV TH1,#00H;定时初值清0005FH75 8B 00 MOV TL1,#00H0062H20 B3 FD

28、 JB P3.3,$;查询低电平0065HD2 8E SETB TR1;准备启动定时器1 0067H30 B3 FD JNB P3.3,$;高电平到,启动定时器1参考程序:第33页,共62页。006AH10 8F 05 LP1: JBC TF1,LP2006DH20 B3 FA JB P3.3, LP1;低电平到,停止定时器10070H80 04 SJMP LP30072H05 40 LP2: INC 40H;存储区最高位加10074H80 F4 SJMP LP10076HC2 8E LP3: CLR TR1;停止定时器10078H85 8D 41 MOV 41H,TH1;计数值高8位放入存储

29、区007BH85 8B 42 MOV 42H,TL1;计数值低8位放入存储区007EH12 01 00 LCALL DIS;调用显示子程序0081H80 DD SJMP MAIN;重复循环 ORG 0100H DIS: (略);显示子程序 END参考程序:第34页,共62页。6.3.3 方式1及应用实例【例6】 P1.0口做输出口,接一只喇叭,利用定时器中断方式编写程序,使喇叭放出悦耳的音乐。晶振频率6MHz。解:音乐是由高低长短相同或不同的音符,按一定的规律组织起来的。每个音符都包括两个要素:第一是音调,即音符的频率,频率越高音调越高,频率越低音调越低;第二是节拍,即音符的时间长短。 利用定

30、时器/计数器可以产生不同频率的音频脉冲,也可以控制音频脉冲的延时时间。不同的音符对应的频率不同,用定时器T1方式1可以产生与各音符对应频率的方波,C调各音符频率与定时器定时初值对应关系如下表所示;不同的节拍对应的延时时间不同,通过循环调用一个基本延时子程序可以产生不同的节拍,各曲调与节拍的时间对应关系如下表所示。 第35页,共62页。C调各音符频率与定时器定时初值对照表 曲调4/43/42/41/4拍时间(ms)1251872501/8拍时间(ms)6294125曲调与节拍的时间对照表 第36页,共62页。 (1) 根据歌谱编制唱名与唱名码的对照表。 把歌谱中所有的不同音符的频率相对应的定时器

31、定时初值进行编码,称为唱名码,唱名与唱名码对照表如下表所示。 生日快乐歌歌谱如下:1=C 3/4唱名与唱名码对照表 第37页,共62页。 (2) 编制节拍与节拍码对照表。 根据曲调和歌谱要求,确定最小节拍数为1/4拍,基本延时子程序延时时间为187 ms;对不同节拍对应的循环次数进行编码,称为节拍码,节拍与节拍码对照表如下表所示。 节拍与节拍码对照表 节拍数1/4拍1/2拍3/4拍1拍1 1/4拍1 1/2拍2拍2 1/2拍3拍节拍码12345689C第38页,共62页。 (3) 编制简谱码表。 歌谱中每个音符中与频率和延时有关的参数可用一个字节来表述,称为简谱码,字节的高4位存放与音符的频率

32、相对应的唱名码,字节的低4位存放与音符的节拍相对应的节拍码。根据歌谱,编制每个音符的简谱码,并编成简谱码表。 歌谱中每个音符的简谱码可做成表格存放到程序存储器中,唱名码、节拍码也可做成表格存放到程序存储器中。编写程序通过查表从表格中得到简谱码,从简谱码中分解出唱名码和节拍码,再通过查表从表格中得到唱名码和节拍码所包含的定时初值和循环次数。 第39页,共62页。参考程序:主程序 ORG 0000H0000H02 00 30 LJMP MAIN ORG 001BH001BH02 01 50 LJMP INT1 ORG 0030H0030H75 81 30 MAIN:MOV SP,#30H0033H

33、75 89 10 MOV TMOD, #10H;设T1工作方式10036H75 A8 88 MOV IE, #88H;允许中断0039H75 40 00 LOOP1:MOV 40H, #00H;简谱码指针清0003CHE5 40 LOOP2:MOV A, 40H;简谱码指针放入A003EH90 02 00 MOV DPTR, #TABLE10041H93 MOVC A,A+DPTR;到表格TABLE1中取简谱码0042HF9 MOV R1, A;取到的简谱码暂存于R10043H60 2B JZ FINISH;简谱码是00H(结束码),转移0045H54 0F ANL A, #0FH;不是00H

34、,取低4位(节拍码)0047HFA MOV R2, A;将节拍码存入R2中0048HE9 MOV A, R1;将取到的简谱码再放入A0049HC4 SWAP A;高低4位交换004AH54 0F ANL A, #0FH;取低4位(唱名码)004CH70 04 JNZ SING;唱名码不是00H,转移004EHC2 8E CLR TR1;唱名码是00H,则不发音0050H80 17 SJMP WY;转移至WY第40页,共62页。参考程序:主程序0052H14 SING:DEC A;唱名码减10053HF5 50 MOV 50H,A;唱名码存入50H0055H23 RL A;乘20056H90 0

35、2 50 MOV DPTR, #TABLE20059H93 MOVC A,A+DPTR;到表格TABLE2取计数值高8位005AHF5 8D MOV TH1, A;计数值高8位存入TH1005CHF5 51 MOV 51H, A;计数值高8位存入51H005EHE5 50 MOV A, 50H;将取到的唱名码再放入A0060H23 RL A;乘20061H04 INC A;唱名码加10062H93 MOVC A,A+DPTR;到表格TABLE2取计数值低8位0063HF5 8B MOV TL1, A;计数值低8位存入TL10065HF5 52 MOV 52H, A;计数值低8位存入52H006

36、7HD2 8E SETB TR1;启动T10069H12 01 00 WY: LCALL DELAY;调用基本单位时间(1/4拍)006CH05 40 INC 40H;简谱码指针加1006EH80 CC SJMP LOOP2;取下一个简谱码0070HC2 8EFINISH: CLR TR1;停止T10072H80 C5 SJMP LOOP1;重复播放第41页,共62页。参考程序:延时子程序 ORG 0100H;基本单位时间子程序(1/4拍)0100H7C C8 DELAY: MOV R4,#200;延时187ms的循环次数0102H7D E9 LP1: MOV R5,#232;延时0.935m

37、s的循环次数0104HDD FE DJNZ R5,$0106HDC FA DJNZ R4,LP10108HDA F6 DJNZ R2,DELAY;节拍数未到,转移010AH22 RET ORG 0150H0150HC0 E0 INT1: PUSH ACC;将A的值暂存于堆栈0152HC0 D0 PUSH PSW;将PSW的值暂存于堆栈0154H85 52 8B MOV TL1, 52H;重置定时器初值0157H85 51 8D MOV TH1, 51H015AHB2 90 CPL P1.0;将P1.0取反015CHD0 D0 POP PSW;至堆栈取回PSW值015EHD0 E0 POP AC

38、C;至堆栈取回A值0160H32 RETI;返回主程序第42页,共62页。参考程序:简谱码表 ORG 0200H0200H TABLE1:DB 82H,01H,81H,94H,84H;简谱码表0205H DB 0B4H,0A4H,04H0208H DB 82H,01H,81H,94H,84H020DH DB 0C4H,0B4H,04H0210H DB 82H,01H,81H,0F4H,0D4H0215H DB 0B4H,0A4H,94H0218H DB 0E2H,01H,0E1H,0D4H,0B4H021DH DB 0C4H,0B4H,04H0220H DB 82H,01H,81H,94H,8

39、4H0225H DB 0B4H,0A4H,04H0228H DB 82H,01H,81H,94H,84H022DH DB 0C4H,0B4H,04H0230H DB 82H,01H,81H,0F4H,0D4H0235H DB 0B4H,0A4H,94H0238H DB 0E2H,01H,0E1H,0D4H,0B4H023DH DB 0C4H,0B4H,04H0240H DB 00H第43页,共62页。参考程序:唱名码表 ORG 0250H0250H TABLE2:DW FD82H,FDC8H,FE06H ;唱名码表0256H DW FE22H,FE56H,FE85H025CH DW FE9AH

40、,FEB2H,FEE4H0262H DW FF03H,FF11H,FF2BH0268H DW FF42H,FF4DH,FF61H END;程序结束第44页,共62页。6.3.3 方式1及应用实例【例6】 P1.0口做输出口,接一只喇叭,利用定时器中断方式编写程序,使喇叭放出悦耳的音乐。晶振频率6MHz。解:音乐是由高低长短相同或不同的音符,按一定的规律组织起来的。每个音符都包括两个要素:第一是音调,即音符的频率,频率越高音调越高,频率越低音调越低;第二是节拍,即音符的时间长短。 利用定时器/计数器可以产生不同频率的音频脉冲,也可以控制音频脉冲的延时时间。不同的音符对应的频率不同,用定时器T1方

41、式1可以产生与各音符对应频率的方波,C调各音符频率与定时器定时初值对应关系如下表所示;不同的节拍对应的延时时间不同,通过循环调用一个基本延时子程序可以产生不同的节拍,各曲调与节拍的时间对应关系如下表所示。 第45页,共62页。6.3.4 方式2及应用实例 在方式1下,以定时器0为例,定时器/计数器是一个能自动装入初值的8位加1计数器,TH0中的8位用于存放定时初值或计数初值,TL0中的8位用于加1计数器。 方式2与方式0基本相似,最大的区别除方式2的加1计数器位数是8位外,加1计数器溢出后,硬件使TF0自动置1,同时自动将TH0中存放的定时初值或计数初值再装入TL0,继续计数。定时器/计数器0

42、方式2逻辑结构 C/TC/T第46页,共62页。6.3.4 方式2及应用实例【例7】 P1.1输出脉冲宽度调制(PWM)信号,即脉冲频率为1kHz、占空比为25的矩形波,以控制直流电动机按一定的速度转动,晶振频率为6MHz。解:直流电动机具有优良的调速特性,调速方法也从模拟化逐步向数字化转化,采用脉冲宽度调制(PWM)的方法可以实现平滑调速,电机转速由脉冲的占空比决定。 频率为1kHz,周期为1ms,占空比为2:5的P1.1输出矩形波的波形如下图所示。 对P1.1取反时,由于高、低电平的时间不同,可找出一个时间基准,如100s、200s。 本例设定时间基准200s,即定时时间为200s。 定时

43、初值 X=28-T/T机=28-200/2=256-100=156=9CH 高电平的软件计数为2,低电平的软件计数为3。 定时器以查询方式工作。 第47页,共62页。6.3.4 方式2及应用实例 ORG 0000H0000H02 00 30 LJMP MAIN ORG 000BH;定时器0的中断入口地址000BH02 00 50 LJMP INT0 ORG 0030H0030HD2 91MAIN:SETB P1.1;设置P1.1初始状态0032H7A 02 MOV R2, #02H;给R2赋高电平计数值0034H75 89 02 MOV TMOD, #02H;定时器0工作方式20037H75

44、8C 9C MOV TH0, #9CH;置200s定时初值003AH75 8A 9C MOV TL0, #9CH003DHD2 AF SETB EA003FHD2 A9 SETB ET00041HD2 8C SETB TR00043H80 FE SJMP $;动态暂停主程序:第48页,共62页。6.3.4 方式2及应用实例 ORG 0050H0050HDA 0BINT0:DJNZ R2,EXIT0052HB2 91 CPL P1.1;P1.1取反0054H30 91 04 JNB P1.1,L1;判断P1.1电平高低0057H7A 02 MOV R2, #02H;若P1.1=1,给R2赋高电平

45、计数值0059H80 02 SJMP EXIT005BH7A 04 L1:MOV R2, #03H;若P1.1=0,给R2赋低电平计数值005DH32EXIT:RETI END定时器0中断服务程序:矩形波的波形图第49页,共62页。6.3.4 方式2及应用实例【例8】 定时器0外部输入端(P3.4) 作为计数脉冲输入端,利用手控单脉冲信号作为计数输入脉冲,编写控制程序,每输入十个脉冲,工作寄存器R0的内容加一,晶振频率为6MHz。解:用定时器0方式2时,定时器/计数器方式寄存器TMOD低4位中的M1M0应取10; 可设定为软件启动定时器,故GATE取0; 因用计数功能,C/T取1; 定时器方式

46、寄存器TMOD高4位为无关位,一般都取0,所以TMOD应为06H。 计数初值 X=28-计数值=28-10=256-0=246=F6H 定时器以中断方式工作。 第50页,共62页。参考程序: ORG 0000H0000H02 00 50 LJMP MAIN ORG 000BH;定时器0的中断入口地址000BH02 02 00 LJMP SER0;转向中断服务程序 ORG 0050H0050H78 00 MAIN: MOV R0,#00H0052H75 89 06 MOV TMOD,#06H;置计数器0为工作方式20055H75 8C F6 MOV TH0,#0F6H;置10次计数初值0058H

47、75 8A F6 MOV TL0,#0F6H005BHD2 AF SETB EA005DHD2 A9 SETB ET0005FHD2 8C SETB TR00061H80 FE SJMP $ ORG 0200H0200H08 SER0: INC R0;中断服务程序0201H32 RETI END第51页,共62页。6.3.4 方式2及应用实例【例9】 利用定时器/计数器扩展一个外部中断源,用手控单脉冲信号作为外部中断信号,P1口控制八只灯(P1口输出低电平时灯被点亮),同一时间只有一盏灯点亮,编写控制程序,每发一个单脉冲信号,循环点亮下一盏灯。解:定时器/计数器0以计数功能工作,当计数初值为F

48、FH时,只要外部计数输入引脚T0(P3.4)输入一个计数脉冲,8位加1计数器TL0变为00H,TF0由硬件自动置1,并申请中断。利用这一特点,将外部中断请求信号作为计数脉冲送入外部计数输入引脚T0(P3.4),就可实现中断功能。 定时器/计数器0以方式2工作。 第52页,共62页。参考程序: ORG 0000H0000H01 50 AJMP MAIN ORG 000BH;定时器0的中断入口地址000BH21 00 AJMP INT;转向中断服务程序 ORG 0050H0050H75 89 06 MAIN: MOV TMOD,#06H;置计数器0为工作方式20053H75 8C FF MOV T

49、H0,#0FFH0056H75 8A FF MOV TL0,#0FFH0058HD2 AF SETB EA005AHD2 A9 SETB ET0005CHD2 8C SETB TR0005EH74 FE MOV A,#0FEH0060HF5 90 MOV P1,A0062H80 FE SJMP ORG 0100H0100H23 INT: RL A;中断服务程序0101HF5 90 MOV P1,A0103H32 RETI END第53页,共62页。6.3.5 方式3 1. T0方式3的结构特点在方式3下,定时器0分为两个独立的8位加1计数器TH0和TL0。其中TL0既可用于定时,也能用于计数;TH0只能用于定时。定时器/计数器0方式3逻辑结构如下图所示。 在方式3下,加1计数器TL0占用了T0除TH0外的全部资源,原T0的控制位和信

温馨提示

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

评论

0/150

提交评论