《片机定时器与计数器》由会员分享,可在线阅读,更多相关《片机定时器与计数器(47页珍藏版)》请在金锄头文库上搜索。
1、LOGO第五章 单片机定时器 与计数器 单片机定时器与计数器单片机定时器与计数器定时器定时器/计数器结构计数器结构1定时器定时器/计数器工作方式计数器工作方式2定时器定时器/计数器应用举例计数器应用举例3定时器定时器/计数器结构计数器结构1一、定时一、定时/ /计数器结构计数器结构MCS-51单片机定时器单片机定时器/计数器的逻辑结构如图计数器的逻辑结构如图5-1所示。所示。主要由工作方式寄存器主要由工作方式寄存器TMOD、控制寄存器、控制寄存器TCON和初值寄存器和初值寄存器TLX、THX等工等工作部件组成。作部件组成。等效逻辑结构图等效逻辑结构图1 1工作方式寄存器(工作方式寄存器(TMO
2、D 89H)TMOD 89H)位位D7D6D5D4D3D2D1D0位符号位符号GATEC/TM1M0GATEC/TM1M0T1方式字段方式字段T0方式字段方式字段 GATEGATE:门控位。:门控位。GATE = 0 GATE = 0 启动不受启动不受 /INT0/INT0或或 /INT1/INT1的控制;的控制;GATE = GATE = 1 1 启动受启动受 /INT0 /INT0 或或 /INT1 /INT1 的控制。的控制。C/ C/ : 外部计数器外部计数器 / / 定时器方式选择位。定时器方式选择位。C/ = 0 C/ = 0 定时方式;定时方式;C/ C/ = 1 = 1 计数方
3、式。计数方式。M1M0M1M0:工作模式选择位。:工作模式选择位。 TMODM1M0:工作模式选择位。:工作模式选择位。 M1M1 M0M0工作方式工作方式 方式说明方式说明 0 0 0 0方式方式0 01313位定时器位定时器/ /计数器计数器 0 0 1 1方式方式1 11616位定时器位定时器/ /计数器计数器 1 1 0 0方式方式2 2具有自动重装初值的具有自动重装初值的8 8位定位定时器时器/ /计数器计数器 1 1 1 1方式方式3 3T0T0为两个独立的为两个独立的8 8位计数器,位计数器,T1T1为波特率发生器为波特率发生器2、初值寄存器、初值寄存器 TH0,TL0,TH1,
4、TL151子系列单片机内有子系列单片机内有两个两个十六位十六位增一增一 定时定时 / 计数器计数器TH0计数值高八位计数值高八位TL0计数值低八位计数值低八位TH1计数值高八位计数值高八位TL1计数值低八位计数值低八位最大计数器值最大计数器值M655353 3定时定时/ /计数器控制寄存器(计数器控制寄存器(TCON 88H) TCON 88H) 位位D7D6D5D4D3D2D1D0位符号位符号TF1TR1TF0TR0IE1IT1IE0IT0TR0TR0:定时:定时 / / 计数器计数器0 0运行控制位。软件置位运行控制位。软件置位/ /复位。与复位。与GATEGATE有关有关分两种情况:分两
5、种情况: GATE = 0 GATE = 0 时:若时:若TR0 = 1TR0 = 1,开启,开启T0T0;若;若TR0 = 0TR0 = 0,停止,停止T0T0。 GATE = 1 GATE = 1 时:若时:若TR0 = 1 TR0 = 1 且且/INT0 = 1/INT0 = 1时,开启时,开启T0T0; 若若TR0 = 1 TR0 = 1 但但 /INT0 = 0/INT0 = 0,则不能开启,则不能开启T0T0。 若若TR0 = 0TR0 = 0, 停止停止T0T0计数。计数。TR1TR1:定时:定时 / / 计数器计数器1 1运行控制位。用法与运行控制位。用法与TR0TR0类似。类
6、似。TF0/TF1:TF0/TF1:定时定时/ /计数溢出标志。计数溢出标志。 1:有溢出,:有溢出,0:无溢出:无溢出IE0/IE1:IE0/IE1:外部中断请求标志。外部中断请求标志。1 1:有请求,:有请求,0 0:无请求:无请求IT0/IT1:IT0/IT1:外部中断触发方式。外部中断触发方式。1 1:下降沿,:下降沿,0 0:低电平:低电平二、定时器二、定时器/计数器的工作方式计数器的工作方式工作方式工作方式 M1M0=00M1M0=00 工作方式工作方式0 0:1313位计数。位计数。THTH的的8 8位和位和TLTL的低的低5 5位位在工作方式在工作方式0 0下,计数器的计数值由
7、下式确定:下,计数器的计数值由下式确定:2 21313-X=8192-X-X=8192-X计数值范围是:计数值范围是: 1 181928192(2 21313)定时器的定时值由下式确定:定时器的定时值由下式确定:T=N*Tcy=(8192-X)*TcyT=N*Tcy=(8192-X)*Tcy 例:单片机晶振频率例:单片机晶振频率fosc=12MHZ定时器定时器0定时定时1MS,采用,采用方式方式0时,时,TCON,TMOD,TH0,TL0的值分别是:的值分别是:TCON=0x10TMOD=0x00TH0=(81921000)/32TL0= (81921000)%32工作方式的应用工作方式的应用
8、:【例】设单片机晶振频率设单片机晶振频率fosc=6MHZfosc=6MHZ,使用定时,使用定时器器1 1以方式以方式0 0产生周期为产生周期为600s600s的等宽方波脉冲,的等宽方波脉冲,并由输出,以并由输出,以查询方式查询方式完成。完成。解:(1)计算计数初值计算计数初值. .欲产生周期为欲产生周期为600s600s的等的等宽方波脉冲,只需在端以宽方波脉冲,只需在端以300s300s为周期交替输出为周期交替输出高低电平即可,因此定时时间应为高低电平即可,因此定时时间应为300s300s。设待。设待求计数初值为求计数初值为N N,则:,则:(2 21313-N-N)210210-6-6=3
9、0010=30010-6-6N=8042=1F6AHN=8042=1F6AH01010B B用用T1T1实现。将低实现。将低5 5位位01010B=0A01010B=0A写入写入TL1TL1,将高,将高8 8位位有效值有效值11111011B=FBH11111011B=FBH写入写入TH1TH1中。中。(2 2)TMODTMOD初始化初始化为把定时为把定时/ /计数器计数器1 1设定为方式设定为方式0 0,则,则M1M0=00M1M0=00。为实现定时功能应使。为实现定时功能应使C/T=0C/T=0,为实现,为实现内部定时器启动应使内部定时器启动应使GATE=0GATE=0,因此设定工作方,因
10、此设定工作方式控制寄存器式控制寄存器TMOD=00HTMOD=00H。(3 3)由)由TR1TR1启动和停止定时器启动和停止定时器TR1=1TR1=1为启动,为启动,TR1=0TR1=0为停止为停止C语言参考程序语言参考程序 v# include /包含特殊功能寄存器库包含特殊功能寄存器库vsbit P1_7=P17; /定义口,程序中用定义口,程序中用P1_7代替。代替。vvoid main() /主函数主函数v vIE=0x00; /关中断关中断vTMOD=0x00; /工作方式设定工作方式设定vTR0=1; /启动定时启动定时vfor(;) /无限循环体无限循环体vvTH1=0xFB;T
11、L1=0x0A; /计数初值设定计数初值设定vdo while (!TF1) /查询是否溢出查询是否溢出,当当TF0=1时溢出来,则时溢出来,则跳出跳出do- while循环。循环。v P1_7=! P1_7; TF1=0; /溢出,取反,中断标志溢出,取反,中断标志TF1清清0。vv中断方式中断方式完成完成v# include /包含特殊功能寄存器库包含特殊功能寄存器库vsbit P1_7=P17; /定义口,程序中用定义口,程序中用P1_7代替。代替。vvoid main() /主函数主函数v vTMOD=0x00; /工作方式设定工作方式设定vTR0=1; vTH1=0xFB;vTL1=
12、0x0A; vET0=1;vEA=1;vwhile (1);v/启动定时启动定时vVoid T_0() interrupt 1 using 3v P1_7=! P1_7; vTH1=0xFB;vTL1=0x0A;v2.2.定时定时/ /计数器工作方式计数器工作方式1 1 M1M0=01 v在工作方式在工作方式1 1下,计数器的计数值由下式确定:下,计数器的计数值由下式确定:2 21616-X=65536-X-X=65536-X计数值范围是:计数值范围是: 1 16553665536(2 21616) 定时时间长;定时时间长;时器的定时值由下式确定:时器的定时值由下式确定:T=N*Tcy=(65
13、536-X)*TcyT=N*Tcy=(65536-X)*Tcy 定时计数器的工作方式1与方式0基本相同,区别只是方式0是13位计数器,而方式1为了16位计数器。当要求定时时间较长,13位计数器不能满足要求时,可改用方式1,用16位计数器计数。工作方式1 应用【例】设单片机晶振频率fosc=6MHZ,使用定时器1以方式1产生周期为600s的等宽方波脉冲,并由输出,以查询方式完成。该题目就是用方式1实现例5-1的功能。原理与例5-1相似,只需修改工作方式和计数初值设置即可。v(1)计算计数初值计算计数初值v欲在引脚输出周期为欲在引脚输出周期为600s的等宽方波脉冲,只需在端交替输出的等宽方波脉冲,
14、只需在端交替输出300s的的高低电平即可,因此定时时间应为高低电平即可,因此定时时间应为300s。设计数初值为。设计数初值为N,则:,则:v(65536-N)210-6=30010-6vN=65236v将计数初值将计数初值N的低的低8位位6AH写入写入TL1;将计数初值;将计数初值N的高的高8位位1FH写入写入TH1。v(2)TMOD初始化初始化v题目要求定时器题目要求定时器/计数器计数器1为工作方式为工作方式1,所以,所以M1M0=01;为实现定时功;为实现定时功能应使能应使C/=0;为实现定时器内启动,应使;为实现定时器内启动,应使GATE=0。此题目不涉及定时。此题目不涉及定时器器/计数
15、器计数器0,为方便起见,设其各控制位均为,为方便起见,设其各控制位均为0。则工作方式控制寄存器。则工作方式控制寄存器TMOD=10H。v(3)启动和停止控制启动和停止控制v因为定时器因为定时器/计数器计数器1作定时器,故当作定时器,故当TR1=1时,启动计数;当时,启动计数;当TR1=0时,时,停止计数。停止计数。v(4)中断的开放中断的开放/禁止禁止v题目中要求用查询方式检查题目中要求用查询方式检查T1的计数溢出状态,故设置的计数溢出状态,故设置IE=00H,以关中,以关中断。断。3 3、定时、定时/ /计数器工作方式计数器工作方式2 2 M1M0=10初值自动重装,将初值自动重装,将TH中
16、的数值装入中的数值装入TL中。中。v工作在方式下,计数器的计数值由下式确定:工作在方式下,计数器的计数值由下式确定: 2 28 8-X=256-X-X=256-X 计数范围为计数范围为: : 1 1256256 定时准确定时准确v定时器的定时值由下式确定:定时器的定时值由下式确定: T=N*Tcy=(256-X)*TcyT=N*Tcy=(256-X)*Tcy 工作方式的应用工作方式的应用【例例】使用定时器使用定时器T0T0以方式以方式2 2产生产生200200微秒定时,在输微秒定时,在输出周期为出周期为400400微秒的连续方波。已知晶振频率微秒的连续方波。已知晶振频率fosc=6MHzfos
17、c=6MHz。(1 1)计算计数初值)计算计数初值(256-N256-N)210210-6-6=20010=20010-6-6 N=156=9CHN=156=9CH(2 2)TMODTMOD初始化初始化工作方式工作方式2 2时,时,M1M0=10M1M0=10,实现定时功能,实现定时功能C/T=0C/T=0,内部启动,内部启动GATE=0GATE=0。定时器。定时器1 1不用,无关位设定为不用,无关位设定为0 0,可得,可得TMOD=02HTMOD=02H。(3)允许中断)允许中断(4)TR0 启动定时启动定时vC语言参考程序:语言参考程序:v# include /包含特殊功能寄存器库包含特殊
18、功能寄存器库vsbit P1_0=P10; /定义口,程序中用定义口,程序中用P1_0代替。代替。vvoid main() /主函数主函数vTCON=0x00 /清清TCON,定时器,定时器中断标志清零及不允许计数中断标志清零及不允许计数vTMOD=0x02; /设定时器设定时器T0工作方式工作方式2vTH0=0x9c;TL0=0x9c; /设初值设初值vEA=1;ET0=1; /开中断开中断vTR0=1; /启动计数启动计数vwhile(1); /无限循环无限循环,结束主函数结束主函数vvvoid time0_int(void) interrupt 1 /中断函数中断函数v P1_0=!P1
19、_0;、定时、定时/ /计数器工作方式计数器工作方式 功能多功能多当当M1M1,M0=10M0=10时,定时时,定时/ /计数器处于工作方式计数器处于工作方式3 3,此时,定时此时,定时/ /及数器的等效电路如图所示及数器的等效电路如图所示 当当T0T0工作于方式工作于方式3 3时,时,T1T1只能工作在方式只能工作在方式0 0、方式、方式1 1或方或方式式2 2,并且由于已没有计数溢出标志位,并且由于已没有计数溢出标志位TF1TF1可供使用,可供使用,只能把计数溢出直接送给串行口,作串行口的波特只能把计数溢出直接送给串行口,作串行口的波特率发生器使用。等效电路图如下率发生器使用。等效电路图如
20、下 波波特特率率发发生生器器在使用定时在使用定时/ /计数器时,应做好计数器时,应做好4件事:v设置设置TMODTMOD以选择工作方式;以选择工作方式;v计算并设置计数初值计算并设置计数初值THX,TLXTHX,TLX;v设置设置IEIE、IPIP以规定中断的开放以规定中断的开放/ /禁止及优先级;禁止及优先级;v设置设置TCONTCON以启动以启动/ /停止定时停止定时/ /计数器的工作计数器的工作。工作方式的应用工作方式的应用【例】假设有一个用户系统中已使用了两个外部中断假设有一个用户系统中已使用了两个外部中断源源, , 并置定时器并置定时器 T1 T1 于方式于方式 2, 2, 作串行口
21、波特率发作串行口波特率发生器用生器用, , 现要求再增加一个外部中断源现要求再增加一个外部中断源, ,当有中断当有中断时,累加器加时,累加器加1 1。并由。并由P1.0 P1.0 口输出一个口输出一个5KHz5KHz的方波的方波(假设晶振频率为(假设晶振频率为 6 MHz6 MHz)。)。 思路思路 在不增加其它硬件开销时,可把定时/计数器T0置于工作方式3,利用外部引脚T0端作附加的外部中断输入端,把TL0预置为0FFH,这样在T0端出现由1至0的负跳变时,TL0溢出,申请中断,相当于边沿触发的外部中断源。 在方式3下,TH0总是作8位定时器用,可以靠它来控制由输出的5kHz方波。由输出5k
22、Hz的方波,即每隔100s使求反一次。则TH0的初始值: (256-N)210-6=10010-6 N=206vC语言参考程序:语言参考程序:v# include /包含特殊功能寄存器库包含特殊功能寄存器库vsbit P1_0=P10; /定义口,程序中用定义口,程序中用P1_0代替代替vvoid main() /主函数主函数vvTMOD=0x27; /置置T0工作方式工作方式3,TL0计数器方式;计数器方式;TH0为为8位定位定时器时器vTL0=0xFF; /送初值,用于外部引脚送初值,用于外部引脚T0口()做新增外部中断口()做新增外部中断vTH0=206; /送定时送定时100s的初值的
23、初值vTL1=BAUD; /BAUD是根据波特率要求设置的常数是根据波特率要求设置的常数vTH1=BAUD;vTCON=0x55; /启动定时器启动定时器 T0、 T1, 置边沿触发置边沿触发vIE=0x9F; /开放全部中断开放全部中断vwhile(1); /无限循环,结束主函数无限循环,结束主函数vvvoid TL0INT (void) interrupt 1 /中断函数中断函数, 处理新增的外部中断处理新增的外部中断源源vvTL0=0xFF; / 外部引脚外部引脚T0引起中断处理程序引起中断处理程序v vvoid TH0INT (void) interrupt 3 /中断函数中断函数,
24、处理输出处理输出5kHz的方的方波波 v v TH0=206; /重送初值重送初值v P1_0=!P1_0; 口取反口取反v 5. 5. 计数器功能计数器功能v当当C/T1时时,多路开关接通,多路开关接通计计数器引脚数器引脚TX,外,外部部计计数脉冲由引脚数脉冲由引脚输输入。入。v每一个脉冲每一个脉冲过过来,来,计计数器的寄存器数器的寄存器单单元加一。元加一。v加加满满之后溢出,之后溢出,满值满值会根据不同的方式而各不相会根据不同的方式而各不相同。同。v计计数方式也受数方式也受GATE位控制。位控制。v计计数溢出后需重装初数溢出后需重装初值值。例:例:T0控制控制LED实现二二进制制计数数 v
25、本例对按键的计数不本例对按键的计数不使用查询法,不使用使用查询法,不使用外部中断函数,不使外部中断函数,不使用定时或计数中断函用定时或计数中断函数。而是启用了计数数。而是启用了计数器,连接在器,连接在T0引脚的引脚的按键每次按下时,会按键每次按下时,会使计数寄存器的值递使计数寄存器的值递增,其值通过增,其值通过LED以以二进制形式显示二进制形式显示 v#includevvoid main()vvTMOD=0x05;/定定时器器0为计数器,工作方式数器,工作方式1,最大,最大计数数值65535vTH0=0;/初初值为0vTL0=0;vTR0=1;/启启动定定时器器vwhile(1)vvP1=TH
26、0;vP2=TL0;vv练习:计数器数器v对对端口端口进进行脉冲行脉冲计计数,数,计计数数满满100次后次后产产生中断,生中断,在在P1端口端口输输出出100的二的二进进制制值值。MCS51单片机有两个定时器计数器,当它们选择计数工作方式时,T0或T1引脚上的负跳变将使T0或T1计数器加1,若把定时器计数器设置成计数工作方式,计数初值设定为满量程,一旦计数从外部引脚输入一个负跳变信号,计数器To或T1加1,产生溢出中断,这样,便可把外部计数输入端T0(P34)或T1(P35)扩展为外部中断源输入。 vC语言参考程序:语言参考程序:v# include /包含特殊功能寄存器库包含特殊功能寄存器库
27、v#define uchar unsigned char /定义数据类型定义数据类型vuchar i; /定义变量定义变量i,作为存放中断函数中加作为存放中断函数中加1的记录。的记录。vvoid main() /主函数主函数v vTMOD=0x60; /T1方式方式2,计数器,计数器vTL1=0xFF; /设初值满量程设初值满量程vTH1=0xFF;vTR1=1; /启动启动T1计数计数vET1=1; /T1中断允许中断允许vEA=1; /CPU中断开放中断开放vwhile(1); /无限循环,结束主函数无限循环,结束主函数vvvoid INT (void) interrupt 3 /中断函数
28、中断函数v v i+; /中断加中断加1处理处理v P1=i; /将结果送将结果送P1口口v 四、全自动洗衣机定时控制四、全自动洗衣机定时控制Proteus仿真仿真v洗衣机中所需的定时功能并不复杂,可以利用单洗衣机中所需的定时功能并不复杂,可以利用单片机提供的定时器方便实现。设洗衣机有三段定片机提供的定时器方便实现。设洗衣机有三段定时时间,分别为:进水阶段定时时时间,分别为:进水阶段定时2秒,洗涤阶段秒,洗涤阶段定时定时4秒,甩干阶段定时秒,甩干阶段定时2秒。并分别用三个秒。并分别用三个LED发光二极管表示进水、洗涤、甩干三个环节的工发光二极管表示进水、洗涤、甩干三个环节的工作状态。其中如果发
29、光二极管作状态。其中如果发光二极管A亮,表示进水工亮,表示进水工作正在进行;发光二极管作正在进行;发光二极管B亮,表示洗涤工作正亮,表示洗涤工作正在进行;发光二极管在进行;发光二极管C亮,表示甩干工作正在进亮,表示甩干工作正在进行。发光二极管熄灭时,说明相应的定时已到,行。发光二极管熄灭时,说明相应的定时已到,工作停止。图工作停止。图5-7给出了给出了Proteus仿真电路图。仿真电路图。v图图5-6中,中,S表示洗衣机启动开关,开关按表示洗衣机启动开关,开关按下洗衣机开始工作。首先是进水定时控制,下洗衣机开始工作。首先是进水定时控制,表示正在进水的表示正在进水的LED发光二极管发光二极管A点
30、亮。当点亮。当进水控制的定时时间到时,进水工作停止,进水控制的定时时间到时,进水工作停止,发光二极管发光二极管A灭灯;接着开始洗涤工作定时,灭灯;接着开始洗涤工作定时,发光二极管发光二极管B点亮;洗涤工作结束后,开始点亮;洗涤工作结束后,开始甩干工作定时,发光二极管甩干工作定时,发光二极管C点亮。当洗衣点亮。当洗衣功能结束时,三个指示灯都熄灭,表示洗衣功能结束时,三个指示灯都熄灭,表示洗衣工作结束,并接通扬声器工作结束,并接通扬声器LS1鸣声提醒。鸣声提醒。C语言参考程序语言参考程序 v#include / 包含包含51单片机寄存器单片机寄存器定义的头文件定义的头文件vsbit P20=P20
31、; /将将P20位定义为引脚位定义为引脚vsbit P37=P37; /将将P37位定义为引脚位定义为引脚vunsigned char Countor; /设置全局变量,储存定时器设置全局变量,储存定时器T1中中断次数断次数vunsigned char f=0; /设置全局变量,作为区设置全局变量,作为区分不同阶段的定时分不同阶段的定时vvoid delay1() /延时函数延时函数vv int q;v for(q=0;q500;q+);vvvoid main(void) /主函数主函数v v if(P20=0) /若若P2.0=0,说明键按下,执行语句,否则说明键按下,执行语句,否则一直等待
32、。一直等待。v v delay1(); /有键按下,延时去抖动有键按下,延时去抖动v if(P20=0) /再判有键按下再判有键按下v v P1=0x0e; /A灯亮,开始放水定时灯亮,开始放水定时v EA=1; /开总中断开总中断v ET0=1; /定时器定时器T0中断允许中断允许 v TMOD=0x01; /使用定时器使用定时器T0的模式的模式1v TH0=(65536-46083)/256; /定时器定时器T0的高的高8位赋初值位赋初值,定定时时50msv TL0=(65536-46083)%256; /定时器定时器T0的高的高8位赋位赋初值初值v TR0=1; /启动定时器启动定时器T
33、0v vwhile(1); /无限循环等待中断无限循环等待中断 vvvvoid Time0(void) interrupt 1 using 0vvif(f=0) / f为标志变量,为标志变量, 若若f=0,执行第,执行第1阶段定时(放水功能)阶段定时(放水功能)v v Countor+; /Countor加加1v if(Countor=40) /若累计满若累计满40次,即计时满次,即计时满2sv v P1=0x0d; /A灯灭,结束放水,灯灭,结束放水,B灯亮,开始洗涤灯亮,开始洗涤vCountor=0; /将将Countor清清0,重新从,重新从0开始计数开始计数vf+; /f加加1,准备第
34、,准备第2阶段的定时阶段的定时v vvif(f=1) /若若f=1,执行第,执行第2阶段定时(洗涤功能)阶段定时(洗涤功能)vvCountor+; /Countor加加1v if(Countor=80) /若累计满若累计满80次,即计时满次,即计时满4Sv v P1=0x0B; /B灯灭,结束洗涤,灯灭,结束洗涤,C灯亮,开始甩干灯亮,开始甩干vCountor=0; /将将Countor清清0,重新从,重新从0开始计数开始计数v f+; /f加加1,准备第,准备第3阶段的定时阶段的定时v v vif(f=2) /若若f=2,执行第,执行第3阶段定时(甩干功能)阶段定时(甩干功能)vv Coun
35、tor+; /Countor加加1v if(Countor=40) /若累计满若累计满60次,即计时次,即计时满满3Sv v P1=0x07; /灯全灭,洗衣机结束工作灯全灭,洗衣机结束工作vCountor=0; /将将Countor清清0,重新从,重新从0开始计数;开始计数;v f+; / f加加1,准备进入第,准备进入第4阶段。阶段。vv vif(f=3) /若若f=3,执行进入第,执行进入第4阶段工作(扬声器提醒)阶段工作(扬声器提醒)vvP1=0x07; /灯全灭,洗衣机结束工作灯全灭,洗衣机结束工作vP37=P37; / 扬声器提醒扬声器提醒vCountor=0; /将将Counto
36、r清清0,重新从,重新从0开始计数;开始计数;v v TH1=(65536-46083)/256; /定时器定时器T1的高的高8位重新赋初值位重新赋初值v TL1=(65536-46083)%256; /定时器定时器T1的低的低8位重新赋初位重新赋初值值v单片机音乐单片机音乐 声音的频谱范围为声音的频谱范围为20Hz-200KHz20Hz-200KHz,人的,人的耳朵能辨别的声音频率大概在耳朵能辨别的声音频率大概在200Hz-200Hz-20KHz20KHz。音符音符 1 2 3 4 5 6 71 2 3 4 5 6 7节拍节拍 1/8 1 2 4 1/8 1 2 4结束符和休止符结束符和休止
37、符: 00H FFH: 00H FFHC调中音调中音 1 的频率为的频率为 523HzC调音符与定时方式调音符与定时方式1初值,时钟频率初值,时钟频率12MHz音符音符C调调低音低音频率频率Hz计数器计数器初值初值H中音中音频率频率Hz计数器计数器初值初值H高音高音频率频率Hz计数器计数器初值初值H1262F88B523FC431045FE211#277F8F2553FC781106FE3C2293F95B586FCAB1171FE552#311F9B7621FCDB1241FE6D3329FA14658FD081316FE844349FA466697FD331393FE994#370FAB9
38、739FD5B1476FEAD5392FB03783FD811563FEC05#415FB4A830FDA51658FED26440FB8F879FDC71755FEE36#466FBCF931FDE71860FEF37494FC0B987FE051971FF02图6-7 音乐驱动v用用T0T0方式方式1 1产生指定频率,通过驱动蜂鸣器,产生指定频率,通过驱动蜂鸣器,演奏指定音符,晶振频率为演奏指定音符,晶振频率为6MHz6MHz。v用用T1T1方式方式1 1控制音符节拍,节拍以控制音符节拍,节拍以1/81/8拍为拍为基准,长度由基准,长度由BASE BASE1BASE BASE1决定。其它节拍决定。其它节拍为该节拍的为该节拍的N N倍,用循环倍,用循环N N次次1/81/8基准节拍实基准节拍实现。现。v表表6-16-1列出了列出了C C调各音符频率与调各音符频率与T0T0初值初值N N的对的对照表。照表。v建立音调初值表建立音调初值表TONETONE,节拍初值表,节拍初值表BEATBEAT