http://www.wenyuan.com.cn/webnew/
第 6章 定时器 /计数器
(课时,8学时)
http://www.wenyuan.com.cn/webnew/
教学目的
了解定时器 /计数器的结构与工作原理。
掌握定时器 /计数器的四种工作方式的特点及应用。
用定时器 /计数器设计一个可产生一定频率方波的信号源。
用定时器 /计数器设计一个脉冲宽度调制 (PWM)信号以控制直流电动机转速。
用定时器 /计数器设计一个用于流水生产线上的产品自动计数器。
用定时器 /计数器设计一个测量电平脉冲宽度的程序。
用定时器 /计数器设计一个电子音乐程序。
用定时器 /计数器设计一个电子音乐程序。
学习重点和难点
定时器 /计数器的初始化。
定时器 /计数器与中断的综合应用。
http://www.wenyuan.com.cn/webnew/
第 6章 定时器 /计数器
6.1 定时器 /计数器的结构与原理
6.2 定时器 /计数器的控制
6.3 定时器 /计数器的四种工作方式及应用
本章小结
习题
http://www.wenyuan.com.cn/webnew/
6.1 定时器 /计数器的结构与原理
6.1.1 定时器 /计数器的结构
6.1.2 定时器 /计数器的原理
6.1.3 定时器 /计数器的功能
http://www.wenyuan.com.cn/webnew/
6.1.1 定时器 /计数器的结构
8051单片机内部设有两个 16位可编程定时器 /计数器,简称为定时器 0(T0)和定时器 1(T1)。
16位的定时器 /计数器分别由两个 8位寄存器组成,即,T0
由 TH0和 TL0构成,T1由 TH1和 TL1构成。每个寄存器均可单独访问,这些寄存器是用于存放定时初值或计数初值的。
有一个 8位的定时器方式寄存器 TMOD和一个 8位的定时器控制寄存器 TCON。这些寄存器之间是通过内部总线和控制逻辑电路连接起来的,定时器 /计数器的工作方式、定时时间和启停控制通过由指令来确定这些寄存器的状态来实现。
TMOD主要用于设定 定时器的工作方式,TCON主要用于控制 定时器的启动与停止,并保存 T0,T1的 溢出和中断标志 。
http://www.wenyuan.com.cn/webnew/
6.1.1 定时器 /计数器的结构定时器 /计数器结构框图
http://www.wenyuan.com.cn/webnew/
6.1.2 定时器 /计数器的原理
16位的定时器 /计数器实质上是一个加 l计数器,可实现 定时和 计数 两种功能,其功能由软件控制和切换。定时器属硬件定时和计数,是单片机中效率高而且工作灵活的部件。
在定时器 /计数器开始工作之前,CPU必须将一些命令 (称为控制字 )写入定时器 /计数器。将控制字写入定时器 /计数器的过程叫 定时器 /计数器的初始化 。
在初始化程序中,要将 工作方式控制字 写入定时器方式寄存器 (TMOD),工作状态控制字 (或相关位 )写入定时器控制寄存器 (TCON),赋 定时 /计数初值 给 TH0(TH1)和 TL0(TL1)。
http://www.wenyuan.com.cn/webnew/
6.1.2 定时器 /计数器的原理
定时器 /计数器的定时功能。
计数器的加 1信号由振荡器的 12分频信号产生,即 每过一个机器周期,计数器加 1,直至计满溢出。
定时器的定时时间与系统的时钟频率有关。因一个机器周期等于 12个时钟周期,所以 计数频率应为系统时钟频率的十二分之一 。如果晶振频率为 12MHz,则机器周期为 1?s。
通过改变定时器的定时初值,并适当选择定时器的长度 (8
位,13位或 16位 ),可以调整定时时间。
http://www.wenyuan.com.cn/webnew/
6.1.2 定时器 /计数器的原理
定时器 /计数器的计数功能。
通过外部计数输入引脚 T0(P3.4)和 T1(P3.5)对外部信号计数,外部脉冲的下降沿将触发计数。计数器在每个机器周期的 S5P2期间采样引脚输入电平,若一个机器周期 S5P2期间采样值为 1,下一个机器周期 S5P2期间采样值为 0,则计数器加 1,再下一个机器周期 S3P1期间,新的计数值装入计数器。
因检测一个由 1至 0的跳变需要两个机器周期,故 外部信号的最高计数频率为时钟频率的二十四分之一 。如果晶振频率为 12MHz,则最高计数频率为 0.5MHz。虽然对外部输入信号的占空比无特殊要求,但为了确保给定电平在变化前至少被采样一次,外部计数脉冲的高电平与低电平保持时间均需在一个机器周期以上 。
http://www.wenyuan.com.cn/webnew/
6.1.3 定时器 /计数器的功能定时器 /计数器具有定时和计数两种功能,应用范围如下。
1,定时与延时控制方面可产生定时中断信号,以设计出各种不同频率的信号源;
产生定时扫描信号,对键盘进行扫描以获得控制信号,对显示器进行扫描以不间断地显示数据。
2,测量外部脉冲方面对外部脉冲信号进行计数可测量脉冲信号的宽度、周期,
也可实现自动计数。
3,监控系统工作方面对系统进行定时扫描,当系统工作异常时,使系统自动复位,重新启动以恢复正常工作。
http://www.wenyuan.com.cn/webnew/
6.2 定时器 /计数器的控制
6.2.1 定时器方式寄存器 TMOD
6.2.2 定时器控制寄存器 TCON
http://www.wenyuan.com.cn/webnew/
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(定时器 0)。
http://www.wenyuan.com.cn/webnew/
6.2.1 定时器方式寄存器 TMOD
(2) C/T,功能选择位 。
C/T=0时,以定时器方式工作。
C/T=1时,以计数器方式工作。
(3) M1,M0,方式选择位 。
定时器工作方式选择位定义
M1 M0 工作方式 功能描述
0 0 方式 0 13位计数器
0 1 方式 1 16位计数器
1 0 方式 2 自动重装初值 8位计数器
1 1 方式 3 定时器 0:分为两个独立的 8位计数器定时器 1:无中断的计数器
http://www.wenyuan.com.cn/webnew/
6.2.2 定时器控制寄存器 TCON
定时器控制寄存器 TCON的作用是控制定时器的启动与停止,
并保存 T0,T1的溢出和中断标志。
TCON的格式,
各位的功能说明:
(1) TF1(TCON.7),定时器 1溢出标志位 。当定时器 1计满溢出时,由硬件自动使 TF1置 1,并申请中断。对该标志位有两种处理方法,一种是以中断方式工作,即 TF1置 1并申请中断,响应中断后,执行中断服务程序,并由硬件自动使
TF1清 0;另一种以查询方式工作,即通过查询该位是否为
1来判断是否溢出,TF1置 1后必须用软件使 TF1清 0。
http://www.wenyuan.com.cn/webnew/
6.2.2 定时器控制寄存器 TCON
各位的功能说明:
(2) TR1(TCON.6),定时器 1启停控制位 。
GATE=0时,用软件使 TR1置 1即启动定时器 1,若用软件使
TR1清 0则停止定时器 1。
GATE=1时,用软件使 TR1置 1的同时外部中断 INT1的引脚输入高电平才能启动定时器 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触发方式选择位 。
http://www.wenyuan.com.cn/webnew/
6.3 定时器 /计数器的四种工作方式及应用
6.3.1 定时器 /计数器的初始化
6.3.2 方式 0及应用实例
6.3.3 方式 1及应用实例
6.3.4 方式 2及应用实例
6.3.5 方式 3
http://www.wenyuan.com.cn/webnew/
6.3.1 定时器 /计数器的初始化
1,定时器 /计数器的初始化步骤定时器 /计数器是一种可编程部件,在使用定时器 /计数器前,一般都要对其进行初始化,以确定其以特定的功能工作。初始化的步骤如下。
(1) 确定定时器 /计数器的工作方式,确定方式控制字,并写入
TMOD。
(2) 预置定时初值或计数初值,根据定时时间或计数次数,计算定时初值或计数初值,并写入 TH0,TL0或 TH1,TL1。
(3) 根据需要开放定时器 /计数器的中断,给 IE中的相关位赋值。
(4) 启动定时器 /计数器,给 TCON中的 TR1或 TR0置 1。
http://www.wenyuan.com.cn/webnew/
6.3.1 定时器 /计数器的初始化
2,定时初值或计数初值的计算方法不同工作方式的定时初值或计数初值的计算方法如下表所示。
表中 T 表示定时时间,T机 表示机器周期。
工作方式 计数位数 最大计数值 最大定时时 间 定时初值计算公 式 计数初值计算公式方式 0 13 213=8192 213?T机 X=213-T/T机 X=213-计数值方式 1 16 216=65536 216?T机 X=216-T/T机 X=216-计数值方式 2 8 28=256 28?T机 X=28-T/T机 X=28-计数值
http://www.wenyuan.com.cn/webnew/
6.3.1 定时器 /计数器的初始化
【 例 1】 用定时器 0方式 0,定时 5ms,以中断方式工作,进行程序初始化设计,晶振频率为 6MHz。
解:用定时器 0方式 0时,定时器 /计数器方式寄存器 TMOD低 4
位中的 M1M0应取 00;可设定为软件启动定时器,故 GATE
取 0;因用定时功能,C/T取 0;定时器方式寄存器 TMOD高
4位为无关位,一般都取 0,所以 TMOD应为 00H。
晶振频率为 6MHz,T机 =12/fosc=12/(6?106)=2?s
定时初值 X=213-T/T机 =213-5?103/2=8192-2500=5692
=163CH=1011000111100B
因 TL0的高 3位未用,对计算出的定时初值 X要进行修正,
即在低 5位前插入 3个 0,修正后的定时初值
X=1011000100011100B=B11CH
http://www.wenyuan.com.cn/webnew/
6.3.1 定时器 /计数器的初始化定时器以中断方式工作,故将中断总允许位 EA和定时器 0的中断允许位 ET0置 1。
参考程序:
75 89 00 MOV TMOD,#00H ;置定时器 0为工作方式 0
75 8C B1 MOV TH0,#0B1H ;定时初值的高 8位
75 8A 1C MOV TL0,#1CH ;定时初值的低 8位
D2 AF SETB EA ;开放中断总允许位
D2 A9 SETB ET0 ;开放定时器 0的中断允许位
D2 8C SETB TR0 ;启动定时器 0
http://www.wenyuan.com.cn/webnew/
6.3.2 方式 0及应用实例
在方式 0下,以定时器 0为例,定时器 /计数器是一个由 TH0
中的 8位和 TL0中的低 5位组成的 13位加 1计数器 (TL0中的高
3位不用 );若 TL0中的第 5位有进位,直接进到 TH0中的最低位。定时器 /计数器 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计数器停止计数。
http://www.wenyuan.com.cn/webnew/
6.3.2 方式 0及应用实例振荡器 12 分频
T H0
(8 位 )
T L 0
(5 位 )
T F 0
1
&
≥ 1
C/T =0
C/T =1
T 0 (P 3,4 )
T R0
G A T E
IN T 0 (P 3,2 )
中断 定时器 /计数器 0方式 0逻辑结构
C/T
C/T
http://www.wenyuan.com.cn/webnew/
6.3.2 方式 0及应用实例
【 例 2】 在 P1.0输出周期为 1 ms(频率 1kHz)的方波,采用定时器 1
方式 0设计程序,晶振频率为 12MHz。
解:根据题意,只要使 P1.0每隔 500?s取反一次即可得到周期 1 ms
的方波,因而 T1的定时时间为 500?s。
用定时器 1方式 0时,定时器 /计数器方式寄存器 TMOD高 4位中的 M1M0应取 00;可设定为软件启动定时器,故 GATE取 0;因为用定时功能,C/T取 0;定时器方式寄存器 TMOD低 4位为无关位,一般都取 0,所以 TMOD应为 00H。
晶振频率为 12MHz,T机 =12/fosc=12/(12?106)=1?s
定时初值 X=213-T/T机 =213-500/1=8192-500=7692
=1E0CH=1111000001100B
因 TL1的高 3位未用,对计算出的定时初值 X要进行修正,即在低 5位前插入 3个 0,修正后的定时初值
X=1111000000001100B=F00CH
http://www.wenyuan.com.cn/webnew/
6.3.2 方式 0及应用实例地址 机器码 程序 注释ORG 0000H
0000H 02 00 50 LJMP MAIN
ORG 0050H
0050H D2 90 MAIN,SETB P1.0 ;置 P1.0初始状态
0052H 75 89 00 MOV TMOD,#00H ;置定时器 1为工作方式 0
0055H 75 8D F1 MOV TH1,#0F0H ;置 500?s定时初值
0058H 75 8B 0C MOV TL1,#0CH
005BH D2 8E SETB TR1 ;启动定时器 1
005DH 10 8F 02 LP1,JBC TF1,LP2 ;查询计数溢出
0060H 80 FB SJMP LP1 ;未到 500?s继续计数
0062H 75 8D F1 LP2,MOV TH1,#0F0H ;重新置 500?s定时初值
0065H 75 8B 0C MOV TL1,#0CH
0068H B2 90 CPL P1.0 ;输出取反
006AH 80 E4 SJMP LP1 ;重复循环
END
参考程序:
http://www.wenyuan.com.cn/webnew/
6.3.2 方式 0及应用实例
【 例 3】 P1口做输出口,控制八只灯 (P1口输出低电平时灯被点亮 ),同一时间只有两盏灯点亮,按一定的规律每隔 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的溢出标志位 以查询方式工作 。
http://www.wenyuan.com.cn/webnew/
主程序:
ORG 0000H
0000H 21 50 AJMP MAIN
ORG 0150H
0150H 7A 06 MAIN,MOV R2,#06H
0152H 74 FC MOV A,#0FCH ;灯点亮的初始状态
0154H F5 90 NEXT,MOV P1,A
0156H 51 00 ACALL DELAY
0158H 23 RL A ;点亮左边一盏灯
0159H DA F9 DJNZ R2,NEXT
015BH 7A 06 MOV R2,#06H
015DH F5 90 NEXT1,MOV P1,A
015FH 03 RR A ;点亮右边一盏灯
0160H 51 00 ACALL DELAY
0162H DA F9 DJNZ R2,NEXT1
0164H 80 EA SJMP MAIN
http://www.wenyuan.com.cn/webnew/
延时子程序:
ORG 0200H
0200H 79 C8 DELAY,MOV R1,#200 ;置 5ms计数循环初值
0202H 75 89 00 MOV TMOD,#00H ;置定时器 0为工作方式 0
0205H 75 8C B1 MOV TH0,#0B1H ;置 5ms定时初值
0208H 75 8A 1C MOV TL0,#1CH
020BH D2 8C SETB TR0 ;启动定时器 1
020DH 10 8D 02 LP1,JBC TF0,LP2 ;查询计数溢出
0210H 80 FB SJMP LP1 ;未到 5ms继续计数
0212H 75 8C B1 LP2,MOV THO,#0B1H ;重新置 5ms定时初值
0215H 75 8A 1C MOV TL0,#1CH
0218H D9 F3 DJNZ R1,LP1 ;未到 1s继续循环
021AH 22 RET ;返回主程序
END
http://www.wenyuan.com.cn/webnew/
6.3.2 方式 0及应用实例
【 例 4】 每隔 1秒使 P1.1输出取反一次同时使片内 RAM区 20H单元中的内容加 1,采用定时器 0方式 0设计程序,晶振频率
6MHz。
解:根据题意,定时时间为 1s,因方式 0最大计数值为 8192,机器周期为 2?s,则方式 0的最大定时时间为 16.384ms;显然不能满足本题的定时时间要求,因而需另设软件计数器,即在硬件定时的基础上再加软件计数。
设硬件定时时间 10 ms,软件计数的次数则为 100次。
定时初值 X=213-T/T机 =213-10?103/2=8192-5000
=3192=0C78H=0110001111000B
因 TL0的高 3位未用,对计算出的定时初值 X要进行修正,即在低 5位前插入 3个 0,修正后的定时初值
X=0110001100011000B=6318H
定时器 以中断方式工作 。
http://www.wenyuan.com.cn/webnew/
主程序:
ORG 0000H
0000H 02 00 50 LJMP MAIN
ORG 000BH ;定时器 0的中断入口地址
000BH 02 02 00 LJMP SER0 ;指向中断服务程序
ORG 0030H
0030H D2 90 MAIN,SETB P1.1 ;置 P1.1初始状态
0032H 75 20 00 MOV 20H,#00H ;20H单元清 0
0035H 78 64 MOV R0,#64H ;软件计数 100次
0037H 75 89 00 MOV TMOD,#00H ;置定时器 0为工作方式 0
003AH 75 8C 63 MOV TH0,#63H ;置 10ms定时初值
003DH 75 8A 18 MOV TL0,#18H
0040H D2 AF SETB EA
0042H D2 A9 SETB ET0
0044H D2 8C SETB TR0
0046H 80 FE SJMP $
参考程序:
http://www.wenyuan.com.cn/webnew/
中断服务程序:
ORG 0000H
0000H 02 00 50 LJMP MAIN
ORG 0100H
0100H 75 8C 63 SER0,MOV TH0,#63H ;重新置 10ms定时初值
0103H 75 8A 18 MOV TL0,#18H
0106H D8 04 DJNZ R0,EXIT ;未到 1s继续计数
0108H B2 91 CPL P1.1
010AH 05 20 INC R0
010CH 32 EXIT,RETI
END
参考程序:
http://www.wenyuan.com.cn/webnew/
6.3.3 方式 1及应用实例
在方式 1下,以定时器 0为例,定时器 /计数器是一个由 TH0
中的 8位和 TL0中的 8位组成的 16位加 1计数器 。
方式 1与方式 0基本相似,最大的区别是方式 1的加 1计数器位数是 16位。
振荡器 12 分频
T H0
(8 位 )
T L 0
(8 位 )
T F 0
1
&
C/T =0
C/T =1
T 0 (P 3,4 )
T R0
G A T E
IN T 0 (P 3,2 )
中断
≥ 1
定时器 /计数器 0方式 1逻辑结构
C/T
C/T
http://www.wenyuan.com.cn/webnew/
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;定时器方式寄存器 TMOD低 4位取 0,所以 TMOD应为 90H。
定时初值为 00H。
定时器以查询方式工作。
http://www.wenyuan.com.cn/webnew/
ORG 0000H
0000H 02 00 50 LJMP MAIN
ORG 0050H
0050H 75 40 00 MAIN,MOV 40H,#00H ;数据存储单元清 0
0053H 75 41 00 MOV 41H,#00H
0056H 75 42 00 MOV 42H,#00H
0059H 75 89 90 MOV TMOD,#90H ;置定时器 1为工作方式 1
005CH 75 8D 00 MOV TH1,#00H ;定时初值清 0
005FH 75 8B 00 MOV TL1,#00H
0062H 20 B3 FD JB P3.3,$ ;查询低电平
0065H D2 8E SETB TR1 ;准备启动定时器 1
0067H 30 B3 FD JNB P3.3,$ ;高电平到,启动定时器 1
参考程序:
http://www.wenyuan.com.cn/webnew/
006AH 10 8F 05 LP1,JBC TF1,LP2
006DH 20 B3 FA JB P3.3,LP1 ;低电平到,停止定时器 1
0070H 80 04 SJMP LP3
0072H 05 40 LP2,INC 40H ;存储区最高位加 1
0074H 80 F4 SJMP LP1
0076H C2 8E LP3,CLR TR1 ;停止定时器 1
0078H 85 8D 41 MOV 41H,TH1 ;计数值高 8位放入存储区
007BH 85 8B 42 MOV 42H,TL1 ;计数值低 8位放入存储区
007EH 12 01 00 LCALL DIS ;调用显示子程序
0081H 80 DD SJMP MAIN ;重复循环
ORG 0100H
DIS,(略 ) ;显示子程序
END
参考程序:
http://www.wenyuan.com.cn/webnew/
6.3.3 方式 1及应用实例
【 例 6】 P1.0口做输出口,接一只喇叭,利用定时器中断方式编写程序,使喇叭放出悦耳的音乐。晶振频率 6MHz。
解:音乐是由高低长短相同或不同的音符,按一定的规律组织起来的。每个音符都包括两个要素:第一是音调,即音符的频率,
频率越高音调越高,频率越低音调越低;第二是节拍,即音符的时间长短。
利用定时器 /计数器可以产生不同频率的音频脉冲,也可以控制音频脉冲的延时时间。不同的音符对应的频率不同,用定时器
T1方式 1可以产生与各音符对应频率的方波,C调各音符频率与定时器定时初值对应关系 如下表所示;不同的节拍对应的延时时间不同,通过循环调用一个基本延时子程序可以产生不同的节拍,各曲调与节拍的时间对应关系 如下表所示。
http://www.wenyuan.com.cn/webnew/
C调各音符频率与定时器定时初值对照表曲调 4/4 3/4 2/4
1/4拍时间 (ms) 125 187 250
1/8拍时间 (ms) 62 94 125
曲调与节拍的时间对照表
http://www.wenyuan.com.cn/webnew/
(1) 根据歌谱编制唱名与唱名码的对照表。
把歌谱中所有的不同音符的频率相对应的定时器定时初值进行编码,称为 唱名码,唱名与唱名码对照表 如下表所示。
生日快乐歌歌谱如下,1=C 3/4
唱名与唱名码对照表
http://www.wenyuan.com.cn/webnew/
(2) 编制节拍与节拍码对照表。
根据曲调和歌谱要求,确定最小节拍数为 1/4拍,基本延时子程序延时时间为 187 ms;对不同节拍对应的循环次数进行编码,称为 节拍码,节拍与节拍码对照表 如下表所示。
节拍与节拍码对照表节拍数 1/4拍 1/2拍 3/4拍 1拍 1 1/4拍 1 1/2拍 2拍 2 1/2拍 3拍节拍码 1 2 3 4 5 6 8 9 C
http://www.wenyuan.com.cn/webnew/
(3) 编制简谱码表。
歌谱中每个音符中与频率和延时有关的参数可用一个字节来表述,称为简谱码,字节的高 4位存放与音符的频率相对应的唱名码,字节的低 4位存放与音符的节拍相对应的节拍码。根据歌谱,编制每个音符的 简谱码,并编成简谱码表。
歌谱中每个音符的简谱码可做成表格存放到程序存储器中,
唱名码、节拍码也可做成表格存放到程序存储器中。编写程序通过查表从表格中得到简谱码,从简谱码中分解出唱名码和节拍码,再通过查表从表格中得到唱名码和节拍码所包含的定时初值和循环次数。
http://www.wenyuan.com.cn/webnew/
参考程序:主程序
ORG 0000H
0000H 02 00 30 LJMP MAIN
ORG 001BH
001BH 02 01 50 LJMP INT1
ORG 0030H
0030H 75 81 30 MAIN,MOV SP,#30H
0033H 75 89 10 MOV TMOD,#10H ;设 T1工作方式 1
0036H 75 A8 88 MOV IE,#88H ;允许中断
0039H 75 40 00 LOOP1,MOV 40H,#00H ;简谱码指针清 0
003CH E5 40 LOOP2,MOV A,40H ;简谱码指针放入 A
003EH 90 02 00 MOV DPTR,#TABLE1
0041H 93 MOVC A,@A+DPTR ;到表格 TABLE1中取简谱码
0042H F9 MOV R1,A ;取到的简谱码暂存于 R1
0043H 60 2B JZ FINISH ;简谱码是 00H(结束码 ),转移
0045H 54 0F ANL A,#0FH ;不是 00H,取低 4位 (节拍码 )
0047H FA MOV R2,A ;将节拍码存入 R2中
0048H E9 MOV A,R1 ;将取到的简谱码再放入 A
0049H C4 SWAP A ;高低 4位交换
004AH 54 0F ANL A,#0FH ;取低 4位 (唱名码 )
004CH 70 04 JNZ SING ;唱名码不是 00H,转移
004EH C2 8E CLR TR1 ;唱名码是 00H,则不发音
0050H 80 17 SJMP WY ;转移至 WY
http://www.wenyuan.com.cn/webnew/
参考程序:主程序
0052H 14 SING,DEC A ;唱名码减 1
0053H F5 50 MOV 50H,A ;唱名码存入 50H
0055H 23 RL A ;乘 2
0056H 90 02 50 MOV DPTR,#TABLE2
0059H 93 MOVC A,@A+DPTR ;到表格 TABLE2取计数值高 8位
005AH F5 8D MOV TH1,A ;计数值高 8位存入 TH1
005CH F5 51 MOV 51H,A ;计数值高 8位存入 51H
005EH E5 50 MOV A,50H ;将取到的唱名码再放入 A
0060H 23 RL A ;乘 2
0061H 04 INC A ;唱名码加 1
0062H 93 MOVC A,@A+DPTR ;到表格 TABLE2取计数值低 8位
0063H F5 8B MOV TL1,A ;计数值低 8位存入 TL1
0065H F5 52 MOV 52H,A ;计数值低 8位存入 52H
0067H D2 8E SETB TR1 ;启动 T1
0069H 12 01 00 WY,LCALL DELAY ;调用基本单位时间 (1/4拍 )
006CH 05 40 INC 40H ;简谱码指针加 1
006EH 80 CC SJMP LOOP2 ;取下一个简谱码
0070H C2 8E FINISH,CLR TR1 ;停止 T1
0072H 80 C5 SJMP LOOP1 ;重复播放
http://www.wenyuan.com.cn/webnew/
参考程序:延时子程序
ORG 0100H ;基本单位时间子程序 (1/4拍 )
0100H 7C C8 DELAY,MOV R4,#200 ;延时 187ms的循环次数
0102H 7D E9 LP1,MOV R5,#232 ;延时 0.935ms的循环次数
0104H DD FE DJNZ R5,$
0106H DC FA DJNZ R4,LP1
0108H DA F6 DJNZ R2,DELAY ;节拍数未到,转移
010AH 22 RET
ORG 0150H
0150H C0 E0 INT1,PUSH ACC ;将 A的值暂存于堆栈
0152H C0 D0 PUSH PSW ;将 PSW的值暂存于堆栈
0154H 85 52 8B MOV TL1,52H ;重置定时器初值
0157H 85 51 8D MOV TH1,51H
015AH B2 90 CPL P1.0 ;将 P1.0取反
015CH D0 D0 POP PSW ;至堆栈取回 PSW值
015EH D0 E0 POP ACC ;至堆栈取回 A值
0160H 32 RETI ;返回主程序
http://www.wenyuan.com.cn/webnew/
参考程序:简谱码表
ORG 0200H
0200H TABLE1:DB 82H,01H,81H,94H,84H ;简谱码表
0205H DB 0B4H,0A4H,04H
0208H DB 82H,01H,81H,94H,84H
020DH DB 0C4H,0B4H,04H
0210H DB 82H,01H,81H,0F4H,0D4H
0215H DB 0B4H,0A4H,94H
0218H DB 0E2H,01H,0E1H,0D4H,0B4H
021DH DB 0C4H,0B4H,04H
0220H DB 82H,01H,81H,94H,84H
0225H DB 0B4H,0A4H,04H
0228H DB 82H,01H,81H,94H,84H
022DH DB 0C4H,0B4H,04H
0230H DB 82H,01H,81H,0F4H,0D4H
0235H DB 0B4H,0A4H,94H
0238H DB 0E2H,01H,0E1H,0D4H,0B4H
023DH DB 0C4H,0B4H,04H
0240H DB 00H
http://www.wenyuan.com.cn/webnew/
参考程序:唱名码表
ORG 0250H
0250H TABLE2:DW FD82H,FDC8H,FE06H ;唱名码表
0256H DW FE22H,FE56H,FE85H
025CH DW FE9AH,FEB2H,FEE4H
0262H DW FF03H,FF11H,FF2BH
0268H DW FF42H,FF4DH,FF61H
END ;程序结束
http://www.wenyuan.com.cn/webnew/
6.3.3 方式 1及应用实例
【 例 6】 P1.0口做输出口,接一只喇叭,利用定时器中断方式编写程序,使喇叭放出悦耳的音乐。晶振频率 6MHz。
解:音乐是由高低长短相同或不同的音符,按一定的规律组织起来的。每个音符都包括两个要素:第一是音调,即音符的频率,
频率越高音调越高,频率越低音调越低;第二是节拍,即音符的时间长短。
利用定时器 /计数器可以产生不同频率的音频脉冲,也可以控制音频脉冲的延时时间。不同的音符对应的频率不同,用定时器
T1方式 1可以产生与各音符对应频率的方波,C调各音符频率与定时器定时初值对应关系 如下表所示;不同的节拍对应的延时时间不同,通过循环调用一个基本延时子程序可以产生不同的节拍,各曲调与节拍的时间对应关系 如下表所示。
http://www.wenyuan.com.cn/webnew/
6.3.4 方式 2及应用实例
在方式 1下,以定时器 0为例,定时器 /计数器是一个能 自动装入初值的 8位加 1计数器,TH0中的 8位用于存放定时初值或计数初值,TL0中的 8位用于加 1计数器。
方式 2与方式 0基本相似,最大的区别除方式 2的加 1计数器位数是 8位外,加 1计数器溢出后,硬件使 TF0自动置 1,同时 自动将 TH0中存放的定时初值或计数初值再装入 TL0,继续计数。
重新装入振荡器 12 分频
T L 0
(8 位 )
T H 0
(8 位 )
T F 0
1
&
C/T =0
C/T =1
T 0 (P 3,4 )
T R0
G A T E
IN T 0 (P 3,2 )
中断
≥ 1
定时器 /计数器 0方式 2逻辑结构
C/T
C/T
http://www.wenyuan.com.cn/webnew/
6.3.4 方式 2及应用实例
【 例 7】 P1.1输出脉冲宽度调制 (PWM)信号,即脉冲频率为 1kHz、
占空比为 2∶ 5的矩形波,以控制直流电动机按一定的速度转动,
晶振频率为 6MHz。
解:直流电动机具有优良的调速特性,调速方法也从模拟化逐步向数字化转化,采用脉冲宽度调制 (PWM)的方法可以实现平滑调速,电机转速由脉冲的占空比决定。
频率为 1kHz,周期为 1ms,占空比为 2:5的 P1.1输出矩形波的波形如下图所示。
对 P1.1取反时,由于高、低电平的时间不同,可找出一个时间基准,如 100?s,200?s。
本例设定时间基准 200?s,即定时时间为 200?s。
定时初值 X=28-T/T机 =28-200/2=256-100=156=9CH
高电平的软件计数为 2,低电平的软件计数为 3。
定时器以查询方式工作。
http://www.wenyuan.com.cn/webnew/
6.3.4 方式 2及应用实例ORG 0000H0000H 02 00 30 LJMP MAIN
ORG 000BH ;定时器 0的中断入口地址
000BH 02 00 50 LJMP INT0
ORG 0030H
0030H D2 91 MAIN,SETB P1.1 ;设置 P1.1初始状态
0032H 7A 02 MOV R2,#02H ;给 R2赋高电平计数值
0034H 75 89 02 MOV TMOD,#02H ;定时器 0工作方式 2
0037H 75 8C 9C MOV TH0,#9CH ;置 200?s定时初值
003AH 75 8A 9C MOV TL0,#9CH
003DH D2 AF SETB EA
003FH D2 A9 SETB ET0
0041H D2 8C SETB TR0
0043H 80 FE SJMP $ ;动态暂停主程序:
http://www.wenyuan.com.cn/webnew/
6.3.4 方式 2及应用实例
ORG 0050H
0050H DA 0B INT0,DJNZ R2,EXIT
0052H B2 91 CPL P1.1 ;P1.1取反
0054H 30 91 04 JNB P1.1,L1 ;判断 P1.1电平高低
0057H 7A 02 MOV R2,#02H ;若 P1.1=1,给 R2赋高电平计数值
0059H 80 02 SJMP EXIT
005BH 7A 04 L1,MOV R2,#03H ;若 P1.1=0,给 R2赋低电平计数值
005DH 32 EXIT,RETI
END
1 m s
6 0 0? s 4 0 0? s
定时器 0中断服务程序:
矩形波的波形图
http://www.wenyuan.com.cn/webnew/
6.3.4 方式 2及应用实例
【 例 8】 定时器 0外部输入端 (P3.4) 作为计数脉冲输入端,利用手控单脉冲信号作为计数输入脉冲,编写控制程序,每输入十个脉冲,工作寄存器 R0的内容加一,晶振频率为 6MHz。
解:用定时器 0方式 2时,定时器 /计数器方式寄存器 TMOD低 4
位中的 M1M0应取 10;
可设定为软件启动定时器,故 GATE取 0;
因用计数功能,C/T取 1;
定时器方式寄存器 TMOD高 4位为无关位,一般都取 0,所以
TMOD应为 06H。
计数初值 X=28-计数值 =28-10=256-0=246=F6H
定时器 以中断方式工作 。
http://www.wenyuan.com.cn/webnew/
参考程序:
ORG 0000H
0000H 02 00 50 LJMP MAIN
ORG 000BH ;定时器 0的中断入口地址
000BH 02 02 00 LJMP SER0 ;转向中断服务程序
ORG 0050H
0050H 78 00 MAIN,MOV R0,#00H
0052H 75 89 06 MOV TMOD,#06H ;置计数器 0为工作方式 2
0055H 75 8C F6 MOV TH0,#0F6H ;置 10次计数初值
0058H 75 8A F6 MOV TL0,#0F6H
005BH D2 AF SETB EA
005DH D2 A9 SETB ET0
005FH D2 8C SETB TR0
0061H 80 FE SJMP $
ORG 0200H
0200H 08 SER0,INC R0 ;中断服务程序
0201H 32 RETI
END
http://www.wenyuan.com.cn/webnew/
6.3.4 方式 2及应用实例
【 例 9】 利用定时器 /计数器扩展一个外部中断源,用手控单脉冲信号作为外部中断信号,P1口控制八只灯 (P1口输出低电平时灯被点亮 ),同一时间只有一盏灯点亮,编写控制程序,
每发一个单脉冲信号,循环点亮下一盏灯。
解:定时器 /计数器 0以计数功能工作,当计数初值为 FFH时,只要外部计数输入引脚 T0(P3.4)输入一个计数脉冲,8位加 1计数器 TL0变为 00H,TF0由硬件自动置 1,并申请中断。利用这一特点,将外部中断请求信号作为计数脉冲送入外部计数输入引脚 T0(P3.4),就可实现中断功能。
定时器 /计数器 0以方式 2工作 。
http://www.wenyuan.com.cn/webnew/
参考程序:
ORG 0000H
0000H 01 50 AJMP MAIN
ORG 000BH ;定时器 0的中断入口地址
000BH 21 00 AJMP INT ;转向中断服务程序
ORG 0050H
0050H 75 89 06 MAIN,MOV TMOD,#06H ;置计数器 0为工作方式 2
0053H 75 8C FF MOV TH0,#0FFH
0056H 75 8A FF MOV TL0,#0FFH
0058H D2 AF SETB EA
005AH D2 A9 SETB ET0
005CH D2 8C SETB TR0
005EH 74 FE MOV A,#0FEH
0060H F5 90 MOV P1,A
0062H 80 FE SJMP $
ORG 0100H
0100H 23 INT,RL A ;中断服务程序
0101H F5 90 MOV P1,A
0103H 32 RETI
END
http://www.wenyuan.com.cn/webnew/
6.3.5 方式 3
1,T0方式 3的结构特点
在方式 3下,定时器 0分为两个独立的 8位加 1计数器 TH0和
TL0。其中 TL0既可用于定时,也能用于计数; TH0只能用于定时。定时器 /计数器 0方式 3逻辑结构如下图所示。
在方式 3下,加 1计数器 TL0占用了 T0除 TH0外的全部资源,
原 T0的控制位和信号引脚的控制功能与方式 0、方式 1相同;
与方式 2相比,只是不能自动将定时初值或计数初值再装入
TL0,而必须用程序来完成。 加 1计数器 TH0只能用于简单的内部定时功能,它占用了原 T1的控制位 TR1和 TF1,同时占用了 T1中断源。
http://www.wenyuan.com.cn/webnew/
6.3.5 方式 3
振荡器 12 分频
T L 0
(8 位 )
T H 0
(8 位 )
T F 0
1
&
C/T =0
C/
T
=1
T 0 (P 3,4 )
T R0
G A T E
IN T 0 (P 3,2 )
中断
T F1
中断 振荡器 12 分频
T R1
≥ 1
定时器 /计数器 0方式 3逻辑结构
C/T
C/T
http://www.wenyuan.com.cn/webnew/
6.3.5 方式 3
2,T0方式 3下 T1的结构特点
T1不能工作在方式 3下,因为在 T0工作在方式 3下时,T1的控制位 TR1,TF1和中断源被 T0占用。 T1可工作在方式 0、
方式 1、方式 2下,但其输出直接送入串行口。设置好 T1的工作方式,T1就自动开始计数;若要停止计数,可将 T1设为方式 3。
T1通常用作串行口波特率发生器,以方式 2工作会使程序简单一些。
http://www.wenyuan.com.cn/webnew/
6.3.5 方式 3
振荡器 12 分频
T L1
(8 位 )
T H1
(8 位 )
C/
T
=0
C/
T
=1
T 1 (P 3,5 )
(c ) T 1 方式 2
串行口重新装入振荡器 12 分频
T H1
(8 位 )
T L1
(8 位 )
C/
T
=0
C/
T
=1
T 1 (P 3,5 )
(b ) T 1 方式 1
串行口振荡器 12 分频
T H1
(8 位 )
T L1
(5 位 )
C/
T
=0
C/
T
=1
T 1 (P 3,5 )
(a ) T 1 方式 0
串行口定时器 /
计数器 0
方式
3下的 T1
逻辑结构
C/T
C/T
C/T
C/T
C/T
C/T
http://www.wenyuan.com.cn/webnew/
本章小结
8051单片机共有两个 可编程的定时器 /计数器,分别称为定时器 0和定时器 1,它们都是 16位加 1计数器。定时器 /计数器的工作方式、定时时间、计数值和启停控制由程序来确定。
定时器 /计数器有四种 工作方式,工作方式由定时器方式寄存器 TMOD中的 M1,M0位确定。方式 0是 13位计数器,方式 1是 16位计数器,方式 2是自动重装初值 8位计数器;方式 3时,定时器 0被分为两个独立的 8位计数器,定时器 1是无中断的计数器,此时定时器 1一般用作串行口波特率发生器。
定时器 /计数器有 定时 和 计数 两种功能,由定时器方式寄存器 TMOD中的 C/T位确定。当定时器 /计数器工作在定时功能时,通过对单片机内部的时钟脉冲计数来实现可编程定时;当定时器 /计数器工作在计数功能时,通过对单片机外部的脉冲计数来实现可编程计数。
http://www.wenyuan.com.cn/webnew/
本章小结
当定时器 /计数器的加 1计数器计满溢出时,溢出标志位
TF1(TF0)由硬件自动置 1,对该标志位有两种处理方法。一种是以 中断方式 工作,即 TF1(TF0)置 1并申请中断,响应中断后,执行中断服务程序,并由硬件自动使 TF1(TF0)清 0;
另一种以 查询方式 工作,即通过查询该位是否为 1来判断是否溢出,TF1(TF0)置 1后必须用软件使 TF1清 0。
定时器 /计数器的初始化 实际上就是对定时器 /计数器进行编程,以实现设计者所要求的控制功能。这通过对 TMOD、
TH0(TH1),TL0(TL1),IE,TCON专用寄存器中相关位的设置来实现,其中 IE,TCON专用寄存器可进行位寻址。
http://www.wenyuan.com.cn/webnew/
习 题
1,8051单片机的定时器 /计数器的定时和计数两种功能各有什么特点?
2,当定时器 /计数器的加 1计数器计满溢出时,溢出标志位 TF1
由硬件自动置 1,简述对该标志位的两种处理方法。
3,当定时器 /计数器工作于方式 0时,晶振频率为 12MHz,请计算最小定时时间、最大定时时间、最小计数值和最大计数值。
4,8051单片机的定时器 /计数器四种工作方式各有什么特点?
5,硬件定时与软件定时的最大区别是什么?
6,根据定时器 /计数器 0方式 1逻辑结构图,分析门控位 GATE
取不同值时,启动定时器的工作过程。
http://www.wenyuan.com.cn/webnew/
习 题
7,用方式 0设计两个不同频率的方波,P1.0输出频率为 200Hz,
P1.1输出频率为 100Hz,晶振频率 12MHz。
8,P1.0输出脉冲宽度调制 (PWM)信号,即脉冲频率为 2kHz、
占空比为 7,10的矩形波,晶振频率 12MHz。
9,两只开关分别接入 P3.0,P3.1,在开关信号 4种不同的组合逻辑状态,使 P1.0分别输出频率 0.5kHz,1kHz,2kHz、
4kHz的方波,晶振频率为 12MHz。
10,有一组高电平脉冲的宽度在 50~100ms之间,利用定时器
0测量脉冲的宽度,结果存放到片内 RAM区以 50H单元为首地址的单元中,晶振频率 12MHz。
http://www.wenyuan.com.cn/webnew/
Q & A?
Thanks!