第七章定时计数器与可编程计数器阵列本章学习目标掌握定_第1页
第七章定时计数器与可编程计数器阵列本章学习目标掌握定_第2页
第七章定时计数器与可编程计数器阵列本章学习目标掌握定_第3页
第七章定时计数器与可编程计数器阵列本章学习目标掌握定_第4页
已阅读5页,还剩146页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、1/151 第七章第七章 定时计数器定时计数器 与可编程计数器阵列与可编程计数器阵列本章学习目标本章学习目标掌握定时计数器的应用掌握定时计数器的应用掌握可编程时钟输出模块的应用掌握可编程时钟输出模块的应用掌握可编程计数器阵列模块的应用掌握可编程计数器阵列模块的应用2/151 STC15F2K60S2单片机内部集成了以下与定时单片机内部集成了以下与定时功能有关的模块:功能有关的模块: 1)三个三个16位的定时位的定时/计数器计数器,不仅可以方便地用,不仅可以方便地用于定时控制,而且还可以用作分频器和事件记录;于定时控制,而且还可以用作分频器和事件记录; 2)可编程时钟输出功能可编程时钟输出功能,

2、可给外部器件提供时钟;,可给外部器件提供时钟; 3)三路可编程计数器阵列三路可编程计数器阵列(Programmable Counter Array,PCA)。可用于软件定时器、外)。可用于软件定时器、外部脉冲的捕捉、高速输出以及脉宽调制(部脉冲的捕捉、高速输出以及脉宽调制(Pulse Width Modulation ,PWM)输出。)输出。3/151一、定时一、定时/计数器的结构及工作原理计数器的结构及工作原理 定时定时/计数器的核心是一个计数器的核心是一个加加1计数器计数器,加,加1计计数器的脉冲有两个来源,一个是外部脉冲源,另数器的脉冲有两个来源,一个是外部脉冲源,另一个是系统的时钟振荡

3、器。一个是系统的时钟振荡器。7.17.1定时定时/ /计数器及其应用计数器及其应用OSC12分频或不分频TX端C/T=0C/T=1控制信号加1计数器TFX中断图图7-1 定时定时/计数器的结构框图(计数器的结构框图(x=0、1)4/151当脉冲源为时钟振荡器当脉冲源为时钟振荡器(等间隔脉冲序列)时,(等间隔脉冲序列)时,在每个时钟周期计数器加在每个时钟周期计数器加1,由于计数脉冲为一时,由于计数脉冲为一时间基准,所以脉冲数乘以脉冲间隔时间就是定时间基准,所以脉冲数乘以脉冲间隔时间就是定时时间,因此为时间,因此为定时功能定时功能。当脉冲源为间隔不等的外部脉冲时当脉冲源为间隔不等的外部脉冲时,就是

4、外部事,就是外部事件的件的计数器计数器,计数器在其对应的外输入端上有一,计数器在其对应的外输入端上有一个个10的跳变时加的跳变时加1。外部输入信号的速率是不受。外部输入信号的速率是不受限制的,但必须保证给出的电平在变化前至少被限制的,但必须保证给出的电平在变化前至少被采样一次。采样一次。5/151图中有两个模拟的位开关,图中有两个模拟的位开关,C/T决定其工作方式:是定时决定其工作方式:是定时还是计数。后者受控制信号的控制,决定加还是计数。后者受控制信号的控制,决定加1计数器的开计数器的开启与运行。启与运行。起这两个开关作用的是特殊功能寄存器起这两个开关作用的是特殊功能寄存器TMOD和和TCO

5、N的的相应位,用户可对其进行设置,从而选择不同的工作方式相应位,用户可对其进行设置,从而选择不同的工作方式(计数或定时)或是否启动计数器。另外,(计数或定时)或是否启动计数器。另外,AUXR中的中的T0 x12位和位和T1x12位决定是否对振荡时钟进行位决定是否对振荡时钟进行12分频。分频。OSC12分频或不分频TX端C/T=0C/T=1控制信号加1计数器TFX中断6/151工作原理工作原理计数器对这两个脉冲源之一进行输入计数,每计数器对这两个脉冲源之一进行输入计数,每输入一个脉冲,计数值加输入一个脉冲,计数值加1。当计数到计数器。当计数到计数器为全为全1时,再输入一个脉冲就使计数值回零,时,

6、再输入一个脉冲就使计数值回零,同时从最高位溢出一个脉冲使特殊功能寄存器同时从最高位溢出一个脉冲使特殊功能寄存器TCON的的TF0或或TF1置置1,作为计数器的溢出中,作为计数器的溢出中断标志。断标志。如果定时如果定时/计数器工作于定时状态,则表示定时计数器工作于定时状态,则表示定时时间到;若工作于计数状态,则表示计数回零。时间到;若工作于计数状态,则表示计数回零。7/151CPU与与TMOD、TCON、AUXR、T0、T1的关系图的关系图16位的加位的加1计数器由两个计数器由两个8位的特殊功能寄存器位的特殊功能寄存器THX(高(高8位)和位)和TLX(低(低8位)组成(位)组成(X=0,1,下

7、同)。,下同)。通过改变通过改变TMOD的相应位,它们可被设置为的相应位,它们可被设置为4种不同的工种不同的工作方式。作方式。 CPU内部总线TH1TL1TH0TL0TMODTCON07070707P3.4P3.5AUXR8/151STC15F2K60S2除了定时除了定时/计数器计数器T0和和T1外,外,还有一个还有一个16位定时器位定时器T2(简称(简称T2)。)。T2的工作模式固定为的工作模式固定为16位自动重装载模式。位自动重装载模式。T2可以当定时器使用,也可以用作串口的波可以当定时器使用,也可以用作串口的波特率发生器或可编程时钟输出源。特率发生器或可编程时钟输出源。图图7-3 定时器

8、定时器T2的原理框图的原理框图9/151二、定时二、定时/计数器的相关寄存器计数器的相关寄存器 TMOD、TCON和和AUXR用来确定定时用来确定定时/计数计数器的工作方式并控制其功能。其中,器的工作方式并控制其功能。其中,TMOD控控制定时制定时/计数器计数器0和和1的工作方式;的工作方式;TCON控制定控制定时器时器T0、T1的启停及状态;的启停及状态;AUXR设置定时设置定时器的速度和器的速度和T2的功能。的功能。 10/1511、TMOD:定时器工作方式控制寄存器:定时器工作方式控制寄存器TMOD(地址为(地址为89H,复位值为,复位值为00H)寄存器)寄存器的各位定义如下:的各位定义

9、如下:位号位号D7D6D5D4D3D2D1D0定时器名定时器名定时器定时器1定时器定时器0位名称位名称GATEC/M1M0GATEC/M1M0TT11/151 1)M1和和M0:方式选择控制位:方式选择控制位 M1 M0工作方式工作方式功能说明功能说明0 0016位自动装载的定时器位自动装载的定时器/计数器计数器0 1116位定时器位定时器/计数器计数器1 02可自动装入的可自动装入的8位计数器位计数器1 1留作备用留作备用位号位号D7D6D5D4D3D2D1D0定时器名定时器名定时器定时器1定时器定时器0位名称位名称GATEC/M1M0GATEC/M1M0TT表表7-1 定时定时/计数器的方

