收藏 分销(赏)

单片机项目教学定时器计数器的应用—音乐门铃的制作(汇编语言).pptx

上传人:天**** 文档编号:2722290 上传时间:2024-06-04 格式:PPTX 页数:44 大小:744.11KB
下载 相关 举报
单片机项目教学定时器计数器的应用—音乐门铃的制作(汇编语言).pptx_第1页
第1页 / 共44页
单片机项目教学定时器计数器的应用—音乐门铃的制作(汇编语言).pptx_第2页
第2页 / 共44页
单片机项目教学定时器计数器的应用—音乐门铃的制作(汇编语言).pptx_第3页
第3页 / 共44页
单片机项目教学定时器计数器的应用—音乐门铃的制作(汇编语言).pptx_第4页
第4页 / 共44页
单片机项目教学定时器计数器的应用—音乐门铃的制作(汇编语言).pptx_第5页
第5页 / 共44页
点击查看更多>>
资源描述

1、单单片机片机片机片机项项目教学定目教学定目教学定目教学定时时器器器器计计数器的数器的数器的数器的应应用用用用音音音音乐门铃乐门铃的制作的制作的制作的制作(汇编汇编语语言言言言)定时器定时器/计数器及其应用计数器及其应用1 定时器的结构及工作原理2 定时器的TMOD和TCON寄存器3 定时器的工作方式方式0方式1方式2方式34 定时器的编程和应用2基本知识基本知识定时器定时器/计数器简介计数器简介 1计数概念计数概念同学们选班长时,要投票,然后统计选票,常用的方法是画“正”,每个“正”号五划,代表五票,最后统计“正”号的个数即可,这就是计数。单片机有两个定时/计数器T0和T1,都可对外部输入脉冲

2、计数。计计数数24瓶瓶光电信号光电信号24瓶装完申请中断瓶装完申请中断转入中断服务程序装箱转入中断服务程序装箱输送带输送带 例如一啤酒生产线,如下图所示例如一啤酒生产线,如下图所示 2计数器的容量计数器的容量 我们用一个瓶子盛水,水一滴滴地滴入瓶中,水滴不断落下,瓶的容量是有限的,过一段时间之后,水就会逐渐变满,再滴就会溢出。单片机中的计数器也一样,T0和T1这两个计数器分别是由两个8位的RAM单元组成的,即每个计数器都是16位的计数器,最大的计数量是65536。3.定时定时一个钟表,秒针走60次,就是1分钟,所以时间就转化为秒针走的次数,也就是计数的次数,可见,计数的次数和时间有关。只要计数

3、脉冲的间隔相等,则计数值就代表了时间,即可实现定时。秒针每一次走动的时间是1秒,所以秒针走60次,就是60秒,即1分钟。因此,单片机中的定时器和计数器是一个东西,只不过计数器是记录的外界发生的事情,而定时器则是由单片机提供一个非常稳定的计数源。温度温度开始定时开始定时保温保温5分钟分钟淬火淬火 清洗清洗开始定时开始定时回火回火3小时小时空冷空冷 例如某机械零件的热处理工艺曲线为:例如某机械零件的热处理工艺曲线为:实际控制可以由单片机定时发出信号控制自动完成整个工艺过程。实际控制可以由单片机定时发出信号控制自动完成整个工艺过程。4.溢出溢出上面我们举的例子,水滴满瓶子后,再滴就会溢出,流到桌面上

4、。单片机计数器溢出后将使得溢出标志位TF0/TF1变为“1”,一旦TF0/TF1由0变成1,就是产生了变化,就会引发事件,就会申请中断。5.任意定时及计数的方法任意定时及计数的方法计数器的容量是16位,也就是最大的计数值到65536,计数计到65536就会产生溢出。如果计数值要小于65536,怎么办呢?一个空的瓶子,要1万滴水滴进去才会满,我们在开始滴水之前就先放入一些水,就不需要10000滴了。比如先放入2000滴,再滴8000滴就可以把瓶子滴满。在单片机中,我们也采用类似的方法,称为“设初值”的方法,我们要计1000,那就先放进64536,再来1000个脉冲,不就到了65536了吗?定时也

