1、2023-4-261第第8章章 定时器定时器计数器计数器8.1 概述8.2 定时/计数器的结构和工作原理8.3 定时/计数器的控制8.4 定时/计数器的功能扩展2023-4-262实现定时常用的三种方法:软件定时不可编程的硬件定时可编程芯片定时8.1 概述 2023-4-2631.软件定时软件定时执行指令所花费的时间来构成一定的时间间隔,从而达到定时的目的。例如:MOV R0,50H DELAY:NOP DJMZ R0,DELAY 优点:不需要专门的硬件设备。缺点:浪费了宝贵的CPU资源,效率低。2023-4-2642.不可编程的硬件定时不可编程的硬件定时 如555电路,外接必要的元器件,即可
2、构成硬件定时电路。但硬件连接好后,定时不能由软件控制,即不可编程。3.可编程芯片定时可编程芯片定时 定时值和定时范围容易用软件来确定和修改,使用灵活。在单片机的定时/计数器不够用时,需另外扩展。2023-4-265第第8章章 定时器定时器计数器计数器8.1 概述8.2 定时定时/计数器的结构和工作原理计数器的结构和工作原理8.3 定时/计数器的控制8.4 定时/计数器的功能扩展2023-4-2668.2 定时/计数器的结构和工作原理 1、51单片机内部有2个16位的定时/计数器,结构如下:2023-4-267 2、定时/计数器的工作原理计数器脉冲来源:T0或T1引脚输入的外部事件脉冲信号,每来
3、一个脉冲,计数器加1。计数器溢出:计数器全1时,再来1个脉冲就计满回零,并产生溢出中断请求。计数值计数值N =计数器当前值计数器当前值Nc -计数初值计数初值x (1)计数原理计数值计数值N =溢出时计数器值溢出时计数器值(2n)-计数初值计数初值x 2023-4-268定时时间定时时间 t 计数值计数值N x 计数脉冲周期计数脉冲周期T 若 MCS-51主频为12MHz,机器周期为1s,即12MHz晶振时,每1s定时器完成加1操作。(2)定时原理定时器脉冲来源:系统时钟振荡器。定时时间:定时器对内部机器周期计数(1个机器周期等于12个振荡周期,即计数频率为晶振频率的1/12)。2023-4-
4、269第第8章章 定时器定时器计数器计数器8.1 概述8.2 定时/计数器的结构和工作原理8.3 定时定时/计数器的控制计数器的控制8.4 定时/计数器的功能扩展2023-4-26108.3 定时/计数器的控制 51单片机定时/计数器的工作由两个特殊功能寄存器控制。TMOD用于设置其工作方式;TCON用于控制其启动和中断申请。2023-4-2611 M1、M0:工作方式设置位 1、工作方式寄存器TMOD TMOD(89H)M1 M0 工作方式说 明0 0013 位定时器(TH的 8 位和TL的低 5 位)0 1116 位定时器/计数器 1 02自动重装入初值的 8 位计数器 1 13 T0 分
5、成两个独立的 8 位计数器,T1 停止工作 2023-4-2612C/T:计数器/定时器选择位 =0,定时器(内部时钟信号)=1,计数器(外部计数脉冲)GATE:门控位 =0,启动/停止仅由软件对TRx位写“1”/“0”控制 =1,启动/停止由软件对TRx位写“1”/“0”和在外中断INTx引脚出现信号的高/低共同控制TMOD(89H)2023-4-2613(1)TFx定时器的溢出标志位 =0,计数未满。=1,计数溢出 溢出中断服务程序时会自动清零;但查询时必须软件清零。(2)TRx定时器运行控制位 =0,停止计数。=1,启动计数 低4位与外部中断有关。2、控制寄存器TCON 2023-4-2
6、614(1)IT0选择外部中断请求0为跳沿触发方式还是电平触发方式:IT0=0(电平触发),IT0=1(脉冲触发),可由软件设置。(2)IE0外部中断请求0的中断请求标志位。IE0=0,无中断请求。IE0=1,有中断请求。(3)IT1与IT0类似。(4)IE1与IE0类似。各标志位的功能:复习2023-4-2615(1)EA:中断允许总控制位(总开关)0:CPU屏蔽所有的中断请求(CPU关中断);1:CPU开放所有中断(CPU开中断),但中断请求是否允许,还要由IE中的5个中断请求允许控制位决定。(2)ES:串行口中断允许位(0:禁止,1:允许)(3)ET1ET0:定时器/计数器T1T0的溢出
7、中断允许位(4)EX1EX0:外部中断10的中断允许位复习中断允许寄存器IE,CPU对中断源的开放或屏蔽。2023-4-2616(1)方式0(13位计数器)3.定时器计数器的工作方式 方式 0(13位计数器)2023-4-2617计数个数:Nt/Tcy 初值:a213N=8192-N GATE=0时,仅由TR0控制与门的开启;GATE=1时,与门开启,由INTx引脚信号和TR0共同控制。通常用于测量外部输入信号的脉冲宽度。注意门控位GATE的作用:2023-4-2618(2)方式1(16位计数器)方式 1(16位计数器)计数初值:a216N=65536-N2023-4-2619(3)方式2(自
8、动装载的8位计数器)方式 2(初值自动重装的8位计数器)计数初值:a28N=256-N2023-4-2620(4)方式3(2个独立的8位计数器)T0分成为两个独立的8位计数器TL0和TH0。此时T1无中断可用。2023-4-2621方式0:1-8192;方式1:1-65536;方式2:1-256;定时时间定时时间 t 计数值计数值N x 计数脉冲周期计数脉冲周期T计数值计数值N的取值范围的取值范围:计数值计数值N =溢出时计数器值溢出时计数器值(2n)-计数初值计数初值x 计数初值计数初值Ttxn22023-4-2622定时/计数器初始化程序:确定工作方式(对TMOD赋值)计算初值(写入TH0
9、、TL0或TH1、TL1)开中断(对IE赋值)启动定时/计数器(TR0或TR1置位)4.定时/计数器应用举例2023-4-2623例:用T0的方式0产生10ms的定时,并使P1.0引脚上输出周期为20ms的方波。采用中断方式,设系统时钟频率为6 MHz。20ms2023-4-2624解:1、计算计数初值X 晶振为6MHz,故机器周期T为2s。Nt/T 1010-3/210-6=5000 a213500031920C78H 即应将63H(高8位)送入TH0中,18H(低5位)送入TL0中.2、求T0的方式控制字TMOD M1M0=00,GATE=0,C/T=0,所以TMOD设为00H.2023-
10、4-2625 ORG 0000H LJMP MAIN ORG 000BH;T0溢出中断入口 LJMP DVT0 ORG 0100H MAIN:MOV TMOD,#00H MOV TH0,#63H MOV TL0,#18H SETB ET0;T0溢出中断允许 SETB EA;中断总允许位 SETB TR0;启动T0计数 SJMP$DVT0:CPL P1.0;输出值取反 MOV TH0,#63H MOV TL0,#18H RETI;溢出后重新装入初值 END采用中断方式:2023-4-2626 ORG 0000H LJMP MAIN ORG 0100HMAIN:MOV TMOD,#00H ;设置T
11、0 LOOP:MOV TH0,#63H ;计数初值 MOV TL0,#18H MOV IE,#00H ;禁止中断 SETB TR0 ;启动定时 JNB TF0,$;查询计数溢出 CLR TF0 ;清溢出标志 CPL P1.0 ;取反输出 SJMP LOOP ;重复循环 END 采用查询方式:2023-4-2627第一章第一章 概述概述 例:已知某生产线的传送带上不断地有产品单向传送,产品之间有较大间隔。使用光电开关统计一定时间内的产品个数。假定红灯亮时停止统计,红灯灭时才在上次统计结果的基础上继续统计,试用单片机定时器/计数器T1的方式1完成该项产品的计数任务。2023-4-2628方式 1(
12、16位计数器)GATE=1、TR0=1时,INT0=1时启动计数。INT0=0停止计数。2023-4-2629第一章第一章 概述概述 (1)初始化:TMOD=11010000B=0D0H (GATE=1,C/T=1,M0M1=01)(2)T1在方式1时,溢出产生中断,且计数器回零,故在溢出中断服务程序中,需用R0记录溢出中断次数,以保护累积计数结果。(3)启动T1计数,开T1中断。2023-4-2630 SETB ET1;开T1中断 SETB EA ;开总中断 SETB TR1 ;启动T1 MAIN:ACALL DISP;主程序,调显示子程序 ORG 0A00H T1INT:INC R0 ;中
13、断服务子程序 RETI DISP:;显示子程序 RET 2023-4-2631例:用于外部中断扩展假设有一个用户系统中已使用了两个外部中断源。现要求再增加一个外部中断源,并由 P1.0 口输出一个 5KHz的方波(假设晶振频率为 6 MHz)。分析:T0 置于工作方式3,把 TL0 预置为 0FFH,当T0 端出现由1至0 的负跳变时,TL0 立即溢出,申请中断,相当于边沿触发的外部中断源。在方式3下,TH0 总是作 8 位定时器用,可以靠它来控制由 P1.0 输出的 5KHz方波。2023-4-2632 程序编写:ORG 0000H AJMP START ;复位入口 ORG 000BH AJ
14、MP TL0INT ;TL0中断入口ORG 001BH AJMP TH0INT ;TH0中断入口 ORG 0100H START:MOV TMOD,27H ;T0为方式3,TI为方式2 MOV TL0,0FFH MOV TH0,9CH2023-4-2633 MOV TCON,#55H;外部中断,边沿触发,启动T0、T1 MOV IE,#9F ;开放全部中断 ORG 1000H TL0INT:MOV TL0,#0FFH ;TL0重装初值 RETI TH0INT:MOV TH0,#9CH ;TH0重装初值 CPL P1.0 RETI 2023-4-2634第第8章章 定时器定时器计数器计数器8.1
15、 概述8.2 定时/计数器的结构和工作原理8.3 定时/计数器的控制8.4 定时定时/计数器的功能扩展计数器的功能扩展2023-4-26358.4 定时/计数器的功能扩展 一、一、8253的主要功能的主要功能具有3个独立的16位计数器;每个计数器都可按二进制或BCD码进行计数;每个计数器有6种工作方式;2023-4-2636第一章第一章 概述概述 1.8253内部结构图内部结构图图:8253的内部结构2)缓冲器。8253与CPU数据总线连接的8位双向三态缓冲器3)读/写逻辑。8253内部操作的控制部分。读数据由8253传向CPU,写数据由CPU传向8253。4)控制寄存器。在8253初始化编程
16、时,由CPU写入控制字以决定计数器的工作方式。此寄存器只能写入而不能读出1)计数器0、1、2。三个独立的16位可预置值的减1计数器2023-4-2637CLK:输入脉冲线,计数器就是对:输入脉冲线,计数器就是对这个脉冲计数。这个脉冲计数。GATE:控制计数的启动、禁止。:控制计数的启动、禁止。OUT:输出引脚,当计数减到:输出引脚,当计数减到0时,时,该引脚有输出。该引脚有输出。2.8253外部引脚外部引脚2023-4-26383.8253的控制字的控制字SC1SC0RL1RL0M2M1M0BCDD7D6D5D4D3D2D1D0BCD1二进制二进制0方式方式5101方式方式4001方式方式31
17、1方式方式201方式方式1100方式方式0000先读写低位字节先读写低位字节后读写高位字节后读写高位字节11只读写高位字节只读写高位字节01只读写低位字节只读写低位字节10计数器锁存操作计数器锁存操作00非法非法11计数器计数器201计数器计数器110计数器计数器0002023-4-2639例:设8253的端口地址是8000h-8003h,计数器1工作在方式0,按二进制计数,计数初值为4。写出初始化程序。1.控制字为01010000B=50H。2.计数初值为4。3.初始化程序为:MOV DPTR,#8003H ;控制寄存器地址送DPTR MOV A,#50H ;设置控制字 MOVX DPTR,
18、A ;送控制寄存器 MOV DPTR,#8001H ;T1计数器地址送DPTR MOV A,#4 ;设置计数初值 MOVX DPTR,A ;送计数器1,启动计数2023-4-26404.8253的工作方式的工作方式方式0 计数结束中断方式方式1 可编程单拍脉冲方式方式2 频率发生器(n分频器)方式3 方波发生器方式4 软件触发选通工作方式方式5 硬件触发选通工作方式2023-4-26415.8253的初始化编程的初始化编程 (1)写入每个计数器的控制字,规定计数器的工作方式;(2)写入计数初值。若规定只写低8位,则写入的为计数值的低8位,高8位自动置0;若规定只写高8位,则写入的为计数值的高8
19、位,低8位自动置0;若是16位计数值,则分两次写入,先写入低8位,再写入高8位。2023-4-2642例:设8253计数器1工作于方式0,按BCD码计数,计数初值为400,端口地址为8000H-8003H。写出8253的初始化程序。解:1)控制字为01110001B=71H。写入控制寄存器,端口地址为8003H。2)计数初值为400,由于采用BCD码计数,故按BCD码方式组成0400H,送入计数器1的数据端口,地址为8001H,16位数送两次,先送低00H,再送高8位04H。2023-4-26433)初始化程序 MOV DPTR,#8003H MOV A,#71H MOVX DPTR,A ;把
20、控制字写入端口 MOV DPTR,#8001H MOV A,#00H MOVX DPTR,A ;先写低8位计数值 MOV A,#04H MOVX DPTR,A ;然后写高8位计数值2023-4-26441、重点掌握51系列单片机内部2个16位的定时计数器,有四种不同的工作方式。2、了解8253的功能、工作方式及应用等。本章小结2023-4-2645方式0计完最后一个数时中断当CPU写控制字之后,OUT输出端变低,但计数器没有赋予初值,也没开始计数。要开始计数,GATE信号必须为高电平,并在写入计数初值后,通道开始计数,在计数过程中 OUT一直维持为低,直到计数到“0”时。OUT输出变高。202
21、3-4-2646方式0的基本时序2023-4-2647当CPU写控制字之后,输出为高。当CPU写完计数值后,计数器并不开始计数,直到GATE的上升沿出现时,输出OUT变低。因整个计数过程中,OUT都维持为低,直到计数到0,输出为高,因此输出为一个单拍脉冲。若外部再次启动GATE,则可以再产生一个单拍脉冲。方式1可编程的单拍脉冲2023-4-2648方式1的基本时序GATE43210OUTPUT34210 CLKGATEOUTPUT234WRGATE上升沿后的上升沿后的下一个CLK脉冲的下降沿开始计数。GATE每启动一次,就重新开始计数。2023-4-2649在计数过程中,若GATE变为低电平,
22、停止计数,OUT保持为高电平。GATE恢复到高电平时,计数器装入初值重新开始计数,计数到1时,输出低电平,经过一个CLK周期,输出恢复为高,且计数器自动开始重新计数。方式2速率发生器2023-4-2650方式2的基本时序4321 0(3)OUTGATEOUT CLKn=4n=3 0(4)3212100(3)3210(3)210(3)210WR当GATE为低电平时,计数停止。计数器自动开始重新计数。2023-4-2651方式3和方式2的输出都是周期性的,主要区别:方式3输出有一半时间为高,另一半时间为低。(1)当计数值n为偶数时,输出对称方波,在前n/2计数值时输出高电平,后n/2计数值时输出低
23、电平;(2)当计数值n为奇数时,在前(n+1)/2计数值时输出高电平,后(n-1)/2计数值时输出低电平。方式3方波速率发生器2023-4-2652计数值分别为4和5的两种情况。方式3的基本时序422 1 0(4)OUT n=4GATEOUT n=4n=4n=3 0(4)2103210(4)21 331 CLKOUT n=53210(5)43210(5)430(5)430当GATE为低电平时,计数停止。2023-4-2653当写入控制字后,输出为高。当写入计数值后立即开始计数,计数到0后,输出变低,经过一个输入时钟周期,输出又变高,计数器停止计数。一次性计数,只有在输入新的计数值后,才开始新的
24、计数。计数期间,GATE出现低电平时,计数器停止工作,但GATE恢复高电平后,又从原设定的计数值开始重新计数。方式4软件触发选通2023-4-2654方式4的基本时序 CLKn=4n=4OUTOUTn=4n=40 01 12 23 34 44 44 43 32 21 10 0LOAD nLOAD n GATEGATEOUTOUTWR2023-4-2655写入控制字后,输出为高。在设置了计数值后,计数器并不立即开始计数,而是由门控脉冲GATE的上升沿触发启动。当计数到0时,输出变低,经过一个CLK脉冲,输出恢复为高,停止计数。要等到下次GATE信号的触发才能再计数。在计数期间,GATE变为低电平时,不禁止计数,但GAET再次出现上升沿,则重新按原设定的计数值开始计数。方式5硬件触发选通2023-4-2656方式5的基本时序 CLKOUTOUT(n=4)(n=4)0 01 12 23 34 44 43 32 21 10 0GATEGATE GATEGATEOUTOUT4 43 3