10、式选择计数器的方式选择12/1512)C/ :功能选择位。:功能选择位。 1:计数器功能(对:计数器功能(对T0或或T1引脚的负跳变进行计引脚的负跳变进行计数)。数)。 0:定时器功能(对时钟周期进行计数)。:定时器功能(对时钟周期进行计数)。T位号位号D7D6D5D4D3D2D1D0定时器名定时器名定时器定时器1定时器定时器0位名称位名称GATEC/M1M0GATE C/M1M0TT13/1513)GATE:门控位。:门控位。GATE用于选通控制。用于选通控制。 1:INTX为高电平且为高电平且TRX置位时,启动定时器工作。置位时,启动定时器工作。 0:每当:每当TRX置位时,就启动定时器工

11、作。置位时,就启动定时器工作。 注意注意:TMOD寄存器不能进行位寻址,设置时只寄存器不能进行位寻址,设置时只能对整个寄存器赋值。能对整个寄存器赋值。位号位号D7D6D5D4D3D2D1D0定时器名定时器名定时器定时器1定时器定时器0位名称位名称GATEC/M1M0GATE C/M1M0TT14/1512、TCON:定时器控制寄存器:定时器控制寄存器TCON(地址为(地址为88H,复位值为,复位值为00H)寄存器)寄存器的格式如下:的格式如下:位号位号D7D6D5D4D3D2D1D0位名称位名称TF1TR1TF0TR0IE1IT1IE0IT015/151 1)TF1:T1溢出标志位。溢出标志位

12、。 T1启动计数后,最高位产生溢出时,启动计数后,最高位产生溢出时,TF1由硬件由硬件置置1,向,向CPU请求中断,当请求中断,当CPU响应中断时,由响应中断时,由硬件清硬件清0。TF1也可以由程序查询或清也可以由程序查询或清0。 2)TF0:定时器:定时器/计数器计数器0溢出标志位。溢出标志位。 含义和功能与含义和功能与TF1相似。相似。位号位号D7D6D5D4D3D2D1D0位名称位名称TF1TR1TF0TR0IE1IT1IE0IT016/151 3)TR1:T1的运行控制位。的运行控制位。可由软件置位或清可由软件置位或清0。 当当GATE(TMOD.7)=0,TR1=1启动启动T1开始计

13、数,开始计数,TR1=0时停止时停止T1计数。计数。 当当GATE(TMOD.7)=1,TR1=1且且INTX输入高输入高电平时,才允许电平时,才允许T1计数。计数。 4)TR0:定时器:定时器T0的运行控制位。的运行控制位。 含义和功能与含义和功能与TR1相似。相似。位号位号D7D6D5D4D3D2D1D0位名称位名称TF1TR1TF0TR0IE1IT1IE0IT017/151由于定时由于定时/计数器是可编程的,所以在任何一计数器是可编程的,所以在任何一个定时个定时/计数器开始工作之前,必须对其写入计数器开始工作之前,必须对其写入相应的控制字。相应的控制字。把方式控制字写入把方式控制字写入T

14、MOD选择定时器的工作方选择定时器的工作方式式把初值写入把初值写入THX、TLX控制计数长度控制计数长度将将TCON相应位(相应位(TRX)置)置1或清零实现启动或清零实现启动或停止计数。或停止计数。在运行过程中,还可读出在运行过程中,还可读出THX、TLX和和TCON的内容来随时查询的内容来随时查询T0、T1的状态。的状态。18/1513、AUXR:辅助寄存器:辅助寄存器辅助寄存器辅助寄存器AUXR主要用来设置定时器主要用来设置定时器0的速的速度和定时器度和定时器2的工能以及串口的工能以及串口UART的波特率的波特率控制。控制。STC15F2K60S2单片机是单片机是1T 的的8051单片机

