《第章定时接口模块.ppt》由会员分享,可在线阅读,更多相关《第章定时接口模块.ppt(40页珍藏版)》请在三一办公上搜索。
1、第十二章 定时接口模块,嵌入式技术基础与实践,本章主要内容计数器/定时器的基本工作原理定时器模块的编程基础 定时器模块的输入捕捉功能 定时器模块的输出比较功能定时器模块的脉宽调制输出功能,12.1 计数器/定时器的基本工作原理,12.1.1 实现计数与定时的基本方法(1)完全硬件方式 在过去许多仪器仪表或设备中,需要进行延时、定时或计数,经 常使用数字逻辑电路实现,即完全用硬件电路实现计数/定时功能若要改变计数/定时的要求,必须改变电路参数,通用性、灵活性差。微型电子计算机出现以后,特别是单片微型计算机的发展与普及,这种完全硬件方式实现定时与计数已较少使用。,(2)完全软件方式,在计算机中,通
2、过编程,利用计算机执行指令的时间实现定时,称为完全软件方式,简称软件方式。在这种方式中,一般是根据所需要的时间常数来设计一个延时子程序,延时子程序中包含一定的指令,设计者要对这些指令的执行时间进行严密的计算或者精确的测试,以便确定延时时间是否符合要求。,(3)可编程计数器/定时器,利用专门的可编程计数器定时器实现计数与定时,克服了完全硬件方式与完全软件方式的缺点,设定之后与CPU并行地工作。应用可编程计数器定时器,在简单的软件控制下,可以产生准确的时间延时。这种方法的主要思想是根据需要的定时时间,用指令对计数器定时器设置定时常数,并用指令启动计数器定时器。这种方法最突出的优点是计数时不占用CP
3、U的时间,并且,如果利用计数器定时器产生中断信号就可以建立多作业的环境,所以,可大大提高CPU的利用率。,12.1.2 MC68HC908GP32 MCU的定时接口的 基本原理的概述,MC68HC08系列的单片机可以提供多个独立的定时器,例如,GP32芯片有两个定时器,分别叫定时器1、定时器2,它们的工作原理是一的,下面的说明均以定时器1为例。HC08系列的单片机定时器的核心是一个处于不断加1的16位计数寄存器,简称为计数器。该计数器的时钟频率由外部晶振时钟(也可以是由锁相环模块得到的总线时钟)经过预定的分频因子分频得到。在定时器内部有个控制和状态寄存器,通过对它某些位的设置,就可以确定多少时
4、间计数器加1,即定时间隔。在定时器内部有个预置寄存器,当计数器的值等于预置寄存器的值时,称为计数器溢出,当计数器溢出时,计数器的值被赋0,同时将计数器溢出标志等状态置于控制和状态寄存器中。,MC68HC908GP32 MCU定时器基本功能及主要特征:HC08系列的单片机定时器具有输入捕捉、输出比较、PWM、脉冲输出、DMA直接存储器访问等功能。以下简要给出MC68HC908GP32的定时器的主要特征:每个定时器具有两路独立的输入捕捉输出比较通道。带缓冲(Buffered)和不带缓冲(Unbuffered)的脉宽调制波。七种可编程选择的分频因子。预置计数。计数器停止或清除。16位输入捕捉和通道寄
5、存器。定时器溢出中断、每路通道的输入捕捉输出比较中断。,定时器功能框图,12.2 定时器模块的编程基础,D7 TOF位:定时器溢出标志位。当16位计数寄存器T1CNT中的值达到设定值(在16位预置寄存器T1MOD中)时,TOF=1,同时T1CNT=$0000。D6 TOIE位:定时器溢出中断允许位(Timer Overflow Interrupt Enable Bit)。该位用来设置是否允许定时器溢出中断。TOIE=1,允许定时器溢出中断,TOIE=0,不允许定时器溢出中断。,12.2.1 定时器模块的3个基本寄存器(1)T1状态和控制寄存器(Timer 1 Status and Contro
6、l Register,T1SC)T1SC的地址:$0020,定义为:,(1)T1状态和控制寄存器(Timer 1 Status and Control Register,T1SC),D5 TSTOP位:定时器计数停止位(Timer Count Stop Bit)。该位用来控制计数器的计数停止和恢复。对该位写入1,定时器的计数寄存器将保持当前的值,停止计数。D4 TRST位:定时器复位位(Timer Reset Bit)。向该位写入1将清除定时器的计数寄存器和设定的分频因子,该位通常为0。D3 未定义。D2D0 PS2PS0位:定时器分频因子选择位(Timer Prescaler Select
7、Bits)。这三位定义定时器的分频因子,记为:p,定义如下:PS2、PS1、PS0=000 001 010 011 100 101 110 111 p=1 2 4 8 16 32 64 未定义其中设fBUS为总线频率,则定时器的计数寄存器的计数频率为:计数频率fBUS/p。复位时,PS2、PS1、PS0=000,即p=1,此时,计数频率fBUS。分频因子的选取应根据总线频率fBUS、预置寄存器的设定值、希望的溢出时间的综合考虑确定。,(2)T1计数寄存器(T1 Counter Register,T1CNTH、T1CNTL)它是一个16位寄存器,分为高8位、低8位,地址分别为$0021、$002
8、2,它的作用是:当定时器的状态和控制寄存器的TSTOP位=0时,即允许计数时,每一计数周期,其值自动加1,当它达到设定值(在16位预置寄存器中)时,TOF=1,同时计数寄存器自动清0。(3)T1预置寄存器(T1 Counter Modulo Register,T1MODH、T1MODL)它是一个16位寄存器,分为高8位、低8位,地址分别为$0023、$0024,它的作用是:设定计数寄存器的计数溢出值。复位时,预置寄存器的初值为$FFFF。,12.2.2定时溢出中断汇编工程实例,为了理解定时器的基本功能,这里给出利用定时器溢出编写定时的例子,并把“时分秒”发送到PC机,以便比较。同时,在PC机方
9、,用一个十分简明的程序,接收MCU发送来“时分秒”并显示,同时还可以将PC机的当前时间发送到MCU,作为时间基准值。通过这个例子,理解定时器溢出中断的编程方法和系统时间的产生方法。1)MCU方程序2)PC方VB程序,1)MCU方程序,2)PC方VB程序PC方的界面见图。程序主要功能是:接收MCU发送来“时分秒”并显示,也可以单击“发送”按钮,发送PC机的当前时间。,12.2.3 定时溢出中断编程C语言程序例,1)定时溢出中断编程C语言程序例主程序2)定时溢出中断编程C语言程序例矢量表文件,12.3 定时器模块的输入捕捉功能,12.3.1 输入捕捉的基本含义(1)与输入捕捉功能相关的引脚 在MC
10、68HC908GP32的DIP-40封装形式中,第21、22脚标记是“PTD4/T1CH0、PTD5/T1CH1”,它们是普通I/O与定时器输入捕捉的复用引脚。作为定时器输入捕捉功能使用时,它们是定时器1的两个通道输入捕捉引脚。(2)输入捕捉的基本含义 输入捕捉功能是用来监测外部的事件和输入信号。当外部事件发生或信号发生变化时,在指定的输入捕捉引脚上发生一个指定的沿跳变(可以指定该跳变是上升沿还是下降沿)。定时器捕捉到特定的沿跳变后,把计数寄存器当前的值锁存到通道寄存器。,12.3.2 输入捕捉的寄存器,(1)T1通道寄存器(T1 Channel Register)定时器1有两个通道,相对应的
11、通道寄存器有:定时器1通道0寄存器T1CH0(16位寄存器),地址是:$0026、$0027;定时器1通道1寄存器T1CH1(16位寄存器),地址是:$0029、$002A。通道寄存器在该通道用作输入捕捉时的作用是:当指定的沿跳变发生(即定时系统捕捉到沿跳变)时,锁存计数寄存器的值。通道寄存器是一个16位的寄存器,分为高字节和低字节,在读取的时候要分别读取。为了防止两次读取之间该寄存器的内容发生变化而产生虚假的输入捕捉计数值,系统会在读取高字节时锁存低字节的内容,这时即使又发生特定的沿跳变,通道寄存器的内容也不会改变。所以,若要读取整个通道寄存器,必须先读高字节,再读低字节。,(2)T1通道0
12、状态和控制寄存器(T1 Channel0 Status and Control Register,T1SC0),D7:通道标志位,用来标志定时器1通道0发生了输入捕捉。D6:通道中断允许位,用来设置是否允许发生输入捕捉中断。D5D4:模式选择位。每一个定时器都可以工作在输入捕捉,输出比较和PWM输出模式,这两位用来选择这些工作模式。D3D2:跳变沿/输出电平选择位。D1:溢出翻转控制标志位,定时器通道用做输入捕捉时,此位无用。D0:通道最大占空比设置位,定时器通道用作输入捕捉时,此位无用。,通道控制寄存器控制位,(3)T1通道1状态和控制寄存器(Timer1 Channel 1 Status
13、and Control Register,T1SC1),含义同T1通道0状态和控制寄存器,只是没有D5(MS1B)位,因为MS0B是选择CH0缓冲方式的,CH1没有缓冲方式,所以没有MS1B位。,12.3.3 输入捕捉中断编程实例,下面程序验证定时器1通道0(引脚21)输入捕捉中断的产生,当中断发生时取反指示灯PTA1。定时器1通道0的输入捕捉中断向量的地址是$FFF6。(1)输入捕捉中断编程实例汇编语言程序,(2)输入捕捉中断编程实例C语言主程序,(2)输入捕捉中断编程实例C语言主程序,(3)输入捕捉中断编程实例C语言矢量表文件,(3)输入捕捉中断编程实例C语言矢量表文件,12.4 定时器模
14、块的输出比较功能,12.4.1 输出比较的基本含义(1)与输出比较功能相关的引脚 在MC68HC908GP32的DIP-40封装形式中,第21、22脚标记是“PTD4/T1CH0、PTD5/T1CH1”,它们是普通I/O与定时器输入捕捉的复用引脚。作为定时器输入捕捉功能使用时,它们是定时器1的两个通道输入捕捉引脚,同时也可定义它们为输出比较引脚。(2)输出比较的含义 输出比较的功能是用程序的方法在规定的时刻输出需要的电平,实现对外部电路的控制。,12.4 定时器模块的输出比较功能,12.4.1 输出比较的基本含义(3)输出比较过程,12.4.2 输出比较的寄存器,(1)T1通道寄存器(T1 C
15、hannel Register)通道寄存器在该通道用作输出比较时的作用是:存放要与计数寄存器进行比较的数值。完整的设置输出比较功能应该包括对寄存器两个字节的写入。通道寄存器和标志位在复位时被清零,在初始化输出比较功能时应该小心谨慎,一般采用以下的步骤:写入通道寄存器的高位字节,禁止输出比较功能;取状态寄存器,清除OCF位;写入通道寄存器低位字节,使输出比较功能工作。,(2)T1通道0状态和控制寄存器(T1 Channel0 Status and Control Register,T1SC0),T1SC0寄存器在输出比较时,D7D2位与用作输入捕捉时的含义相同,D1位此时无意义,在用作输出比较时
16、其含义说明如下:D1:溢出翻转控制标志位,在定时器通道用作输出比较功能时,如果置位该位,在通道的定时器发生溢出时,输出比较模块会自动翻转输出电平。在一个完整的脉冲中,必然有两次电平的跳变。这就需要两次进入输出比较处理例程,两次计算下一次输出比较的计数值。如果能够使脉冲的周期恰好等于定时器通道的溢出周期,并且置位溢出翻转控制标志位,那么在每次脉冲周期到的时候输出比较模块将自动翻转输出电平而节省了一次输出比较的处理。需要注意的是,置位溢出翻转控制标志位后,如果定时器溢出和输出比较同时发生,模块将优先处理定时器溢出事件。如果定时器溢出的处理例程比较耗时,输出比较将不能得到及时的处理。这在编写程序时一
17、定要非常留意。,12.4.3不带缓冲输出比较与带缓冲的输出比较,(1)不带缓冲的输出比较 不带缓冲的输出比较的功能表现在更改下一次输出比较时需要对输出比较计数器重新写入。(2)带缓冲的输出比较 使用MC68HC908GP32的带缓冲的输出比较功能就可以克服不带缓冲的输出比较缺陷。带缓冲的输出比较功能使用了同一定时器的两路通道,将这两路通道联合起来共同组成一个带缓冲的输出比较。该输出比较波形将出现在TCH0引脚上,而原来的TCH1引脚仍然可以作为普通的I/O引脚使用。,12.5 定时器模块的脉宽调制输出功能,12.5.1脉冲宽度调制器PWM PWM产生一个在高电平和低电平之间重复交替的输出信号,
18、这个信号被称为PWM信号,也叫脉宽调制波。通过指定所需的时钟周期和占空比来控制高电平和低电平的持续时间。占空比为信号处于高电平的时间(或时钟周期数)占整个信号周期的百分比,方波的占空比是50%。脉冲宽度是指脉冲处于高电平的时间。PWM的常见应用是为其他设备产生类似于时钟的信号。PWM的另一个常见用途是控制输入到某个设备的平均电流或电压。,12.5 定时器模块的脉宽调制输出功能,12.5.1脉冲宽度调制器PWM,图12-5 PWM的占空比的计算方法,12.5.2 用定时器实现PWM,定时器的每一个通道都可以设置为在溢出时自动翻转电平,利用这个特性,定时器通道就可以实现PWM。当使用脉宽调制功能时
19、,需要按照一定的顺序来初始化PWM模块:在定时器的状态和控制寄存器中,首先置位计数器停止位TSTOP,然后置位计数器的复位位TRST,重新开始计数器的计数。在预置计数寄存器中写入希望的脉宽调制波的周期值。在对应通道的通道寄存器中写入希望的脉宽调制波的脉宽值。在对应的通道的状态和控制寄存器中,首先根据是否是带缓冲的脉宽调制设置正确的MSxB:MSxA两位(不带缓冲的为0:1,带缓冲的为1:0).然后置位溢出翻转位TOVx,最后根据脉宽调制波的极性设置ELSxB:ELSxA两位。,12.5.3 不带缓冲脉宽调制输出与带缓冲脉宽调制输出,(1)不带缓冲脉宽调制输出 在定时器预置计数寄存器中写入需要的脉宽调制波的周期,在希望输出波形的通道的通道寄存器中写入需要的脉宽调制波的脉宽。如果需要更改脉宽调制波的脉宽,就必须重新改写当前定时器通道的通道寄存器。(2)带缓冲脉宽调制输出 在这种方式下,一个定时器的两个通道联合起来交替控制原来通道1的脉宽调制输出从而构成一个带缓冲的脉宽调制输出。,12.5.4 PWM编程汇编语言例 具体内容参见教学资料中的例程。,12.5.5 PWM编程C语言例,12.5.5 PWM编程C语言例,12.5.5 PWM编程C语言例,