5、是如此。6单片机定时器单片机定时器/计数器的结构计数器的结构5.1 5.1 定时器的结构及工作原定时器的结构及工作原理理主要组成:两个16位的定时器T0和T1,以及他们的工作方式寄存器TMOD和控制寄存器TCON等组成。定时器T0和T1各由两个8位特殊功能寄存器TH0、TL0、TH1、TL1构成。工作方式寄存器TMOD:用于设置定时器的工作模式和工作方式;控制寄存器TCON:用于启动和停止定时器的计数,并控制定时器的状态;单片机复位时,两个寄存器的所有位都被清单片机复位时,两个寄存器的所有位都被清0 0。11定时器/计数器T1、T0,由编程来设置它工作在定时还是计数状态。两种工作模式:(1)计

6、数器工作模式(2)定时器工作模式4种工作方式(方式0-方式3)。(1)计数器工作模式 就是对外部事件进行计数。计数脉冲来自相应的外部输入引脚T0(P3.4)或T1(P3.5)。当输入信号发生由1至0的负跳变(下降沿)时,加1计数器(TH0,TL0或TH1,TL1)的值增1,直到计时器计满溢出;1)预先装入一个计数初值。2)每来一个外部脉冲输入,记数器1。3)记数器计满回零,产生溢出中断请求。计数值计数值 计数器的模计数器的模 初值初值(2)定时器工作模式也是通过计数实现的。计数脉冲来自内部时钟脉冲,每个机器周期计数值增1,所以计数器计数的是机器周期脉冲个数。从而实现定时定时时间定时时间=计数值

7、计数值机器周期机器周期。1)预先装入一个计数初值。2)周期性1记数。3)记数器计满回零,产生溢出中断请求。定时时间定时时间 计数器的模计数器的模 初值初值 机器周期机器周期可编程定时器的工作方式、启动、停止、溢出标志、计数器等都是可编程的通过设置寄存器TMOD,TCON,TH0,TL0,TH1和TL1 实现。当设置了定时器的工作方式并启动定时器工作后,定时器就按被设定好的工作方式独立工作,不再占用CPU,只有在计数器计满溢出时才向CPU申请中断,占用CPU。由此可见,定时器是单片机中工作效率高且应用灵活的部件。5.1 定时器/计数器的控制15 8051单片机定时/计数器主要有几个特殊功能寄存器

8、组成:TMOD,TCON,TH0,TL0,TH1,TL1。TMOD:设置定时/计数器的工作方式;TCON:控制定时/计数器的启动和停止;TH0和TL0:存放定时/计数器T0的初值或计数结果;TH0存放高8位,TL0 存放低8位;TH1和TL1:存放定时/计数器T1的初值或计数结果;TH1存放高8位,TL1 存放低8位;161 1 1 1 控制寄存器控制寄存器控制寄存器控制寄存器TCONTCONTCONTCON低4位与外部中断有关,前面已经介绍过。高4位的功能如下:(1)TF1、TF0 计数溢出标志位 定时器T0或T1计数溢出时,由硬件自动将此位置“1”;TFx可以由程序查询,也是定时中断的请求

9、源;(2)TR1、TR0 计数运行控制位 TRx=1:启动定时器/计数器工作 TRx=0:停止定时器/计数器工作 172.2.2.2.工作方式控制寄存器工作方式控制寄存器工作方式控制寄存器工作方式控制寄存器TMODTMODTMODTMOD TMOD的字节地址为的字节地址为89H,不能按位寻址不能按位寻址,只能用字节只能用字节传送传送指令来设置。指令来设置。8位分为两组,位分为两组,高高4位控制位控制T1,低低4位控制位控制T0。(1)GATE门控位门控位 0:以以TRx(x=0,1)来启动定时器)来启动定时器/计数器运行。计数器运行。1:用外中断引脚用外中断引脚(/INT0或或/INT1)上的

10、高电平和上的高电平和 TRx来启动定时器来启动定时器/计数器运行。计数器运行。(2)C/T*计数器模式和定时器模式选择位计数器模式和定时器模式选择位 0:定时器模式。定时器模式。1:计数器模式。计数器模式。(3)M1、M0 工作方式选择位工作方式选择位 M1 M0 工工 作作 方方 式式 0 0 方式方式0,13位定时器位定时器/计数器。计数器。0 1方式方式1,16位定时器位定时器/计数器。计数器。1 0 方式方式2,8位常数自动重新装载位常数自动重新装载 1 1 方式方式3,仅使用,仅使用T0,T1停止计数停止计数复位时,复位时,TMOD所有位均为所有位均为“0”。5.2 定时/计数器的编