15、,单片机,为了兼容传统为了兼容传统8051单片机,定时器单片机,定时器0和定时器和定时器1复位后是传统复位后是传统8051的速度,即的速度,即12分频,但此时分频,但此时指令执行速度仍然是指令执行速度仍然是1T的速度。的速度。 通过设置特通过设置特殊功能寄存器殊功能寄存器AUXR中相关的位,定时器也可中相关的位,定时器也可不进行不进行12分频,实现真正的分频,实现真正的1T速度。速度。19/151辅助寄存器辅助寄存器AUXR(地址为(地址为8EH,复位值为,复位值为01H)各位定义如下:)各位定义如下:位号位号D7D6D5D4D3D2D1D0位名称位名称T0 x12T1x12UART_M0 x

16、6UART_M0 x6T2RT2_C/T2x12EXTRAMS1S2T1)T0 x12:定时器:定时器0速度控制位。速度控制位。 0:定时器:定时器0的速度与传统的速度与传统8051单片机定时器速度单片机定时器速度相同,即相同,即12分频。分频。 1:定时器:定时器0的速度是传统的速度是传统8051单片机定时器速度单片机定时器速度的的12倍,即不分频。倍,即不分频。20/1512)T1x12:(:(D6)定时器)定时器1速度控制位。速度控制位。 0:即:即12分频。分频。 1:不分频。:不分频。 如果如果UART串口用串口用T1作为波特率发生器,作为波特率发生器,T1x12位决定位决定UART

17、串口是串口是12T 还是还是1T。3)T2R:(:(D4)定时器)定时器2运行控制位。运行控制位。 0:不允许定时器:不允许定时器2运行;运行; 1:允许定时器:允许定时器2运行。运行。21/1514)T2_C/ :(:(D3)定时器)定时器2工作方式选择。工作方式选择。 0:定时器(计数脉冲从内部系统时钟输入;:定时器(计数脉冲从内部系统时钟输入; 1:计数器(计数脉冲从:计数器(计数脉冲从P3.1/T2引脚输入)。引脚输入)。T5)T2x12:(D2)定时器定时器2速度控制位。速度控制位。 0: 12分频,分频,T2每每12个时钟计数一次;个时钟计数一次; 1:不分频,:不分频,T2每每1

18、个时钟计数一次。个时钟计数一次。22/151UART_M0 x6用于控制用于控制UART串口的速度。串口的速度。S1S2为串行口为串行口1波特率发生器选择位。波特率发生器选择位。 EXTRAM用于设置是否允许使用内部用于设置是否允许使用内部1024字字节的扩展节的扩展RAM。位号位号D7D6D5D4D3D2D1D0位名称位名称T0 x12T1x12T1x12UART_M0 x6UART_M0 x6T2RT2_C/T2x12EXTRAMS1S2T23/1514、T2H/RL_TH2:定时器:定时器2重装值寄存器高字节重装值寄存器高字节 (地址为(地址为0D6H,复位值为,复位值为00H)位号D7

19、D6D5D4D3D2D1D0位名称5、T2L/RL_TL2:定时器:定时器2重装值寄存器低字节重装值寄存器低字节 (地址为(地址为0D7H,复位值为,复位值为00H)位号D7D6D5D4D3D2D1D0位名称24/151三、定时三、定时/计数器的工作方式计数器的工作方式 通过对寄存器通过对寄存器TMOD中中M1、M0的设置,定时的设置,定时/计数器有计数器有4种不同的工作方式:种不同的工作方式: 方式方式0: 16位自动重装方式位自动重装方式 方式方式1: 16位定时位定时/计数器方式计数器方式 方式方式2: 8位自动重装方式位自动重装方式 方式方式3: 留作备用留作备用25/1511、定时定

20、时/计数器计数器0和和1的工作方式的工作方式0(16位自动重位自动重装方式)装方式)图7-4 定时器0和1的工作方式0的原理框图 26/151STC15F2K60S2的定时器有两种计数速率:一的定时器有两种计数速率:一种是种是12T模式,每模式,每12个时钟加个时钟加1;另一种是;另一种是1T模式,每个时钟加模式,每个时钟加1。T0和和T1的速率分别由特殊功能寄存器的速率分别由特殊功能寄存器AUXR中的中的T0 x12和和T1x12决定。决定。 T0 x12=0,T0工作在工作在12T模式;模式; T0 x12=1,T0工作在工作在1T模式。模式。 T1x12=0,T1工作在工作在12T模式;

21、模式; T1x12=1,T1则工作在则工作在1T模式。模式。27/151如何实现如何实现16位重装载定时器。位重装载定时器。定时器定时器0和定时器和定时器1分别有分别有2个隐藏的寄存器个隐藏的寄存器RL_THx和和RL_TLx。RL_THx与与THx共有同一个地址,共有同一个地址,RL_TLx与与TLx共有同一个地址。共有同一个地址。当当TRx=0即定时器即定时器/计数器被禁止工作时,对计数器被禁止工作时,对TLx、THx写入的内容会同时写入写入的内容会同时写入RL_TLx、RL_THx。当当TRx=1即定时器即定时器/计数器工作时,对计数器工作时,对TLx 、THx写入的内容不会写入写入的内

22、容不会写入RL_TLx 、RL_THx。28/151当定时器工作在模式当定时器工作在模式0时,时,TLx,THx的溢出的溢出不仅置位不仅置位TFx,而且会自动将,而且会自动将RL_TLx,RL_THx的内容重新装入的内容重新装入TLx,THx。当当T0CLKO=1时,时,T1/P3.5引脚配置为定时器引脚配置为定时器0的时钟输出的时钟输出CLKOUT0。当当T1CLKO=1时,时,T0/P3.4引脚配置为定时器引脚配置为定时器1的时钟输出的时钟输出CLKOUT1。29/1512、定时定时/计数器计数器0和和1的工作方式的工作方式1(16位定时位定时/计计数器方式)数器方式)图图7-5 定时器定

23、时器0和和1的方式的方式1的原理框图的原理框图30/151此模式下,定时器配置为此模式下,定时器配置为16位的计数器,由位的计数器,由TLx的的8位和位和THx的的8位构成。位构成。TLx的的8位溢出向位溢出向THx进位,进位,THx计数溢出置位计数溢出置位TCON中的溢出中的溢出标志位标志位TFx。 与方式与方式0的区别是,的区别是,THx计数溢出时,不会重计数溢出时,不会重新装载时间常数。此外,本模式也不用于时钟新装载时间常数。此外,本模式也不用于时钟输出功能。输出功能。31/1513、定时定时/计数器计数器0和和1的工作方式的工作方式2(8位自动重装位自动重装方式)方式)图图7-6 定时

