1、5.1.15.1.1定时计数器的结构定时计数器的结构.定时和计数的原理定时和计数的原理(1)计数)计数 定时计数器的实质是加计数器(位),定时计数器的实质是加计数器(位),其原理类似于古代用来计时的水钟:其原理类似于古代用来计时的水钟:假设计满一小时需要假设计满一小时需要100,000,000滴,这称为水钟的计数容量滴,这称为水钟的计数容量16位定时位定时/计数器的计数容量是计数器的计数容量是65536单片机是对脉冲个数计数,计数器每单片机是对脉冲个数计数,计数器每接收到一个脉冲,计数值加接收到一个脉冲,计数值加1,当接收满当接收满65535个脉冲后,再个脉冲后,再来一个脉冲,计数值清来一个脉
2、冲,计数值清0表明表明这一轮计数结束,同时将标这一轮计数结束,同时将标志位志位TF0或或TF1置置1。第1页/共71页 (2)定时)定时 单片机内部的计数器用作定时器时,是对标准的单片机内部的计数器用作定时器时,是对标准的时钟进行了计数,每来一个时钟脉冲,计数器加时钟进行了计数,每来一个时钟脉冲,计数器加1,只要保证计数脉冲的间隔相等,则计数值就代表了只要保证计数脉冲的间隔相等,则计数值就代表了时间的流逝。时间的流逝。单片机中的定时器和计数器其实是一个器件:单片机中的定时器和计数器其实是一个器件:计数器:计数器:是对外部发生的事件进行计数,是对外部发生的事件进行计数,定时器:定时器:是对单片机
3、内部的标准时钟脉冲进行是对单片机内部的标准时钟脉冲进行计数。计数。第2页/共71页 见图见图4-9,它是由单片机的晶振经过,它是由单片机的晶振经过12分频后得到。由于分频后得到。由于晶振的频率很准,所以这个时钟脉冲的时间间隔也很准。不晶振的频率很准,所以这个时钟脉冲的时间间隔也很准。不难算出,当单片机采用难算出,当单片机采用12的晶振时,它提供给计数器的晶振时,它提供给计数器的脉冲频率是,脉冲周期就是的脉冲频率是,脉冲周期就是微秒。微秒。图图4-9 定时定时/计数器计数器T0的结构示意图的结构示意图第3页/共71页 单片机内部的单片机内部的16位定时计数器由高位定时计数器由高8位和低位和低8位
4、两位两个寄存器组成:个寄存器组成:l T0由由TH0和和TL0组成,组成,l T1由由TH1和和TL1组成,组成,定时计数器的计数值就存放在这里面。定时定时计数器的计数值就存放在这里面。定时/计计数器数器T1的结构与的结构与T0相同。相同。图图4-9 定时定时/计数器计数器T0的结构示意图的结构示意图 2定时定时/计数器的结构计数器的结构第4页/共71页 再以水钟为例,当水不断落下,下面容器中的水不再以水钟为例,当水不断落下,下面容器中的水不断变多,最终总有一滴水使得容器完全充满。这时如断变多,最终总有一滴水使得容器完全充满。这时如果再有一滴水落下,就会发生果再有一滴水落下,就会发生“溢出溢出
5、”。与此类似,。与此类似,16位定时计数器计满位定时计数器计满65536个脉冲时,也会发生溢出。个脉冲时,也会发生溢出。定时计数器溢出后标志位定时计数器溢出后标志位TF0(或(或TF1)由)由0变变1,由此能够引发定时中断(在中断定时方式下),这就由此能够引发定时中断(在中断定时方式下),这就像定时的时间一到,闹钟就会响一样像定时的时间一到,闹钟就会响一样。如果采用如果采用12的晶振,对应的脉冲周期是的晶振,对应的脉冲周期是微秒,计满微秒,计满65536个脉冲所对应的时间就是个脉冲所对应的时间就是65.536ms。3定时定时/计数值的设置计数值的设置第5页/共71页再回到水钟的例子上去:再回到
6、水钟的例子上去:刚才假设下面容器滴入刚才假设下面容器滴入100,000,000滴水才会满,滴水才会满,现在我们在开始滴水之前先放入一勺水,这样问题就现在我们在开始滴水之前先放入一勺水,这样问题就解决了。解决了。计数器的道理是一样的,只要用预置数的方法计数器的道理是一样的,只要用预置数的方法先在计数容器内存入一个初值先在计数容器内存入一个初值(通常称为时间常(通常称为时间常数),数),如我们要计如我们要计100,那就存入,那就存入65436,只要再来,只要再来100个脉冲,就刚好会溢出,引发中断。个脉冲,就刚好会溢出,引发中断。计数器初值的设置计数器初值的设置第6页/共71页 在主频为在主频为1
7、2MHz的情况下,每个时钟脉冲是的情况下,每个时钟脉冲是1微秒,则微秒,则计满计满65536个脉冲需个脉冲需65.536毫秒,如要定时毫秒,如要定时10毫秒则存入初毫秒则存入初值值55536,(,(10毫秒是毫秒是10000微秒,需计数微秒,需计数10000个脉冲)。个脉冲)。可见,可见,定时器的定时时间长短与系统时钟和定时器初定时器的定时时间长短与系统时钟和定时器初值有关值有关。说明说明 1.当定时计数器用作计数器时,通过引脚当定时计数器用作计数器时,通过引脚P3.4(P3.5)对外部输入脉冲计数。对外部输入脉冲计数。2.定时计数器定时计数器T0(T1)启动运行后,会按设定的工作启动运行后,
8、会按设定的工作方式独立进行计数,不再占用方式独立进行计数,不再占用CPU时间。当计数器时间。当计数器T0(T1)计满溢出时,计满溢出时,TF0(TF1)置置1,向,向CPU发出中断请求信号。发出中断请求信号。定时器初值的设置定时器初值的设置第7页/共71页4-10 定时定时/计数器的控制关系计数器的控制关系第8页/共71页 5.25.2定时计数器的控制定时计数器的控制 在单片机中有两个特殊功能寄存器与定时在单片机中有两个特殊功能寄存器与定时/计数有关,它计数有关,它们就是们就是TMOD和和TCON,定时计数器,定时计数器T0、T1就由它们来控就由它们来控制:制:TMOD用于设置工作方式;用于设
9、置工作方式;TCON用于控制其启动、停止和中断申请。用于控制其启动、停止和中断申请。1.定时器工作方式寄存器定时器工作方式寄存器TMOD TMOD用于设置用于设置T0和和T1的工作方式,字节地址为的工作方式,字节地址为89H,不能按位寻址。其格式和各位的含义如下:不能按位寻址。其格式和各位的含义如下:第9页/共71页第10页/共71页第11页/共71页 2定时定时/计数器控制寄存器计数器控制寄存器TCON TCON的低的低4位用于控制外部中断,高位用于控制外部中断,高4位用于控位用于控制定时制定时/计数器的启动和中断申请。计数器的启动和中断申请。l TF0(或(或TF1)当计数溢出时,当计数溢
10、出时,TF0(或(或TF1)会自动由)会自动由0变变1,告诉我们计数已满,我们可以通过查询告诉我们计数已满,我们可以通过查询TF0(或或TF1)位的状态来判断计时时间是否已到;位的状态来判断计时时间是否已到;如果采用定时中断方式,则如果采用定时中断方式,则 TF0(或(或TF1)由由0变变1时,能自动引发中断。时,能自动引发中断。第12页/共71页l TR0(或或TR1)由图由图4-11 可知,只有可知,只有当当TR0(或或TR1)为为1时,开时,开关关1才能闭合,计数脉冲才才能闭合,计数脉冲才能进入计数器,故能进入计数器,故TR0(或或TR1)称为运行控制位,称为运行控制位,可可用指令用指令
11、“SETB TR0(或或TR1)”来置位以启动定时来置位以启动定时/计数器运行;计数器运行;或用指令或用指令“CLR TR0(或或TR1)”来关来关闭定时闭定时/计数器的工作,计数器的工作,一一切全靠编程人员控制。切全靠编程人员控制。图4-11 定时/计数器T0方式0的逻辑结构示意图 第13页/共71页5.3 5.3 定时定时/计数器的工作方式计数器的工作方式 80C51单片机定时单片机定时/计数器计数器T0有有4种工作方式(方式种工作方式(方式0、1、2、3),),T1有有3种工作方式(方式种工作方式(方式0、1、2)。)。1.方式方式0 当当TMOD的的M1M0=00时,定时时,定时/计数
12、器工作于方式计数器工作于方式0。方式方式0为为13位定时位定时/计数器,由计数器,由TL0的低的低5位和位和TH0(8位)共同位)共同完成计数功能(完成计数功能(TL0的高的高3位可忽略)。位可忽略)。当当TL0的低的低5位溢出时,向位溢出时,向TH0产生进位;产生进位;TH0溢出时,将溢出时,将定时器中断请求标志位定时器中断请求标志位TF0置置1,可申请中断,也可对,可申请中断,也可对TF0进进行查询。行查询。第14页/共71页图图4-11 定时定时/计数器计数器T0方式方式0的逻辑结构示意图的逻辑结构示意图 第15页/共71页2.方式方式1 当当M1M0=01时,定时时,定时/计数器工作于
13、方式计数器工作于方式1。方式。方式1的计的计数位数是数位数是16位,由位,由TL0作为低作为低8位,位,TH0作为高作为高8位共同构位共同构成。其余操作同方式成。其余操作同方式0。图图4-12 定时定时/计数器计数器T0方式方式1的逻辑结构示意图的逻辑结构示意图第16页/共71页3.方式方式2 当当M1M0=10时,定时时,定时/计数器工作于方式计数器工作于方式2。这是自动重。这是自动重装初值的装初值的8位计数方式,它省去了方式位计数方式,它省去了方式0和方式和方式1在多次重复在多次重复计数状态下必须重新设定计数初值的麻烦,但是却付出了计数状态下必须重新设定计数初值的麻烦,但是却付出了减小定时
14、时间的代价。减小定时时间的代价。图图4-13 定时定时/计数器计数器T0方式方式2的逻辑结构示意图的逻辑结构示意图特别适合于制作比较精特别适合于制作比较精确的脉冲信号发生器。确的脉冲信号发生器。第17页/共71页4.方式方式3 方式方式3只适用于定时只适用于定时/计数器计数器T0。当。当T1被设定为方式被设定为方式3状态时,状态时,将停止计数。将停止计数。当当M1M0=11时,时,T0工作于方式工作于方式3。此时此时TL0和和TH0作为两个相互独立的作为两个相互独立的8位定时位定时/计数器使用。计数器使用。TL0既可定时又可计数,它使用既可定时又可计数,它使用T0的各控制位、引脚和中断源,的各
15、控制位、引脚和中断源,即即C/、GATE、TR0、TF0、T0(P3.4引脚)、(引脚)、(P3.2引脚);引脚);TH0此时只能用作内部定时功能,它借用了定时此时只能用作内部定时功能,它借用了定时/计数器计数器T1的控的控制位制位TR1和和T1的中断标志位的中断标志位TF1,其启动和停止只受,其启动和停止只受TR1控制。控制。第18页/共71页图图4-14 定时定时/计数器计数器T0方式方式3的逻辑结构示意图的逻辑结构示意图 定时器定时器T1T1无工作方式无工作方式3 3,当定时器,当定时器T0T0工作在方式工作在方式3 3时,定时器时,定时器T1T1可设置为方式可设置为方式0 0、方式、方
16、式1 1和方式和方式2 2。第19页/共71页 4.4.1应用指导应用指导 1定时定时/计数器的定时计数器的定时/计数范围计数范围 定时定时/计数器工作于不同方式下的位数不同,它所具有的计数器工作于不同方式下的位数不同,它所具有的计数范围也不一样:计数范围也不一样:l 工作方式工作方式0:13位定时位定时/计数方式,因此,最多可以计计数方式,因此,最多可以计到到213,也就是,也就是8192次。次。l 工作方式工作方式1:16位定时位定时/计数方式,因此,最多可计数方式,因此,最多可 以计到以计到216,也就是,也就是65536次。次。l 工作方式工作方式2和工作方式和工作方式3:都是都是8位
17、定时位定时/计数方计数方 式,因此,最多可以计到式,因此,最多可以计到2 8,也就是,也就是256次。次。如果我们需要超过计数器计数范围的定时或计数功能,应该怎样做?如果我们需要超过计数器计数范围的定时或计数功能,应该怎样做?4.44.4定时定时/计数器应用与训练计数器应用与训练第20页/共71页 2时间常数初值的计算时间常数初值的计算 定时定时/计数器只要预设一个时间常数初值,就可以完成不超计数器只要预设一个时间常数初值,就可以完成不超过其计数范围的任意大小的计数。算法如下:过其计数范围的任意大小的计数。算法如下:u 定时时间常数初值定时时间常数初值X:方式方式0 X=8192-t(fosc
18、/12)方式方式1 X=65536-t(fosc/12)方式方式2、方式、方式3 X=256-t(fosc/12)其中其中t是需要定时的时间,单位是微秒;是需要定时的时间,单位是微秒;fosc是晶振是晶振u 计数时间常数计数时间常数X:方式方式0 X=8192-S 方式方式1 X=65536-S 方式方式2、方式、方式3 X=256-S 说明:式中说明:式中S是需要计数的次数是需要计数的次数 第21页/共71页 假设流水线上一个包装是假设流水线上一个包装是12盒,要求每到盒,要求每到12盒就产生一盒就产生一个动作,用单片机的工作方式个动作,用单片机的工作方式0来控制,应当预置的计数初来控制,应
19、当预置的计数初值是多少呢?值是多少呢?对了,就是对了,就是8192-12=8180。3定时定时/计数器的初始化计数器的初始化对对80C51单片机的定时单片机的定时/计数器编程的初始化方法:计数器编程的初始化方法:对对TMOD赋值,以确定赋值,以确定T0和和T1的工作方式;的工作方式;计算时间常数初值,并将其写入计算时间常数初值,并将其写入TH0、TL0或或TH1、TL1;采用中断定时方式时,需对采用中断定时方式时,需对IE赋值开中断;赋值开中断;置位置位TR0或或TR1,启动定时,启动定时/计数器。计数器。第22页/共71页4.4.2 4.4.2 基本训练基本训练初始化训练初始化训练 例例3:
20、某牛奶生产线上一个包装是某牛奶生产线上一个包装是12盒,要求盒,要求每生产每生产12盒就执行装箱操作,用盒就执行装箱操作,用80C51单片机来控单片机来控制,请编写初始化程序。制,请编写初始化程序。1思路与计算:思路与计算:要确定定时器(要确定定时器(T0 或或T1),),选择其工作方式。我们以选择其工作方式。我们以T0的工作方式的工作方式2为例,计为例,计算时间常数并赋值给算时间常数并赋值给TH0、TL0。X=256-S=256-12=244=0F4H第23页/共71页 2 2初始化程序:初始化程序:MOV TMODMOV TMOD,#06H#06H ;T0T0作计数器,工作于方式作计数器,
21、工作于方式2 2 MOV TH0 MOV TH0,#0F4H#0F4H ;装入时间常数初值;装入时间常数初值 MOV TL0MOV TL0,#0F4H#0F4H ;自动重装时间常数;自动重装时间常数 MOV IE MOV IE,#00H#00H ;用查询方式确定计满;用查询方式确定计满1212盒?盒?(或(或MOV IE MOV IE,#82H#82H);使用);使用T0T0中断,计满中断,计满1212盒后,盒后,;自动申请中断;自动申请中断 SETB TR0 SETB TR0 ;启动;启动T0T0波特率发生器波特率发生器 3 3总结:总结:对计数过程是否结束有查询和中断两对计数过程是否结束有
22、查询和中断两种方法,要合理选择,并在程序设计中正确体现。种方法,要合理选择,并在程序设计中正确体现。第24页/共71页 4.4.34.4.3应用实例应用实例 1 定时定时/计数器用于外部脉冲宽度的测量计数器用于外部脉冲宽度的测量 (1)测量原理)测量原理 可以利用定时计数器方式寄存器可以利用定时计数器方式寄存器TMOD中的门控中的门控位位GATE与与 引脚配合使用,控制定时计数器的启引脚配合使用,控制定时计数器的启动与停止:动与停止:当当GATE1时,要求时,要求TR1l,且,且 为高电平,为高电平,才能启动定时器才能启动定时器T1计数工作;如果计数工作;如果 出现低电平,则出现低电平,则T1
23、停止计数;停止计数;当当GATE=0时,只要时,只要TR11就可以启动定时器,就可以启动定时器,而与而与 的输入状态无关。的输入状态无关。可以利用定时计数器方式寄存器可以利用定时计数器方式寄存器TMOD中的门控中的门控位位GATE与与 引脚配合使用,控制定时计数器的启引脚配合使用,控制定时计数器的启动与停止:动与停止:当当GATE1时时,要求,要求TR1l,且,且 为高电平,为高电平,才能启动定时器才能启动定时器T1计数工作;如果计数工作;如果 出现低电平,则出现低电平,则T1停止计数;停止计数;当当GATE=0时,时,只要只要TR11就可以启动定时器,就可以启动定时器,而与而与 的输入状态无
24、关。的输入状态无关。第25页/共71页 利用上述特点,将被测脉利用上述特点,将被测脉冲信号从(冲信号从(P3.3)引入,在)引入,在T1的程序初始化中令的程序初始化中令GATE1,同时同时“SETB TR1”,这样脉,这样脉冲信号的上升沿就能启动冲信号的上升沿就能启动T1计计数,脉冲信号下降沿能使数,脉冲信号下降沿能使T1停停止计数。利用定时器止计数。利用定时器T1的计数的计数值值m乘以机器周期就可以得到乘以机器周期就可以得到被测脉冲信号的宽度被测脉冲信号的宽度TW。(2)硬件电路)硬件电路 硬件电路简图如图硬件电路简图如图4-15。第26页/共71页(3)程序设计)程序设计 利用利用80C5
25、1的内部的内部RAM30H、31H单元保存被测脉冲宽度单元保存被测脉冲宽度对应的计数值。对应的计数值。参考程序如下:参考程序如下:ORG 0000H AJMP MAIN ORG 0100H MAIN:MOV SP,#60H ;设堆栈指针;设堆栈指针 MOV TMOD,#90H;设置控制字,;设置控制字,T1工作于方式工作于方式 ;1,GATE=1 MOV TH1,#00H ;设定计数初值为;设定计数初值为00H 第27页/共71页 MOV TL1 MOV TL1,#00H#00HL1L1:JB P3.3JB P3.3,L1 L1 ;等待输入变为低电平;等待输入变为低电平 SETB TR1 SE
26、TB TR1 ;预置;预置TR1=1TR1=1,准备启动,准备启动T1T1L2L2:JNB P3.3JNB P3.3,L2 L2 ;等待上升沿,以便开始计数;等待上升沿,以便开始计数L3L3:JB P3.3JB P3.3,L3 L3 ;是高电平则计数继续;是高电平则计数继续 CLR TR1 CLR TR1 ;低电平则停止计数;低电平则停止计数 MOV AMOV A,TL1TL1 ;读低位计数值;读低位计数值 MOV 30HMOV 30H,A A ;低位计数值存于;低位计数值存于30H30H MOV A MOV A,TH1TH1 ;读高位计数值;读高位计数值 MOV 31HMOV 31H,A A
27、 ;高位计数值存于;高位计数值存于31H31H END END第28页/共71页 (4)总结与思考)总结与思考 定时定时/计数器还可用于测量脉冲信号的频率、周期等。本实计数器还可用于测量脉冲信号的频率、周期等。本实例是利用定时例是利用定时/计数器的门控位(计数器的门控位(GATE)测量脉冲宽度。但要)测量脉冲宽度。但要注意,在晶振注意,在晶振12MHz的情况下,被测脉冲宽度范围最大为的情况下,被测脉冲宽度范围最大为655351s=65.536ms。,如果要测量脉冲信号的周期,该如何去做?,如果要测量脉冲信号的周期,该如何去做?2计数器用于绕线机的控制计数器用于绕线机的控制 绕线机常用于对电机或
28、变压器的绕组进行绕制,图绕线机常用于对电机或变压器的绕组进行绕制,图4-16是是绕线机的控制电路。当按下工作按钮以后,机器启动,绕线机绕线机的控制电路。当按下工作按钮以后,机器启动,绕线机在直流电机和减速齿轮的带动下开始工作。当绕线架上的线圈在直流电机和减速齿轮的带动下开始工作。当绕线架上的线圈绕到规定的圈数时,绕线机会自动停止绕线。如果再次按下工绕到规定的圈数时,绕线机会自动停止绕线。如果再次按下工作按钮,绕线机会重复以上过程。作按钮,绕线机会重复以上过程。第29页/共71页图图4-16 绕线机的控制电路绕线机的控制电路控制说明:1软件控制P1.0=0时,绕线机开始绕线;P1.0=1时,绕线
29、机不绕线。2绕线机每绕一圈,绕线机脉冲产生电路就产生一个脉冲信号。第30页/共71页 (1)工作原理)工作原理 由于单片机复位后由于单片机复位后P1 口的输出状态全部为口的输出状态全部为1,所以,所以系统上系统上电后电后,P1.0输出高电平输出高电平“1”绕线机不工作。绕线机不工作。当按下工作按钮以后,当按下工作按钮以后,P1.1输入低电平输入低电平“0”,当程序检测,当程序检测到到P1.1=0时,在程序指令的控制下从时,在程序指令的控制下从P1.0输出低电平输出低电平“0”。绕线机开始绕线。绕线机每绕一圈,定时绕线机开始绕线。绕线机每绕一圈,定时/计数器计数器T1的输入引的输入引脚上就会产生
30、一个负跳变的输入脉冲。因此,只要用定时脚上就会产生一个负跳变的输入脉冲。因此,只要用定时/计计数器数器T1的计数功能控制好输入脉冲的个数,就等于控制了绕的计数功能控制好输入脉冲的个数,就等于控制了绕线机的绕线圈数。线机的绕线圈数。当绕线机缠绕到指定的圈数时,当绕线机缠绕到指定的圈数时,定时定时/计数器计数器T1引发计数引发计数中断,在程序指令的控制下,中断,在程序指令的控制下,P1.0将输出的高电平将输出的高电平“1”,使,使电机停转,制动器恢复制动,于是系统回到最初的停机状态。电机停转,制动器恢复制动,于是系统回到最初的停机状态。第31页/共71页 我们假设绕线架的规定匝数是我们假设绕线架的
31、规定匝数是5000圈,为控制这个圈数,圈,为控制这个圈数,可以设定定时可以设定定时/计数器计数器T1用作计数器且工作在方式用作计数器且工作在方式1,于是确,于是确定其计数初值为:定其计数初值为:初值初值=65536-5000=60536=0EC78H 所以(所以(TH1)=0ECH,(TL1)=78H(2)控制程序)控制程序 参考程序如下:参考程序如下:ORG 0000H AJMP MAIN ORG 001BH AJMP COUNT ORG 0100H第32页/共71页 MAIN:MOV TMOD,#50H ;设置;设置T1为计数器,工作于方式为计数器,工作于方式1 MOV TH1,#0ECH
32、 ;设定计数初值;设定计数初值 MOV TL1,#78H MOV SP,#60H ;设堆栈指针;设堆栈指针 SETB ET1 ;开;开T1中断中断 SETB EA ;CPU开中断开中断 CLR F0 ;用户标志;用户标志F0清清0WAIT:MOV C,P1.1;等待启动;等待启动 JC WAIT;P1.1=1,等待,等待 CLR P1.0;启动设备;启动设备 SETB TR0;T1开始计数开始计数第33页/共71页LOOP:JNB F0,$;等待计数;等待计数5000中断中断 SETB P1.0;绕线机停止工作;绕线机停止工作 CLR TR0 ;T1停止计数停止计数 CLR F0 ;清;清0
33、SJMP WAIT;等待重新启动;等待重新启动 ORG 0200H;T1中断服务程序起始地址中断服务程序起始地址COUNT:MOV TH1,#0ECH;重新设定计数初值;重新设定计数初值 MOV TL1,#78H SETB F0;用户标志置;用户标志置1 RETI ;中断返回;中断返回 END第34页/共71页.4.4课题与实训课题与实训8 简易方波发生器简易方波发生器一一.实训目的实训目的 掌握定时器初值的计算方法掌握定时器初值的计算方法 学习定时器的使用及定时中断程序的设计方法学习定时器的使用及定时中断程序的设计方法 掌握方波信号发生器的设计方法掌握方波信号发生器的设计方法二二.课题要求课
34、题要求 1基本要求:基本要求:利用定时利用定时/计数器计数器T1,工作于方式,工作于方式0,采用查询方式,采用查询方式,在在P1.0引脚输出频率为引脚输出频率为500Hz的方波,并用示波器进行观的方波,并用示波器进行观察(晶振采用察(晶振采用12MHz)。)。2较高要求:较高要求:利用定时利用定时/计数器计数器T1,工作于方式,工作于方式0,采用中断方式,采用中断方式,在在P1.0引脚输出频率为引脚输出频率为500Hz的方波,并用示波器进行观的方波,并用示波器进行观察(晶振采用察(晶振采用12MHz)。)。第35页/共71页三三.背景知识背景知识 1方波产生原理方波产生原理 使使P1.0引脚的
35、输出状态定时翻转,则该端口能输出一定频引脚的输出状态定时翻转,则该端口能输出一定频率的方波。率的方波。2方式方式0的时间常数初值的时间常数初值 定时定时/计数器工作于方式计数器工作于方式0状态下,定时状态下,定时/计数的长度是计数的长度是13位。位。应用前面给出的时间常数初值的计算公式应用前面给出的时间常数初值的计算公式 X=8192-t(fosc/12)我们可以很方便地计算出时间常数初值,但在将其装入定我们可以很方便地计算出时间常数初值,但在将其装入定时时/计数器的计数器的TH、TL寄存器时,寄存器时,必须要注意:将计算结果的必须要注意:将计算结果的高高8位装入位装入TH1(或(或TH0)、
36、低)、低5位装入位装入TL1(或(或TL0),这一),这一环节是非常容易出错的。环节是非常容易出错的。第36页/共71页 以该实训以该实训T1方式方式0产生产生500Hz的方波(周期是的方波(周期是2ms)为例,需要进行)为例,需要进行1ms的定时,时间常数初值的定时,时间常数初值 X=8192-110-3(12106/12)=8192-1000=7192=1C18H=0001110000011000B 以以13位二进制数表示,是位二进制数表示,是11100000 11000B,则则(TL1)=00011000B=18H,(,(TH1)=11100000B=0E0H 定义定义TMOD=0000
37、0000B第37页/共71页四四.硬件电路硬件电路该实训硬件电路十分简单,见图该实训硬件电路十分简单,见图4-17。图图4-17 简易方波发生器的硬件电路简易方波发生器的硬件电路第38页/共71页五五.参考程序参考程序(1)P1.0输出输出500Hz方波方波查询方式查询方式 ORG 0000H LJMP MAIN ;跳至主程序;跳至主程序 ORG 0100H MAIN:MOV TMOD,#00H;置;置T1工作于方式工作于方式0 MOV TH1,#0E0H;装入时间常数初值;装入时间常数初值 MOV TL1,#18H SETB TR1 ;启动;启动T1LOOP:JNB TF1,LOOP ;查询
38、等待;查询等待 CLR TF1 ;清;清TF1 CPL P1.0 ;P1.0取反取反第39页/共71页 MOV TH1,#0E0H;重新装入时间常数初值;重新装入时间常数初值 MOV TL1,#18H AJMP LOOP ;继续生成波形;继续生成波形 END第40页/共71页 (2)P1.0输出输出500Hz方波方波中断方式中断方式 ORG 0000H LJMP MAIN ;跳至主程序;跳至主程序 ORG 001BH ;T1的中断入口地址的中断入口地址 LJMP FANGBO;转至中断服务程序;转至中断服务程序 ORG 0100H MAIN:MOV TMOD,#00H;置;置T1工作于方式工作
39、于方式0 MOV TH1,#0E0H;装入时间常数初值;装入时间常数初值 MOV TL1,#18H SETB ET1 ;允许;允许T1中断中断 SETB EA ;CPU开中断开中断 SETB TR1 ;启动;启动T1第41页/共71页 SJMP$;等待中断;等待中断FANGBO:CPL P1.0 ;P1.0取反取反 MOV TH1,#0E0H;重新装入时间常数初值;重新装入时间常数初值 MOV TL1,#18H RETI ;中断返回;中断返回 END六六.总结与提高总结与提高 1总结总结 本实训利用定时器本实训利用定时器T1的定时功能,以两种形式输出频率的定时功能,以两种形式输出频率为为500
40、Hz方波。在实际应用中,方波的频率可能要根据现场测方波。在实际应用中,方波的频率可能要根据现场测量参数、给定参数或按照某种函数关系而变化。因此输出波量参数、给定参数或按照某种函数关系而变化。因此输出波形的频率在编程时还是未知的。形的频率在编程时还是未知的。第42页/共71页2提高提高 定时定时/计数器的计时范围有限,当晶振采用计数器的计时范围有限,当晶振采用12MHz时,时,方式方式1的计时时间最长,也只有的计时时间最长,也只有65.536ms。当需要定时的。当需要定时的时间超出了定时时间超出了定时/计数器的计数范围,如需定时计数器的计数范围,如需定时2秒,这时秒,这时可以采用以下两种方法来处
41、理:可以采用以下两种方法来处理:定时器定时器+软件计数的方法软件计数的方法 思路是:思路是:利用定时利用定时/计数器计数器T1,工作于方式,工作于方式1,实现,实现50 ms/次的定时,只要定时次的定时,只要定时40次即可实现次即可实现2s定时。定时。可以算出定时可以算出定时/计数器计数器T1工作于方式工作于方式1时,时间常数初值为时,时间常数初值为 X=65536-t(fosc/12)=65536-5010-3(12106/12)=15536=3CB0H 于是(于是(TH1)=3CH,(,(TL1)=0B0H。第43页/共71页 定义定义TMOD=00010000B,此处只给出延时,此处只给
42、出延时2s的查询方式的查询方式子程序。子程序。DELAY:MOV R3,#40 ;设置定时器溢出次数;设置定时器溢出次数 SETB TR1 ;启动;启动T1开始计时开始计时 D1:MOV TH1,#3CH ;装入时间常数初值;装入时间常数初值 MOV TL1,#0B0HD2:JBC TF1,D3;TF1为为1否否?是则跳至是则跳至D3,并清,并清TF1,AJMP D2 ;否,则跳至;否,则跳至D2 D3:DJNZ R3,D1;R3=0?不是,跳到?不是,跳到D1 CLR TR1 ;是,则停止计数;是,则停止计数 RET第44页/共71页采用两个定时器串联的方法采用两个定时器串联的方法 思路是:
43、思路是:将两个定时器中的一个(如将两个定时器中的一个(如T0)设置为定时方式,另)设置为定时方式,另一个(一个(T1)设置成计数方式;将定时器)设置成计数方式;将定时器T0计满产生的输计满产生的输出,通过一根出,通过一根I/O口线(如口线(如P1.0)连接到计数器)连接到计数器T1的计数的计数脉冲输入端脉冲输入端P3.5,从而实现更长时间的定时。,从而实现更长时间的定时。第45页/共71页.5.5中断与定时计数器综合应用举例中断与定时计数器综合应用举例 4.5.1 4.5.1 概述概述 定时定时/计数功能与中断一样,都是单片机的常用功能。计数功能与中断一样,都是单片机的常用功能。两者常常同时使
44、用。如实训两者常常同时使用。如实训7就是简单的中断、定时综合就是简单的中断、定时综合应用实例。在这类程序的编制过程中,要注意这样几个应用实例。在这类程序的编制过程中,要注意这样几个问题:问题:l 选择合适的中断和定时选择合适的中断和定时/计数方式。计数方式。如外部中断是采用电平触发还是脉冲下降沿触发;定如外部中断是采用电平触发还是脉冲下降沿触发;定时时/计数是用自动重装方式还是每次定时结束后用软件重计数是用自动重装方式还是每次定时结束后用软件重装。装。第46页/共71页l 确定定时结束的判别方法,用中断还是查询确定定时结束的判别方法,用中断还是查询。如采用中断,与其它中断的优先级如何确定,是否
45、会影如采用中断,与其它中断的优先级如何确定,是否会影响系统功能。响系统功能。l 正确初始化。正确初始化。l 合理分配控制功能。合理分配控制功能。.5.2课题与实训课题与实训9 音乐门铃音乐门铃一一.实训目的实训目的 1.掌握中断与定时掌握中断与定时/计数综合程序的设计方法计数综合程序的设计方法 2.学习音乐门铃的设计过程学习音乐门铃的设计过程二二.课题要求课题要求 在单片机在单片机P1.0引脚外接扬声器,唱出引脚外接扬声器,唱出祝你生日快乐祝你生日快乐歌。歌。第47页/共71页三三.背景知识背景知识 1.音频脉冲的产生音频脉冲的产生 声音的频谱范围约在几十到几千赫兹,若能利用程序来控制声音的频
46、谱范围约在几十到几千赫兹,若能利用程序来控制单片机某个口线的单片机某个口线的“高高”电平或电平或“低低”电平,则在该口线上就电平,则在该口线上就能产生一定频率的方波,接上喇叭就能发出一定频率的声音,能产生一定频率的方波,接上喇叭就能发出一定频率的声音,若再利用延时程序控制若再利用延时程序控制“高高”“”“低低”电平的持续时间,就能改电平的持续时间,就能改变输出频率,从而改变音调。变输出频率,从而改变音调。例如,例如,要产生中音要产生中音1。从表。从表4-5可知,中音可知,中音1的频率为的频率为523Hz,周期周期T=1/523=1912s,其半周期为,其半周期为1912/2=956s,因此只要
47、在,因此只要在P1.0引脚产生半周期为引脚产生半周期为956s的方波,即可听到持续的的方波,即可听到持续的1音。音。C调各音符频率与计数初值的对应表如下:调各音符频率与计数初值的对应表如下:第48页/共71页注:不发音的简谱码用注:不发音的简谱码用“0”表示表示第49页/共71页 2音乐节拍的生成音乐节拍的生成 要唱出一首歌,只产生出音频脉冲还不够,还要考虑节要唱出一首歌,只产生出音频脉冲还不够,还要考虑节拍。拍。定义:每个音符占用一个字节,字节的高定义:每个音符占用一个字节,字节的高4位代表音符的位代表音符的高低,低高低,低4位表示该音符的节拍,位表示该音符的节拍,如果一拍为如果一拍为0.4
48、秒,则秒,则1/4拍拍是是0.1秒,只要设定延迟时间就可获得节拍的时间。我们也可秒,只要设定延迟时间就可获得节拍的时间。我们也可以设以设1/4拍为拍为1个个DELAY,则则1拍应该是拍应该是4个个DELAY,只要求得,只要求得1/4拍的拍的DELAY时间,其余的节拍就是它的倍数。见表时间,其余的节拍就是它的倍数。见表 表表4-6 节拍与节拍码对照表节拍与节拍码对照表第50页/共71页 3.建立音乐的步骤:建立音乐的步骤:l 先把谱的音符找出,然后由上表建立时间常数初值先把谱的音符找出,然后由上表建立时间常数初值T的顺序的顺序表,标号为表,标号为TABLE1。l 建立音符和节拍表,标号为建立音符
49、和节拍表,标号为TABLE,将构成发音符的计数,将构成发音符的计数值放在其中。值放在其中。l TABLE表的结构为:表的结构为:简谱码(代表音符)为高简谱码(代表音符)为高4位,位,节拍节拍码(表示节拍数)为低码(表示节拍数)为低4位,位,在唱歌程序中对每一个有节拍的在唱歌程序中对每一个有节拍的音符能通过设计共同生成音符节拍码,本程序的音符节拍码表音符能通过设计共同生成音符节拍码,本程序的音符节拍码表见表见表4-5。第51页/共71页(1)1/4拍的延迟时间拍的延迟时间=187毫秒毫秒DELAY:MOV R5,#02 D1:MOV R4,#187 D2:MOV R3,#248 DJNZ R3,
50、$DJNZ R4,D2 DJNZ R5,D1 DJNZ R6,DELAY RET (2)歌谱)歌谱 生日快乐歌生日快乐歌 C3/45.5 6 5 7-5.5 6 5-祝祝 你生日你生日 快快 乐乐 祝祝 你你 生生 日日 快快 乐乐5.5 7 6-我我 们高声们高声 歌歌 唱唱 祝祝 你生日你生日 快快 乐乐 第52页/共71页四四.硬件电路硬件电路图图4-18 音乐的应用音乐的应用 电路电路 第53页/共71页五五.参考程序参考程序 ORG 0000H LJMP MAIN ;跳至主程序;跳至主程序 ORG 001BH ;T1的中断入口地址的中断入口地址 LJMP TIM1 ;转至中断服务程序