1、单片机原理及接口技术,第章 定时器/计数器,本章学习要求:,1.掌握定时器/计数器的工作原理; 2.掌握定时器/计数器的电路结构; 3.掌握定时器/计数器的四种工作方式; 4.掌握定时器/计数器的SFR和编程方法.,单循环定时程序: DLY1: MOV R5,#TIME LOOP: NOP NOP DJNZ R5,LOOP RET,设:fOSC=6MHz,循环次数TIME为100 则: T=12/6MHz=2s t=(1+4TIME)T=802(s),双循环定时程序: DLY2:MOV R6,#64H I1: MOV R7,#0FFH I2: DJNZ R7,I2 DJNZ R6,I1 RET
2、,设:fOSC=12MHz 则: T=12/12MHz=1st=(11+1100+2100255+2100+21)T= 51.303 ms,一 软件定时器:,5.1 引言,5.1 引言,二 硬件计数器定时器:,可预置初值的位计数器:74HC193,初值,初值置入,计数 输出,时钟,进位,5.1 引言,CLK,5.1 引言,D0,TL0,TH0,D7,D0,D7,多个计数器的级联:,SFR:8AH,SFR:8CH,5.2 AT89C51单片机定时器/计数器特点,5.2 AT89C51单片机的定时器/计数器特点,MCS-51单片机具有两个定时器,T0和T1; T0和T1的最大位宽均为16bit;
3、具有四种工作方式。,K1,K2,计数器,溢出标志 TF0 / TF1,脉冲源选择,开关控制,内部定时 Fosc/12,外部计数 P3.4 / P3.5,初值,TH0/TL0,TH1/TL1,5.3 电路结构及编程,5.3 电路结构及编程,5.3.1 脉冲源选择,K1,内部定时时钟 Fosc/12,外部计数脉冲Tx,0,1,5.3 电路结构及编程,5.3.2 开关控制,SFR:TCON定时控制器(88H),两种控制方式: GATE置0,由内部TRx控制开关; 用于定时和计数。 TRx/GATE都置1,由外部INTx控制开关。 用于测量INTx脉冲宽度。,5.3 电路结构及编程,5.3.3 溢出标
4、志,SFR:TCON定时控制器(88H),注意: 计数器溢出后,溢出标志TFx将自动置1,为了能够识别下一次的溢出,必须用软件对TFx清0。 如: CLR TF0 ANL TCON,#0DFH 而不能用: MOV TCON,#00H,5.3 电路结构及编程,为什么?,5.3.4 计数器,计数器,初值,TH0/TL0,TH1/TL1,SFR:TL0定时器T0低字节(8AH),SFR:TH0定时器T0高字节(8CH),SFR:TL1定时器T1低字节(8BH),SFR:TH1定时器T1高字节(8DH),四种工作方式,5.3 电路结构及编程,(1)工作方式0,由THx的全部8位和TLx的低5位构成的1
5、3位计数器。,工作方式0的计数范围是18192( );,若晶振频率为6MHz, 则最小定时时间为:最大定时时间为:,MOV TH0,#0FCH MOV TL0,#03H,思考题:若晶振频率为6MHz,定时器T0的初值如右赋值语句,问定时时间为多少?,工作方式0的定时时间计算公式:,5.3 电路结构及编程,例5.1 设单片机晶振为6MHz,使用定时器T1工作方式0,产生周期为500us的占空比为50%的连续方波信号,并由P1.0口输出。,计算初值: 500us的方波信号,由250us的高低电平组成。 计算定时器初值X:X=8067,1111_1100_0_0011B因此,TH1初值为FCH,TL
6、1初值为03H,TMOD初始化: T1工作方式(M1M0=00),定时器方式(C/T=0),定时计数(GATE=0) 因此,TMOD的状态字为00H。,程序设计: 用TCON中TR1位控制T1的启动和停止通过JNB指令反复查询TF1位的状态,判断定时时间是否得到定时到后,清除标志位、重新赋定时器初值。,5.3 电路结构及编程,5.3 电路结构及编程,ORG 0000HLJMP 0030HORG 0030HMOV TMOD,#00H ;T1工作方式0MOV TH1,#0FCH ;T1定时250us初值MOV TL1,#03HSETB TR1 ;打开定时器T1 LP: JNB TF1, $ ;判断
7、T1是否溢出CLR TF1 ;清溢出标志位MOV TH1,#0FCH ;重新赋定时初值MOV TL1,#03HCPL P1.0 ;P1.0口输出状态取反SJMP LP,(2)工作方式1,由THx的8位和TLx8位构成的16位计数器。,工作方式1的计数范围是165536( );,若晶振频率为6MHz, 则最小定时时间为:最大定时时间为:,MOV TH0,#1FH MOV TL0,#83H,思考题:若晶振频率为6MHz,定时器T0的初值如右赋值语句,问定时时间为多少?,工作方式1的定时时间计算公式:,5.3 电路结构及编程,例5.2 设单片机晶振为12MHz,使用定时器T0工作方式1,产生周期为5
8、s的占空比为50%的连续方波信号,并由P1.7口输出。,计算初值: 5s的方波信号,由2.5s的高低电平组成。 2.5s定时宽度可由50个50ms定时组成。 计算定时50ms的定时器初值X:X=15536=3CB0H因此,TH0初值为3CH,TL0初值为B0H,TMOD初始化: T0工作方式1(M1M0=01),定时器方式(C/T=0),定时计数(GATE=0) 因此,TMOD的状态字为01H.,程序设计: 用TCON中的TR0位控制T0的启动和停止通过JNB指令反复查询TF1位的状态,判断定时时间是否得到定时到后,清除标志位、重新赋定时器初值、判断溢出次数。,5.3 电路结构及编程,ORG
9、0000HLJMP 0030HORG 0030HMOV TMOD,#01H;T0工作方式1MOV TH0,#3CH ;T0定时50ms初值MOV TL0,#0B0HMOV R0,#50 ;定时次数SETB TR0 ;启动定时器 LP:JNB TF0,$ ;判断T0是否溢出CLR TF0 ;清溢出标志MOV TH0,#3CH ;重赋初值MOV TL0,#0B0H DJNZ R0,LP ;判断溢出次数是否达到50次CPL P1.7 ;P1.7口输出状态取反MOV R0,#50 ;重置定时次数SJMP LP,5.3 电路结构及编程,软件级联,(3)工作方式2,由TLx的8位构成8位计数器; THx用
10、作初值预置寄存器存储初值。,工作方式2的计数范围是1256( );,若晶振频率为6MHz, 则最小定时时间为:最大定时时间为:,MOV TL0,#03H,思考题:若晶振频率为6MHz,定时器T0的初值如下赋值语句,问定时时间为多少?,工作方式1的定时时间计算公式:,5.3 电路结构及编程,例5.3 设单片机晶振为12MHz,使用定时器T0工作方式2,产生100us定时,在P1.1口输出周期为200us连续方波信号。,计算初值:X=156=9CH因此,TL0初值为9CH,TMOD初始化: T0工作方式2(M1M0=10),定时器方式(C/T=0),定时计数(GATE=0) 因此,TMOD的状态字
11、为02H.,程序设计: 用TCON中的TR0位控制T0的启动和停止通过JNB指令反复查询TF0位的状态,判断定时时间是否得到定时到后,清除标志位。,5.3 电路结构及编程,ORG 0000HLJMP 0030HORG 0030HMOV TMOD,#02H;T0工作方式2MOV TL0,#9CH ;T0定时100ms初值MOV TH0,#9CH ;初值预置寄存器SETB TR0 ;启动定时器 LP:JNB TF0,$ ;判断T0是否溢出CLR TF0 ;清溢出标志CPL P1.1SJMP LP,5.3 电路结构及编程,为什么定时器溢出后没有重新赋初值?,(4)工作方式3,只有T0可以工作在方式3
12、下; TL0构成一个8位的定时器/计数器; 启动和停止控制位为TR0 溢出标志位为TF0 TH0构成一个8位的定时器. 脉冲源只能是内部定时时钟Fosc/12 启动和停止控制位借用TR1 溢出标志位借用TF1,5.3 电路结构及编程,本章小结,本章小结,TH0,TH1,本章小结,作业,作业:,1 已知单片机晶振频率为12MHz,采用查询方式编写程序,使用T0以工作方式1产生周期为40ms的等宽方波连续脉冲,并由P1.5口输出.,2 已知单片机晶振频率为12MHz,采用查询方式编写程序,使用T0以工作方式1产生周期为4s的等宽方波连续脉冲,并由P1.4口输出.,4 已知单片机晶振频率为11.0592MHz,T1工作于方式2,为了让T1每秒溢出4800次,试计算T1的定时初值.如果要求每秒溢出9600次,T1的初值又该是多少?,3 已知单片机晶振频率为12MHz,采用查询方式编写程序,使用T1以工作方式2产生周期为400us、占空比为50%的连续方波,并由P1.3口输出.,