24、定时/计数器的工作方式计数器的工作方式2原理框图原理框图32/151方式方式2是能自动重置初值的是能自动重置初值的8位定时位定时/计数器,计数器,计数溢出后具有自动恢复初值的功能。当计数溢出后具有自动恢复初值的功能。当TL0/TL1计数溢出时,不仅置位溢出标志计数溢出时,不仅置位溢出标志TF0/TF1,还自动将,还自动将TH0/TH1的内容送入的内容送入TL0/TL1,使,使TL0/TL1从初值开始重新计数。从初值开始重新计数。用 户 可 以 通 过 程 序 把 时 间 常 数 预 置 在用 户 可 以 通 过 程 序 把 时 间 常 数 预 置 在TH0/TH1中,再装入后,中,再装入后,T

25、H0/TH1的内容保的内容保持不变。持不变。当当T0CLKO=1时,时,T1/P3.5引脚配置为定时器引脚配置为定时器0的时钟输出的时钟输出CLKOUT0。当当T1CLKO=1时,时,T0/P3.4引脚配置为定时器引脚配置为定时器1的时钟输出的时钟输出CLKOUT1。33/151在自动装载时间常数的工作方式中,用户不需在自动装载时间常数的工作方式中,用户不需要在中断服务程序中重载定时常数,可产生高要在中断服务程序中重载定时常数,可产生高精度的定时时间,适合用作较精确的定时脉冲精度的定时时间,适合用作较精确的定时脉冲信号发生器,如波特率发生器等。特别是工作信号发生器,如波特率发生器等。特别是工作

26、方式方式0(16位自动重装方式),实际工程中应位自动重装方式),实际工程中应用更加方便,因此,建议读者尽量使用方式用更加方便,因此,建议读者尽量使用方式0进行定时器的应用设计。进行定时器的应用设计。定时器定时器2的工作方式与定时器的工作方式与定时器0或或1的工作方式的工作方式0类似,读者可参照上述内容自行学习。类似,读者可参照上述内容自行学习。34/151四、定时四、定时/计数器量程的扩展计数器量程的扩展 在实际应用中,需要的定时时常常超过定时在实际应用中,需要的定时时常常超过定时/计数器的定时能力,特别是当单片机的系统时计数器的定时能力,特别是当单片机的系统时钟频率较高时,定时时长就更为有限

27、。为了满钟频率较高时,定时时长就更为有限。为了满足需要,足需要,经常需要对单片机的定时计数能力进经常需要对单片机的定时计数能力进行扩展。行扩展。35/1511、定时器的最大定时能力、定时器的最大定时能力当工作于定时状态时,定时当工作于定时状态时,定时/计数器是对时钟计数器是对时钟周期进行计数,若对时钟进行周期进行计数,若对时钟进行12分频,则对每分频,则对每12个时钟周期计数一次。个时钟周期计数一次。当晶振频率为当晶振频率为6MHz,采用,采用12分频时,计数的分频时,计数的单位时间为:单位时间为: 单位时间为:单位时间为: Tu= = s=2s 定时时间为定时时间为:TC=XTu。其中,。其

28、中,Tu为单位时间,为单位时间,TC为定时时间,为定时时间,X为所需计数次数。为所需计数次数。晶振频率1260000001236/151STC15F2K60S2单片机的定时单片机的定时/计数器是加计数器是加1计计数器。因此,不能直接将实际的计数值作为计数器。因此,不能直接将实际的计数值作为计数初值送入计数寄存器数初值送入计数寄存器THX、TLX中,而必中,而必须将实际计数值以须将实际计数值以28、216为模求补,以补码作为模求补,以补码作为计数初值设置为计数初值设置THX和和TLX。即应装入计数即应装入计数/定时器的初值为:定时器的初值为: 其中,其中,n=8或或16。TcN2Tun37/15

29、1例如:已知例如:已知Tu2s,要求定时,要求定时TC1ms,则则 对 方 式对 方 式 0 和 方 式和 方 式 1 , 时 间 常 数 为 :, 时 间 常 数 为 : 21 6500=65036=FE0CH (THX装入装入FEH,TLX装入装入0CH)。)。设系统时钟频率为设系统时钟频率为6MHz,12分频时,分频时,8位定时器的最大定时能力为:位定时器的最大定时能力为:T(28 0)2s512s16位定时器的最大定时能力为:位定时器的最大定时能力为:T(216 0)2s131072s131.072ms38/1512、定时量程的扩展、定时量程的扩展 定时量程的扩展分为软件扩展和硬件扩展