11、程与应用1.初始化 MCS-51单片机的定时器/计数器是可编程的,但在进行定时或计数之前要对程序进行初始化,具体步骤如下:(1)对TMOD赋值,以确定定时/计数器的工作模式;(2)根据定时时间或计数要求,计算定时/计数器初值,直接将初值写入寄存器的TH0、TL0或TH1、TL1;(3)根据需要,开放定时/计数器中断;(4)对TCON寄存器中的TR0或TR1置位,启动定时/计数器,置位以后,计数器即按规定的工作模式和初值进行计数或开始定时。21初值计算:设计数器的最大值(模)为M,则置入的初值X为:计数工作模式:X=M-计数值定时工作模式:由(M-X)T=定时值,得X=M-定时值/T T为计数周

12、期,是单片机的机器周期。(模式0:M为213,模式1:M为216,模式2和3:M为28)练习:设晶振频率为练习:设晶振频率为12MHZ12MHZ,则其最长定时时间为多少?,则其最长定时时间为多少?若工作在模式若工作在模式0 0,则最大定时值为,则最大定时值为:2131s=8.192ms:2131s=8.192ms 若工作在模式若工作在模式1,1,则最大定时值为则最大定时值为:2161s=65.536ms:2161s=65.536ms 若工作在模式若工作在模式2 2、3,3,则最大定时值为则最大定时值为:281s=256ms:281s=256ms222.定时/计数器应用例 设系统振荡频率为12M

13、Hz,编程在P1.0上输出一个周期为2ms的方波。方波的周期用T0来确定,让T0每隔1ms计数溢出1次(每1ms产生一次中断),CPU响应中断后,在中断服务程序中对P1.0取反。即要使即要使P1.0P1.0每隔每隔1ms1ms取反一次。取反一次。23第一步:确定工作方式 方式0(13位)最长可定时 8.192ms;方式1(16位)最长可定时 65.536ms;方式2(8位)最长可定时 256s。T0为方式0,M1M0=00 定时工作状态,C/T=0GATE=0,不受INT0控制,T1不用全部取“0”值。故TMOD=00H24第二步:计算1ms定时的初值X 设初值为X,则有:(213-X)121

14、0-6 1/12=110-3可求得:X=8192-1000=7192X化为16进制,即X=1C18H=1,1100,000 1,1000B。所以,T0的初值为:TH0=E0H TL0=18H25第三步:程序初始化 中断服务程序中断服务程序主程序主程序26第四步:程序设计 对各个寄存器相应位进行正确设置,将计数初值送入定时器中。对各个寄存器相应位进行正确设置,将计数初值送入定时器中。中断服务程序除产生方波外,还要注意中断服务程序除产生方波外,还要注意将计数初值重新装入定时器中将计数初值重新装入定时器中,为下一次中断作准备。为下一次中断作准备。ORG 0000HORG 0000HRESET:AJM

15、P MAIN RESET:AJMP MAIN ;转主程序;转主程序 ORG 000BH ORG 000BH ;T0T0的中断入口的中断入口 AJMP IT0PAJMP IT0P ;转;转T0T0中断处理程序中断处理程序IT0PIT0P ORG 0100HORG 0100HMAIN:MOV SP,#60H MAIN:MOV SP,#60H ;设堆栈指针;设堆栈指针 MOV TMOD,#00H MOV TMOD,#00H ;设置;设置T0T0为方式为方式1 1 ACALL PT0M0ACALL PT0M0 ;调用子程序;调用子程序PT0M0PT0M0HERE:AJMP HEREHERE:AJMP

16、HERE ;自身跳转;自身跳转 ACALL PT0M0ACALL PT0M0 ;调用子程序;调用子程序PT0M0PT0M0HERE:AJMP HEREHERE:AJMP HERE ;自身跳转;自身跳转PT0M0:MOV TL0,#18HPT0M0:MOV TL0,#18H ;T0T0置初值置初值 MOV TH0,#0E0H MOV TH0,#0E0H SETB TR0 SETB TR0 ;启动;启动T0T0 SETB ET0 SETB ET0 ;允许;允许T0T0中断中断 SETB EA SETB EA ;CPUCPU开中断开中断 RETRETITOP:MOV TL0,#18H ITOP:MO

17、V TL0,#18H ;T0T0中断服务子程序,中断服务子程序,T0T0置初值置初值 MOV TH0,#0E0HMOV TH0,#0E0H CPL P1.0 CPL P1.0 ;P1.0P1.0的状态取反的状态取反 RETIRETI本题还可以采用查询方式编程ORG 0100HMAIN:MOV TMOD,#00H;设置T0为方式0MOVTL0,#18H;送计数初值 MOVTH0,#0E0H;送计数初值SETB TR0 ;启动T0LOOP:JBC TF0,NEXT ;查询定时时间到,转NEXT,同时清TF0SJMPLOOP;重复循环NEXT:MOV TL0,#18H ;T0重置初值 MOV TH0

