您好,欢迎访问三七文档
单片机的定时器/计数器实质就是一个加1计数器,通过软件对其控制寄存器的操作,来实现定时,计数功能及转换。当定时器/计数器为定时工作方式时,计数器的加1信号由振荡器的分频信号产生,即每过一个机器周期,计数器加1,直至计满溢出为止。当定时器/计数器为计数工作方式时,通过引脚T0和T1对外部信号计数,当电平变化时,计数器加1.定时器/计数器使用灵活,用途广泛,如延时,物理信号的测量,信号的周期,频率,脉宽测量,产生定时脉冲信号,捕捉输入,还可以实现PWM输出,用于D/A,电动机的无极调速等。ATmega16三个定时器/计数器T/C0,T/C1,T/C2,其中T/C0,T/C2为8位定时器/计数器,T/C1是16位定时器/计数器。定时器/计数器相关寄存器:TIMSK:定时计数中断屏蔽寄存器,TIFR:定时计数器中断标志寄存器,ASSR:异步状态寄存器,SFIOR:特殊功能寄存器T/C0相关寄存器:TCCR0:控制寄存器,TCNT0:计数寄存器,OCR0:输出比较寄存器T/C1相关寄存器:TCCR1A,TCCR1B:控制寄存器,TCNT1(TCNT1H,TCNT1L)计数寄存器,OCR1A,OCR1B:输出比较寄存器,ICR1:输入捕捉寄存器T/C2相关寄存器:TCCR2:控制寄存器,TCNT2:计数寄存器,OCR2:输出比较寄存器,溢出中断:以定时器/计数器T/C0为例,T/C0为8位定时器,计数范围为十六进制0x00-0xFF,对应的十进制为0-255,由0开始计数,当计数值超过255时就产生一个中断,中断标准寄存器TIFR的TOV0(T/C0的溢出标准位)置1。比较中断:当T/C0的计数寄存器TCNT0的数值,和预置的OCR0的数值一致时,将产生一个比较中断,中断标志寄存器TIFR的OCF0(T/C0的比较中断标志位)置1。T/C0溢出中断使能过程:1、中断总使能:SREG=0x80;2、T/C0的溢出中断使能:将中断使能寄存器的T/C0溢出中断使能位TOIE0置1,c语言:TIMSK|=0x01;当产生溢出中断时,硬件自动将中断标志寄存器TIFR的TOVO(T/C0溢出中断标志)位置1,用于软件查询判断,执行完中断处理程序后,由硬件自动清0。普通模式:普通模式(WGM01:0=0)为最简单的工作模式。在此模式下计数器不停地累加。计到8比特的最大值后(TOP=0xFF),由于数值溢出,计数器简单地返回到最小值0x00重新开始CTC(比较匹配时清0定时器):在CTC模式(WGM01:0=2)下OCR0寄存器用于调节计数器的分辨率。当计数器的数值TCNT0等于OCR0时计数器清零。OCR0定义了计数器的TOP值,亦即计数器的分辨率。快速PWM:快速PWM模式(WGM01:0=3)可用来产生高频的PWM波形。快速PWM模式与其他PWM模式的不同之处是其单斜坡工作方式。计数器从BOTTOM计到MAX,然后立即回到BOTTOM重新开始相位修正PWM:相位修正PWM模式(WGM01:0=1)为用户提供了一个获得高精度相位修正PWM波形的方法。此模式基于双斜坡操作。计时器重复地从BOTTOM计到MAX,然后又从MAX倒退回到BOTTOM。定时器/计数器的工作必须指定时钟源,无时钟源定时器不能工作。时钟源有内部时钟源和外部时钟源,由CS02,CS01,CS00位选择。外部时钟源由T0引脚输入。OC0为T/C0的输出引脚,即设置当TNCT0和OCR0数值相等时,外部输出引脚OC0上的电平变化。TCNT0-计数寄存器:通过它寄存器可以直接对计数器的8位数据进行读写访问。OCR0-输出比较寄存器:包含一个8位的数据,不间断地与计数器数值TCNT0进行比较。匹配事件可以用来产生输出比较中断,或者用来在OC0引脚上产生波形。T/C1真正的16位定时器/计数器,能够输出16位的PWM,有两个独立的输出比较单元。具有输入捕捉功能。捕捉输入:用于精确捕捉一个外部事件的发生,记录事件发生的时间印记,如:精确测量脉冲宽度。FOC1A/FOC1B只有当WGM13:0指定为非PWM模式时被激,对其写1后,波形发生器将立即进行比较操作。ICES1:该位选择使用ICP1上的哪个边沿触发捕获事件。ICES为0”选择的是下降沿触发输入捕捉;ICES1为1”选择的是逻辑电平的上升沿触发输入捕捉。输出比较寄存器1A:16位,由OCR1AH,OCR1AL组成输出比较寄存器1B:16位,由OCR1BH,OCR1BL组成该寄存器中的16位数据与TCNT1寄存器中的计数值进行连续的比较,一旦数据匹配,将产生一个输出比较中断,或改变OC1x的输出逻辑电平。输入捕捉寄存器:16位,由ICR1H,ICR1L组成,当外部引脚ICP1(或T/C1的模拟比较器)有输入捕捉触发信号产生时,计数器TCNT1中的值写入ICR1中。ICR1的设定值可作为计数器的TOP值。【发表评论】【告诉好友】【收藏此文】【关闭窗口】上一篇:单片机中按键消抖动下一篇:单片机avr定时器/计数器T/C2(二)文章评论我来说两句特别声明:发表内容只代表网友个人观点,与本站立场无关。用户名:匿名匿名发表注册剩余字数:400查看全部评论相关文章AVR学习笔记三、定时/记数器0实验-------基于LT_Mini_M163.1定时/计数器0的计数实验3.1.1、实例功能定时/计数器Timer/Counter是单片机中最基本的接口之一它的用途非常广泛常用于计数、延时、测量周期、频率、脉宽、提供定时脉冲信号等。在实际应用中对于转速位移、速度、流量等物理量的测量通常也是由传感器转换成脉冲电信号通过使用定时/计数器来测量其周期或频率再经过计算处理获得。相对于一般8位单片机而言AVR不仅配备了更多的定时/计数器接口而且还是增强型的如通过定时计数器与比较匹配寄存器相互配合生成占空比可变的方波信号即脉冲宽度调制输出PWM信号用于D/A、马达无级调速控制、变频控制等功能非常强大。ATmega16一共配置了2个8位和1个16位共3个定时/计数器它们是8位的定时计数器T/C0、T/C2和16位的定时/计数器T/C1。在接下来的几个实例中我们将逐一学习这些定时/计数器的各种功能和使用方法。在前面的实例中我们已经学习了利用单片机的I/O口进行按键的输入检测并实现了将按键按下次数在数码管上进行显示。使用的方法是不停的检测端口状态每检测到一次电平变化记录一次这样实现起来未免有些重复劳动的嫌疑那么有没有一种方法可以不用每次都这么辛苦呢答案是肯定的我们可以使用定时/计数器的计数功能实现对外部事件电平变化次数、脉冲个数等进行计数。在本实例中我们利用ATmega16单片机的定时/计数器0的计数功能实现对按键次数的检测并通过LED的亮灭来指示程序的运行状态。本实例共有3个功能模块分别描述如下●允许使用外部引脚的32kHz手表晶振作为独立的计数时钟源仅T/C2。2、学习和使用定时计数器时必须注意的基本要素●定时计数器的长度。定时计数器的长度是指计数单元的位长度一般为8位一个字节或16位2个字节。●脉冲信号源。脉冲信号源是指输入到定时计数器的计数脉冲信号。通常用于定时计数器计数的脉冲信号可以由外部输入引脚提供也可以由单片机内部提供。●计数器类型。计数器类型是指计数器的计数运行方式可分为加一减一计数器单程计数或双向计数等。●计数器的上下限。计数器的上下限指计数单元的最小值和最大值。一般情况下计数器的下限值为零上限值为计数单元的最大计数值即2558位或6553516位。需要注意的是当计数器工作在不同模式下时计数器的上限值并不都是计数单元的最大计数值255或65535它将取决于用户的配置和设定。●计数器的事件。计数器的事件指计数器处于某种状态时的输出信号该信号通常可以向MCU申请中断。如当计数器计数到达计数上限值255时产生“溢出”信号向MCU申请中断。3、T/C0的时钟源T/C0的计数时钟源可由来自外部引脚T0的信号提供也可来自芯片的内部。●使用系统内部时钟源当定时计数器使用系统内部时钟作为计数源时通常作为定时器和波形发生器使用。因为系统时钟的频率是已知的这样通过计数器的计数值就可以知道时间值。AVR在定时计数器和内部系统时钟之间增加了一个预定比例分频器分频器对系统时钟信号进行不同比例的分频分频后的时钟信号提供定时计数器使用。利用预定比例分频器定时计数器可以从内部系统时钟获得几种不同频率的计数脉冲信号使用非常灵活。●使用外部时钟源当定时计数器使用外部时钟作为计数源时通常作为计数器使用用于记录外部脉冲的个数。外部时钟源通过外部引脚T0PB0引入单片机系
本文标题:单片机的定时器
链接地址:https://www.777doc.com/doc-2594533 .html