30、两种定时量程的扩展分为软件扩展和硬件扩展两种方法。方法。(1)软件扩展方法)软件扩展方法 软件扩展方法是在定时器中断服务程序中软件扩展方法是在定时器中断服务程序中对定对定时器中断请求进行计数时器中断请求进行计数,当中断请求的次数达到,当中断请求的次数达到要求的值时才进行相应的处理。要求的值时才进行相应的处理。39/151例如,某事件的处理周期为例如,某事件的处理周期为1s由于受到最大定时时间的限制,无法一次完成由于受到最大定时时间的限制,无法一次完成定时。定时。此时可以将定时器的定时时间设为以此时可以将定时器的定时时间设为以10ms为一为一个单位,启动定时器后,每一次定时器溢出中个单位,启动定

31、时器后,每一次定时器溢出中断将产生断将产生10ms的定时。的定时。进入中断服务程序后,进入中断服务程序后,对定时器的中断次数进对定时器的中断次数进行计数行计数,每计数,每计数100次进行一次事件的处理,次进行一次事件的处理,则可实现则可实现1s的定时效果。的定时效果。这是最常用的方法。这是最常用的方法。40/151(2)硬件扩展方法)硬件扩展方法硬件扩展方法可以使用外接通用定时器芯片对硬件扩展方法可以使用外接通用定时器芯片对单片机的定时能力进行扩展。单片机的定时能力进行扩展。也可以利用单片机自身的资源对定时能力进行也可以利用单片机自身的资源对定时能力进行扩展。扩展。例如,将两个定时器串联起来使

32、用(其中,一例如,将两个定时器串联起来使用(其中,一个工作于定时方式,另一个工作于计数方式,个工作于定时方式,另一个工作于计数方式,请读者分析其最大定时时间)。请读者分析其最大定时时间)。由于该扩展方法占用较多的资源,较少采用。由于该扩展方法占用较多的资源,较少采用。41/151五、定时五、定时/计数器编程举例计数器编程举例 一般定时一般定时/计数器的应用采用中断方式,因此,计数器的应用采用中断方式,因此,编程时主要考虑两点:编程时主要考虑两点:正确初始化,包括写入控制字、时间常数的计正确初始化,包括写入控制字、时间常数的计算并装入;算并装入;中断服务程序的编写,在中断服务程序中编写中断服务程

33、序的编写,在中断服务程序中编写实现需要定时完成的任务代码。实现需要定时完成的任务代码。42/151在定时在定时/计数器初始化部分的一般步骤大致如下:计数器初始化部分的一般步骤大致如下:设置工作方式,将控制字写入设置工作方式,将控制字写入TMOD寄存器。(对于寄存器。(对于T0和和T1)或)或AUXR(对于(对于T2)。(注意)。(注意TMOD不能进不能进行位寻址)。行位寻址)。设置分频方式,将控制字写入设置分频方式,将控制字写入AUXR寄存器。默认的寄存器。默认的情况是情况是12分频(兼容传统分频(兼容传统8051单片机),如使用传统单片机),如使用传统8051单片机模式,无需设置。单片机模式

34、,无需设置。计算定时计算定时/计数初值,并将其装入计数初值,并将其装入TLX、THX寄存器。寄存器。(对于(对于T0和和T1)或)或T2L、T2H寄存器(对于寄存器(对于T2)。)。置位置位ETX和和EA允许定时允许定时/计数器中断(如果需要)。计数器中断(如果需要)。置位置位TRX(对于(对于T0和和T1)或)或T2R(对于(对于T2)以启动定)以启动定时时/计数。计数。在中断服务程序中,要注意计数初值的重新装入问题。在中断服务程序中,要注意计数初值的重新装入问题。43/151【例【例7-1】 设系统时钟频率为设系统时钟频率为6MHz,利用,利用T0定定时,每隔时,每隔1s将将P2.0的状态

35、取反。的状态取反。 解解:所要求的定时时间所要求的定时时间1s超过了定时器的定时能力超过了定时器的定时能力(时钟频率为(时钟频率为6MHz,12分频时,分频时,16位定时器位定时器的最长定时时间为的最长定时时间为131.072ms),所以无法采),所以无法采用定时器直接实现用定时器直接实现1s的定时。的定时。将定时器的定时时间设为将定时器的定时时间设为50ms,在中断服务程,在中断服务程序中对定时器溢出中断请求进行计数,当计够序中对定时器溢出中断请求进行计数,当计够20次时,将次时,将P2.0的状态取反,否则直接返回主的状态取反,否则直接返回主程序,从而达到程序,从而达到1s的定时。的定时。4

36、4/151选择选择T0为为16位定时器方式,方式字为位定时器方式,方式字为01H。系。系统时钟频率为统时钟频率为6MHz,12分频时,计数单位时分频时,计数单位时间间隔为间间隔为2s。T0的计数初值为:的计数初值为:1636TcXM2(50 10 )/(2 10 )65536250009E58HTu45/151$INCLUDE (STC12.INC) ;包含包含STC12C5A60S2寄存器定义文件寄存器定义文件 ORG0000H LJMP MAIN ;转主程序转主程序 ORG 000BH;T0中断服务程序入口地址中断服务程序入口地址 LJMPT0_ISR ORG 0100HMAIN: MOV

37、 SP,#7FH ;设置堆栈指针设置堆栈指针 MOV TMOD,#01H ;T0初始化初始化 MOV TL0,#58H MOV TH0,#9EH MOV A,#20 ;累加器累加器A置置20 SETB ET0 ;允外允外T0中断中断 SETB EA;CPU开中断开中断 SETB TR0 ;启动启动T0计数计数 SJMP $ ;等待等待46/151T0_ISR:MOV TL0,#58H MOV TH0,#9EH;重新装入时间常数重新装入时间常数 DEC A ; 累加器累加器A内容减内容减1 JNZEXIT CPL P2.0 MOV A,#20 ;累加器累加器A重载重载20EXIT: RETI E