18、,#0E0H ;T0重置初值 CPL P1.0 ;P1.0的状态取反SJMPLOOP;重复循环END查询法更简便,查询法更简便,但占用但占用CPU29例 将上一例题中的输出方波周期改为1秒。分析:周期为1s的方波要求500ms的定时。(1)T0工作方式的确定因定时时间较长,采用哪一种工作方式?由各种工作方式的特性,可计算出:方式0(13位)最长可定时 8.192ms;方式1(16位)最长可定时 65.536ms;方式2(8位)最长可定时 256s。所以采用定时器定时加软件计数的方法来实现延长定时。选方式1,定时50ms,循环10次。50ms 10=500ms。所以,TMOD=01H以上各方式以

19、上各方式都不满足要求都不满足要求30 (2)计算计数初值因为:(216-X)1210-6 1/12=5010-3所以:X=15536=3CB0H因此:TH0=3CH,TL0=B0H (3)10次计数的实现设计一个软件计数器,初始值设为10。每隔50ms定时时间到,产生溢出标志TF0,程序查询到TF0=1,则软件计数器减1。这样减到0时就获得了500ms的定时。31(4)程序设计 ORG 0100HMAIN:MOV TMOD,#01H ;设T0工作在方式1MOV TL0,#0B0H ;给T0设初值MOV TH0,#3CHMOVR7,#10;软件计数器初值SETB TR0 ;启动T0LOOP:JB

20、CTF0,NEXT;查询定时时间到,转NEXT,同时清TF0SJMP LOOP NEXT:DJNZ R7,EXIT;R7不等于0,则不对P1.0取反CPLP1.0MOVR7,#10;重置软件计数器初值EXIT:MOV TL0,#0B0H;T0中断子程序,重装初值MOV TH0,#3CH SJMPLOOPEND 32以上的定时程序中,程序都要重置计时器初值,这样从定时器溢出,发出溢出标志,到重装完定时器初值,在开始计数,之间总会有一段时间间隔,使定时时间增加了若干微秒,造成定时不够精确。为了减小这种定时误差,单片机中设置了工作方式2(自动重装初值),则可避免上述因素,省去程序中重装初值的指令,实

21、现精确定时。但是工作方式2的缺点是只有8位计数器,定时时间受到很大限制。33例-利用T0方式2产生250us的定时,在P1.0引脚上输出周期为500us的方波(要求精确定时)。(设系统振荡为12MHz)(1)工作方式选择实现精确定时,采用方式2。对于12MHz晶振,方式2的最大计数时间为28=256us,所以可实现250us的精确定时。故,设置TMOD=02H。(2)计算初值设初值为X:则(28-X)1210-61/12=25010-6 X=28-250=6=06H(3)程序设计采用查询TF0的状态来控制P1.0的输出。34(4)程序设计 ORG 0100HMAIN:MOVTMOD,#02H

22、;置T0方式2MOVTH0,#06H;送计数初值MOVTL0,#06HSETB TR0;启动T0LOOP:JBC TF0,NEXT;查询定时时间到,转NEXT,同时清TF0SJMP LOOPNEXT:CPLP1.0;输出取反SJMP LOOP;重复循环END35项目:音乐门铃的设计与制作项目:音乐门铃的设计与制作原理 音调:音调:通过控制定时器的定时时间产生不同频率的方波,驱动通过控制定时器的定时时间产生不同频率的方波,驱动喇叭发出不同音阶的声音。喇叭发出不同音阶的声音。节拍:节拍:再利用延时来控制发音时间的长短,即可控制节拍。再利用延时来控制发音时间的长短,即可控制节拍。把乐谱中的音符和相应

23、的节拍变换成定时常数和延迟常数,作把乐谱中的音符和相应的节拍变换成定时常数和延迟常数,作为为数据表格数据表格存放在存贮器中。由存放在存贮器中。由程序查表程序查表得到定时常数和延迟常数,得到定时常数和延迟常数,分别用以控制定时器产生方波的频率和发出该频率方波的持续时间。分别用以控制定时器产生方波的频率和发出该频率方波的持续时间。当延迟时间到时,再查下一个音符的定时常数和延迟常数。依次进当延迟时间到时,再查下一个音符的定时常数和延迟常数。依次进行下去。行下去。用单片机上实现音乐演奏关键在于,根据乐谱制作出数据表格。例:歌曲“新年好”的一段简谱,1=C 1115|3331|1355|432-|实现方

