110 likes | 260 Views
第 6 章 定时器 / 计数器. 6.1 定时器控制、状态寄存器. 6.2 定时器工作方式. 6.3 计算时间常数. 6.4 定时器应用. MCS-51 计数 / 定时器的实质. 实质是计数器, 脉冲每一次下降沿,计数寄存器数值将加 1. 计数的脉冲如果来源于单片机内部的 晶振 , 由于其周期极为准确,这时称为 定时器 。 计数的脉冲如果来源于单片机 外部的引脚 ,由于其周期一般不准确,这时称为 计数器 。. 8031 有 2 个可独立控制的 16 位定时器 / 计数器: T0 、 T1. 脉冲. +1 计数器. 溢出. 中断. 控制
E N D
第6章 定时器/计数器 6.1 定时器控制、状态寄存器 6.2 定时器工作方式 6.3 计算时间常数 6.4 定时器应用
MCS-51 计数/定时器的实质 实质是计数器,脉冲每一次下降沿,计数寄存器数值将加1. 计数的脉冲如果来源于单片机内部的晶振,由于其周期极为准确,这时称为定时器。 计数的脉冲如果来源于单片机外部的引脚,由于其周期一般不准确,这时称为计数器。 8031 有2个可独立控制的16位定时器/计数器:T0、T1 脉冲 +1计数器 溢出 中断 控制 开关
T0 T1 6.1定时器控制、状态寄存器 1)TMOD定时器方式寄存器(89H) 1)功能选择位C/T: =0,定时功能,计数内部机器周期脉冲; =1,计数功能,计数引脚T0(T1)输入的负脉冲。 2)方式选择位M1、M0: 4种工作方式: 3)门控方式选择位GATE 计数器启动方式的选择 确定定时器工作方式指令: MOV TMOD,#方式字 例:设T0用方式2非门控定时,T1用方式1门控计数。 MOV TMOD,#0D2H ; 1101 0010 B
6.2 定时器工作方式由方式选择位M1、M0设定 1.方式0 13位定时/计数器。 THx 8位和TLx低5位组成13位加1计数器,此种方式与MCS-48系列兼容,如果不是为了兼容的目的,一般不用方式0. 方式0的全部功能,方式1都可以代替。
2. 方式1 16位定时/计数器。 THx8位和TLx8位组成16位加1计数器 最大计数脉冲个数:1~65536(216) 最长定时时间(晶振12MHz T=1s):1s ~ 65536×T= 65.54ms 启动计数方式: 非门控方式:当GATE=0, 控制权由 TRx 决定 TRx=1 计数开始 TRx=0 计数停止 门控方式:当GATE=1、TRx=1 控制权由 INTx 决定 INTx=1 计数开始 INTx=0 计数停止
3. 方式2 用于需要重复定时和计数的场合。 最大计数值:256 (28) 最大定时时间(晶振12MHz时 T=1s): 256s 自动恢复初值8位定时/计数器。TLx为8位加1计数器, THx为8位初值暂存器。
4.方式3 T0分成2个8位定时器:TL0定时/计数器和TH0定时器 TL0占用T0控制位:C/T,TR0,GATE; TH0占用T1控制位:TR1。 T1不能使用方式3工作
6.3 计算时间常数X(计算初值) 计数功能:X= 2n -计数值 n:8/13/16 定时功能:X= 2n - t/T t:定时时间(s) T:机器周期 =12/晶振频率 如:晶振为12MHz时,T=12/12 MHz=12÷(12×10-6)(秒)=1×10-6=1us 4.4 MCS-51定时器的应用 定时器初始化编程:使用定时器工作之前,先写入控制寄存器,确定好定时器工作方式 初始化编程格式: MOV TMOD,# 方式字 ;选择方式 MOV THx,#XH;装入Tx时间常数 MOV TLx,#XL SETB EA ;开Tx中断 SETB ETx SETB TRx;启动Tx定时器
2ms 解:每隔1ms改变一次P1.0的输出状态,即形成方波,用T0非门控方式1定时。 计算时间常数:X = 216 - t/T = 216 –(1/1000)/10-6 = 65536-1000 = 64536 = FC18H ORG 0000H AJMP MAIN ORG 000BH ;T0中断硬件入口地址 AJMP PT0INT ;跳到中断服务程序 ORG 0030H MAIN: MOV TMOD,#01H ;中断方式 MOV TL0,#18H ;计数初值 MOV TH0,#0FCH SETB EA ;开放总中断 SETB ET0 ;开放T0中断 SETB TR0 ;启动定时器 HERE: SJMP HERE ;等待中断,相当于执行其它任务 PT0INT: MOV TL0,#18H ;中断服务程序;置初值 MOV TH0,#0FCH CPL P1.0 ;取反,产生方波 RETI ;中断返回 例:由P1.0输出方波信号,周期为2ms,设fosc=12MHz。
例 P1.7驱动LED亮1秒灭1秒地闪烁,设时钟频率为12MHz。 ORG 0000H AJMP MAIN ORG 001BH AJMP PT1INT ORG 0030H START: MOV R7,#00H MOV TMOD,#10H MOV TL1, #0F0H MOV TH1, #0D8H SETB EA SETB ET1 SETB TR1 HERE: SJMP HERE PT1INT: MOV TL1,#0F0H MOV TH1,#0D8H INC R7 CJNE R7,#10, PEND MOV R7, #00H CPL P1.7 PEND: RETI 长定时方法:增加一个软件计数器(如R7), 记录中断次数,计满n个中断为1秒。
INT1 TR1=1 T1启动 TR1=0 T1停止 例定时器外部引脚T0(T1)用作外部中断信号输入端。 例:门控方式测量正脉冲宽度 解: INT1引脚输入被检测信号,记录在正脉冲的时间内包含机器脉冲个数。 设脉宽小于65.5ms 等待查询INT0,正脉冲过后,读出TH1TL1。 外部负脉冲引起中断请求,选计数方式,时间常数为FFH。 START: MOV TMOD,#90H MOV TL1,#00H MOV TH1,#00H WAIT1: JB P3.3,WAIT1 SETB TR1 WAIT2 :JNB P3.3,WAIT2 WAIT3 : JB P3.3,WAIT3 CLR TR1 MOV R2,TL1 MOV R3,TH1 …