38、ND程序中的符号程序中的符号“$”表示表示“本条指令地址本条指令地址”,指令,指令“SJMP $”相当相当于:于:“HERE: LJMP HERE”。47/151#include “stc12.h”/包含包含STC12C5A60S2的寄存器定义文件的寄存器定义文件sbit P20=P20;/声明声明P2.0的引脚位变量的引脚位变量unsigned char i; /声明计数变量。声明计数变量。C语言程序中尽量不要使用语言程序中尽量不要使用ACCvoid main (void) /SP=0 x60; /使用使用C语言设计程序时,可以不设置堆栈指针语言设计程序时,可以不设置堆栈指针 TMOD=0

39、x01; TL0=0 x58; TH0=0 x9E; i=20;/计数变量赋初值计数变量赋初值ET0=1;/允许允许T0中断中断 EA = 1;/开放总的中断开放总的中断TR0=1;/启动启动T0计数计数 while(1); /等待中断等待中断48/151void T0_ISR (void) interrupt 1 /定时器定时器T0中断函数中断函数TL0=0 x58;/重新装入时间常数重新装入时间常数 TH0=0 x9E; i-;/计数变量减计数变量减1if(i=0) /若减到若减到0,则将,则将P2.0取反取反P20 = !P20; /将将P2.0取反取反i = 20;/重新给计数变量赋值

40、重新给计数变量赋值 49/151若使用工作方式若使用工作方式0,则上述程序中,除了将,则上述程序中,除了将TMOD的的值设置为值设置为0以外,在中断服务程序中,不再需要重新以外,在中断服务程序中,不再需要重新装入时间常数,即:装入时间常数,即:在汇编语言程序的中断服务程序中可以省去下面的两在汇编语言程序的中断服务程序中可以省去下面的两句:句: MOV TL0,#58H MOV TH0,#9EH;重新装入时间常数重新装入时间常数在在C语言程序的中断服务程序中可以省去下面的两句:语言程序的中断服务程序中可以省去下面的两句: TL0=0 x58; TH0=0 x9E; /重新装入时间常数重新装入时间

41、常数其他部分的程序不变。其他部分的程序不变。对于对于1T模式的使用,请读者自行实验学习。模式的使用,请读者自行实验学习。 思考:思考:若晶振频率修改为若晶振频率修改为11.0592MHz,时间常,时间常数应为多少?数应为多少?50/151【例【例7-2】设时钟频率为】设时钟频率为18.432MHz,使用定时,使用定时器器2定时,使定时,使P0.0口输出口输出38.4KHZ的方波。的方波。汇编代码如下:汇编代码如下: $INCLUDE (STC15.INC) ;包含寄存器定义文件包含寄存器定义文件 ;定义定义38.4KHz时的时间常数时的时间常数 (65536-18432000/12/38400

42、/2) T38_4KHz EQU 0FFECH TEST_PIN BIT P0.0 ;测试引脚定义测试引脚定义 ORG0000H LJMPMAIN ORG0063H ;定时器定时器2的中断服务程序入口地址的中断服务程序入口地址 LJMPT2_ISR51/151MAIN: MOV SP,#70H;设置堆栈指针设置堆栈指针 ORLAUXR,#04H;设置设置T2为为1T模式模式 MOV T2H,#HIGH T38_4KHz;设置定时器设置定时器2重装载时间重装载时间 常数的高字节常数的高字节 MOV T2L,#LOW T38_4KHz;设置定时器设置定时器2重装载时间重装载时间 常数的低字节常数的

43、低字节 ORL AUXR,#10 H;启动定时器启动定时器2 ORL IE2,#04H;允许定时器允许定时器2中断中断 SETBEA;开放开放CPU中断中断 SJMP$;定时器定时器2中断服务程序中断服务程序T2_ISR: CPL TEST_PIN RETI END52/151对应的对应的C语言代码如下:语言代码如下:#include “stc15.h”/包含包含STC15F2K60S2的寄存器定义文件的寄存器定义文件typedef unsigned char BYTE;typedef unsigned int WORD;#define FOSC 18432000L#define T38_4K

44、Hz (65536-18432000/12/38400/2) /38.4KHz sbit TEST_PIN = P00; /定义测试引脚定义测试引脚void main(void) AUXR|= 0 x04;/设置设置T2为为1T模式模式 T2H = T38_4KHz8; /设置设置T2重装时间常数的高字节重装时间常数的高字节 T2L = T38_4KHz; /设置设置T2重装时间常数的低字节重装时间常数的低字节 AUXR |= 0 x10; /启动定时器启动定时器2 IE2 |= 0 x04; /允许定时器允许定时器2中断中断 EA = 1; /开放开放CPU中断中断 while (1); /

45、循环等待中断循环等待中断/定时器定时器2中断服务函数中断服务函数void t2_isr(void) interrupt 12 TEST_PIN = TEST_PIN;53/151【例【例7-3】 利用定时器的门控方式实现正脉冲的利用定时器的门控方式实现正脉冲的脉宽测量。脉宽测量。当当GATE=1,TRX=1,只有引脚输入高电平时,只有引脚输入高电平时,TX才被允许计数,利用这一特点,就可以测量才被允许计数,利用这一特点,就可以测量引脚上正脉冲的宽度。引脚上正脉冲的宽度。以以T0为例的门控法测量示意图如图所示。为例的门控法测量示意图如图所示。对T0初始化编程,GATE=1T0从0开始计数T0停止