24、法:实现方法:用定时器以方式用定时器以方式1来产生各音符对应频率的方波,由来产生各音符对应频率的方波,由P1.0输出输出驱动喇叭。驱动喇叭。节拍控制通过调用延时子程序节拍控制通过调用延时子程序D200(延时(延时200ms)次数来实)次数来实现,以每拍现,以每拍400ms节拍时间为例,一拍需循环调用节拍时间为例,一拍需循环调用D200延时延时子程序子程序2次,同理,半拍就需用次,同理,半拍就需用1次。次。设晶振频率为设晶振频率为12MHz,乐曲中的音符、频率、定时常数的关系如下表:,乐曲中的音符、频率、定时常数的关系如下表:ORGOOOOH;主程序起始地址LJMPSTART;跳转至主程序ORG

25、000BH;定时器T0中断入口LJMPEXT0;跳转至T0中断子程序START:MOVTMOD,#01H;设置T0方式1MOVIE,#10000010B;允许T0中断MOVDPTR,#TABLE;存表首地址LOOP:CLRA;清零MOVCA,A+DPTR;查表MOVR1,A;定时器高八位存入R1INCDPTR;指针加1CLRA;清零MOVCA,+DPTR;查表MOVR0,A;定时器低八位存入R0ORLA,R1;进行或运算JZNEXT0;全零为休止符MOVA,R0ANLA,R1;进行与运算CJNEA,#0FFH,NEXT;全1表示乐曲结束LJMPSTART;从头开始循环演奏NEXT:MOVTHO

26、,R1;装入高位定时值MOVTLO,R0;装入低位定时值SETBTR0;启动定时器T0LJMPNEXT1;跳转到NEXT1处NEXT0:CLRTR0;关闭定时器,停止发音NEXT1:CLRA;清零INCDPTR;指针加一MOVCA,A+DPTR;查延时常数MOVR2,A;延时常数存入R2LOOP1:ACALLDELAY;调用延时子程序DJNZR2LOOP1;控制延时次数INCDPTR;指针加一LJMPLOOP;跳转到LOOP处,开始取下一个音符的信息EXT0:MOVTH0,R1;音调的中断程序。重装定时值MOVTL0,R0CPLP1.0;反向输出RETIDELAY:MOVR3,#2001usD

27、EL2:MOVR2,#2501usDEL1:NOP1usNOP1usDJNZR2,DEL12usDJNZR3,DEL22usRETTABLE:DB0F8H,8CH,02H,0F8H,8CH,02H;编码表(每3个为一组,DB 0FCH,44H,02H,0FDH,82H,02H ;前两个为音符码,后一个为节拍码)DB0FAH,15H,02H,0FAH,15H,02HDB0FDH,09H,02H,0FCH,44H,02HDB0F8H,8CH,02H,0FAH,15H,02HDB0FDH,09H,02H,0FCH,44H,02HEND小小 结结定时/计数器应用非常广泛,如定时采样、时间测量、产生音响、作脉冲源、制作日历时钟、测量波形的频率和占空比、检测电机转速等。因此应很好掌握。51系列单片机有两个16位的定时/计数器,有四种不同的工作方式,归纳于表中(P105)。使用定时/计数器前要先初始化,设置方式控制字TMOD,计数初值THx,TLx;启动工作TRx;中断方式,还需开中断(EA和ETx)。计数产生溢出(计数初值寄存器回零),置位TFx,可以通过程序查询;如果允许中断,会产生中断。本章应重点掌握定时/计数器的应用设计。43谢谢大家!结结 语语

展开阅读全文
相似文档                                   自信AI助手自信AI助手
猜你喜欢                                   自信AI导航自信AI导航
搜索标签

当前位置:首页 > 教育专区 > 其他

移动网页_全站_页脚广告1

关于我们      便捷服务       自信AI       AI导航        获赠5币

©2010-2024 宁波自信网络信息技术有限公司  版权所有

客服电话:4008-655-100  投诉/维权电话:4009-655-100

gongan.png浙公网安备33021202000488号   

icp.png浙ICP备2021020529号-1  |  浙B2-20240490  

关注我们 :gzh.png    weibo.png    LOFTER.png 

客服