46、计数,读T0值图图7-7 利用门控法测量脉冲宽度利用门控法测量脉冲宽度54/151解:以解:以T0为例,下面给出实现这一方法的关键代码,完整的为例,下面给出实现这一方法的关键代码,完整的汇编语言程序和对应的汇编语言程序和对应的C语言程序,请读者自行编写。语言程序,请读者自行编写。MOVTMOD,#09H ; T0工作于工作于16位定时方式、位定时方式、GATE置置1MOVTL0,#00HMOVTH0,#00HCLREX0 ;关外部中断关外部中断JNBP3.2,$ ;等待升高等待升高SETBTR0JBP3.2,$ ;等待下降等待下降CLRTR0 ;关关T0MOVA,TL0 ;T0内容高内容高8位

47、送位送B,低,低8位送位送AMOVB,TH0 ;计算脉宽或送显示器显示计算脉宽或送显示器显示55/151思考:思考:(1)当脉冲宽度超过定时器的最大定时时间应)当脉冲宽度超过定时器的最大定时时间应该如何处理?该如何处理?(2)在动态读取运行中的定时)在动态读取运行中的定时/计数器的计数值计数器的计数值时,如果不加注意,就可能出错。这是因为不时,如果不加注意,就可能出错。这是因为不可能在同一时刻同时读取可能在同一时刻同时读取TH0和和TL0中的计数中的计数值。比如,先读值。比如,先读TL0后读后读TH0,因为定时,因为定时/计数计数器处于运行状态,在读器处于运行状态,在读TL0时尚未产生向时尚未

48、产生向TH0进位,而在读进位,而在读TH0前已产生进位,这时读得的前已产生进位,这时读得的TH0就不对了;同样,先读就不对了;同样,先读TH0后读后读TL0也可也可能出错。如何解决这个问题?能出错。如何解决这个问题?56/1517.2可编程时钟输出模块及其应用可编程时钟输出模块及其应用 在控制系统中,有时需要为单片机外部的器在控制系统中,有时需要为单片机外部的器件提供时钟控制,为此,件提供时钟控制,为此,STC12C5A60S2单片单片机提供了机提供了4路路可编程时钟输出功能。可编程时钟输出功能。 MCLKO/P5.4, CLKOUT0/P3.5,CLKOUT1/P3.4, T2CLKO/P3

49、.0。 只有内部只有内部R/C时钟频率为时钟频率为12MHz以下时,以下时,MCLKO/P5.4才能正常输出。才能正常输出。57/151一、可编程时钟输出的相关寄存器一、可编程时钟输出的相关寄存器 1、主时钟输出、主时钟输出 主时钟可以是内部高精度主时钟可以是内部高精度R/C时钟,也可以是时钟,也可以是外部输入的时钟或外部晶体振荡产生的时钟。外部输入的时钟或外部晶体振荡产生的时钟。MCLKO/P5.4的时钟输出控制由的时钟输出控制由CLK_DIV寄寄存器的存器的MCKO_S1和和MCKO_S0位控制。通过位控制。通过 设置设置MCKO_S1和和MCKO_S0可将可将MCLKO/P5.4 管脚配

50、置为主时钟输出,同时,还可以设置输管脚配置为主时钟输出,同时,还可以设置输 出频率。出频率。58/151时钟分频寄存器时钟分频寄存器CLK_DIV(也称为(也称为PCON2,地址为,地址为97H,复位值为,复位值为0000 x000B)的各位定义如下:)的各位定义如下:位号位号D7D6D5D4D3D2D1D0位名称位名称MCKO_S1MCKO_S0 ADRJ TX_RX -CLKS2 CLKS1 CLKS059/151主时钟的输出频率由主时钟的输出频率由MCKO_S1和和MCKO_S0控制。控制。MCKO_S1MCKO_S0内部内部R/C振荡时钟的输出频率振荡时钟的输出频率00 无主时钟输出无

51、主时钟输出01主时钟输出频率主时钟输出频率= MCLK/110主时钟输出频率主时钟输出频率= MCLK/211主时钟输出频率主时钟输出频率= MCLK/4表表7-2 主时钟的输出频率设置主时钟的输出频率设置其中,其中,MCLK指主时钟频率。指主时钟频率。IO口输出的频率最高可达口输出的频率最高可达13.5MHz。60/1512、T2CLKO/P3.0、T1CLKOU/P3.4和和T0CLKOU/P3.5的时钟输出的时钟输出T2CLKO/P3.0、T1CLKOU/P3.4和和T0CLKOU/P3.5的的时钟输出分别由外部中断使能和时钟输出寄存器时钟输出分别由外部中断使能和时钟输出寄存器INT_C

52、LKO (也称为也称为AUXR2)的的T2CLKO、T1CLKO和和T0CLKO位控制。位控制。CLKOUT0的输出时钟频率由定时器的输出时钟频率由定时器0控制,控制,CLKOUT1的输出时钟频率由定时器的输出时钟频率由定时器1控制,控制,T2CLKO的输出时钟频率由定时器的输出时钟频率由定时器2控制控制定时器需要工作在定时器方式定时器需要工作在定时器方式0(16位自动重装模式)位自动重装模式)或方式或方式2(8位自动重装载模式),不允许定时器中断,位自动重装载模式),不允许定时器中断,以免以免CPU反复进中断。反复进中断。61/151外部中断使能和时钟输出寄存器外部中断使能和时钟输出寄存器I

53、NT_CLKO(地址为(地址为8FH,复位值为,复位值为X0000000B)各位的)各位的定义如下:定义如下:位号位号D7D6D5D4D3D2D1D0位名称位名称-EX4EX3EX2-T2CLKOT1CLKOT0CLKO62/1511)T2CLKO:是否将:是否将P3.0脚设置为定时器脚设置为定时器2(T2)的时钟输)的时钟输出出T2CLKO。 T2CLKO=1 设设P3.0引脚为引脚为T2的时钟输出的时钟输出 输出频率输出频率=T2溢出率溢出率/2 如果如果T2_C/T=0,定时器,定时器/计数器计数器T2对内部系统时钟计数,则:对内部系统时钟计数,则:T2工作在工作在1T模式时的输出频率模

54、式时的输出频率=(SYSclk) / (65536-RL_TH2, RL_TL2)/2T2工作在工作在12T模式时的输出频率模式时的输出频率= (SYSclk) /12/ (65536-RL_TH2, RL_TL2)/2 如果如果T2_C/T=1,定时器,定时器/计数器计数器T2对外部脉冲输入对外部脉冲输入(P3.1/T2)计数,计数,则输出时钟频率则输出时钟频率= (T2_Pin_CLK) / (65536-RL_TH2, RL_TL2)/2T2CLKO=0 不允许不允许P3.0引脚为引脚为T2的时钟输出的时钟输出63/151当当T1CLKO=1时,将时,将P3.4/T0脚配置为定时器脚配置

55、为定时器1的时钟输出的时钟输出T1CLKO。 输出时钟频率输出时钟频率= T1溢出率溢出率/2。 定时器定时器/计数器计数器T1工作在定时器模式工作在定时器模式0(16位自动重装模式)时,如果位自动重装模式)时,如果C/T=0,定时器定时器/计数器计数器T1对内部系统时钟计数,则:对内部系统时钟计数,则:T1工作在工作在1T模式时的输出频率模式时的输出频率=(SYSclk) / (65536-RL_TH1, RL_TL1)/2T1工作在工作在12T模式时的输出频率模式时的输出频率= (SYSclk) /12/ (65536-RL_TH1, RL_TL1)/2如果如果C/T =1,定时器,定时器

56、/计数器计数器T1对外部脉冲输入对外部脉冲输入(P3.5/T1)计数,计数, 则输出时钟频率则输出时钟频率= (T1_Pin_CLK) / (65536-RL_TH1, RL_TL1)/2 定时器定时器/计数器计数器T1工作在模式工作在模式2(8位自动重装模式)时,位自动重装模式)时, 如果如果C/T=0,定时器,定时器/计数器计数器T1对内部系统时钟计数,则:对内部系统时钟计数,则: T1工作在工作在1T模式时的输出频率模式时的输出频率 = (SYSclk) / (256-TH1)/2 T1工作在工作在12T模式时的输出频率模式时的输出频率= (SYSclk)/12/(256-TH1)/2如

57、果如果C/T=1,定时器,定时器/计数器计数器T1是对外部脉冲输入是对外部脉冲输入(P3.5/T1)计数,则:计数,则: 输出时钟频率输出时钟频率= (T1_Pin_CLK) / (256-TH1) / 2当当T1CLKO=0时,不允许时,不允许P3.4/T0管脚被配置为定时器管脚被配置为定时器1的时钟输出。的时钟输出。 2)T1CLKO:是否允许将:是否允许将P3.4脚配置为定时器脚配置为定时器1(T1)的时钟)的时钟输出输出T1CLKO。设置方法与。设置方法与T2相同。相同。64/1513)T0CLKO:是否允许将:是否允许将P3.5脚配置为定时器脚配置为定时器0(T0)的时钟)的时钟输出

58、输出T0CLKO。 当当T0CLKO=1时,将时,将P3.5/T1管脚配置为定时器管脚配置为定时器0的时钟输出的时钟输出T0CLKO,输,输出时钟频率出时钟频率=T0溢出率溢出率/2。 定时器定时器/计数器计数器T0工作在定时器模式工作在定时器模式0(16位自动重装模式)时,如果位自动重装模式)时,如果C/T =0,定时器,定时器/计数器计数器T0对内部系统时钟计数,则:对内部系统时钟计数,则:T0工作在工作在1T模式时的输出频率模式时的输出频率= (SYSclk)/(65536-RL_TH0, RL_TL0)/2T0工作在工作在12T模式时的输出频率模式时的输出频率= (SYSclk) /1

59、2/ (65536-RL_TH0, RL_TL0)/2 如果如果C/T=1,定时器,定时器/计数器计数器T0对外部脉冲输入对外部脉冲输入(P3.4/T0)计数,则:计数,则: 输出时钟频率输出时钟频率= (T0_Pin_CLK) / (65536-RL_TH0, RL_TL0)/2 定时器定时器/计数器计数器T0工作在定时器模式工作在定时器模式2(8位自动重装模式)时,如果位自动重装模式)时,如果C/T=0,则:则: T0工作在工作在1T模式时的输出频率模式时的输出频率= (SYSclk) / (256-TH0) / 2 T0工作在工作在12T模式时的输出频率模式时的输出频率= (SYSclk

60、) / 12 / (256-TH0) / 2如果如果C/T=1,定时器,定时器/计数器计数器T0对外部脉冲输入(对外部脉冲输入(P3.4/T0)计数,则:)计数,则: 输出时钟频率输出时钟频率= (T0_Pin_CLK) / (256-TH0) / 2当当T0CLKO=0时,不允许时,不允许P3.5/T1管脚被配置为定时器管脚被配置为定时器0的时钟输出。的时钟输出。65/151二、可编程时钟输出的编程实例二、可编程时钟输出的编程实例1、如果要使用主时钟输出,例如,从、如果要使用主时钟输出,例如,从P5.4输出时钟输出时钟信号,频率是信号,频率是SYSclk,只需加入下面的语句即可:,只需加入下

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论