您的位置 首页 应用

浅谈AVR中定时器几种作业形式

浅谈AVR中定时器几种工作模式-AVR有三个定时计数器,其中定时计数器0和定时计数器2是8位的,定时计数器1是16位。

AVR有三个守时计数器,其间守时计数器0和守时计数器2是8位的,守时计数器1是16位。

在学习AVR守时计数器时,刚开端被一大堆的寄存器搞的有点晕了,后来仔细的把Datasheet中的有关寄存器先看了一遍,再从头看守时计数器的内容才理清了。这儿做个总结吧,加深自己的形象。

守时计数器0和守时计数器2基本上是相同的。以守时计数器0来总结它的几种作业形式的不同。

一般形式:不做介绍,和51里边是如出一辙的。

CTC形式:当寄存器TCNT0与OCR0持平时(即匹配),OC0依照COM0[1:0]的值相应的改动(置位,清零或取反)。一起TCNT0清零,TCNT0从0x00从头开端计数,当计数成果和下一个OCR0寄存器中值持平时又产生匹配。产生匹配时,匹配比较标志OCF0置位,即OCF0=1,可申请匹配比较中止。

快速PWM形式:当寄存器TCNT0与OCR0匹配持平时,OC0依照COM0[1:0]的值相应的置位或清零。与CTC形式不同的是TCNT0不会清零,而是持续计数,直到计数为0XFF,此刻OC0会产生清零或置位。一起TCNT0从0x00从头开端计数,当计数成果和下一个OCR0寄存器中值持平时又产生匹配。与CTC形式不同产生匹配时,OCF0不会置位。TCNT0计数到0XFF时,计数溢出标志TOV0置位,即TOV0=1,此刻可申请溢出中止。

相位可调PWM形式:此形式下,守时计数器是双向计数器(可加可减),,从0x00一向加到0xff,鄙人一个计数脉冲到来时从0xff一向减到0x00。当COM0[1:0]=2时,在加的进程中,若产生匹配,清零OC0;在减的进程中,若产生匹配,置位OC0。(当COM0[1:0]=3时,和COM0[1:0]=2的状况相反)。与快速PWM形式不同的是,当TCNT0计数到0xff时不会影响到OC0的输出,而是当从0xff减到0x00的进程中与下一个OCR0寄存器的值匹配时,OC0产生改动(加的进程是清零,那这时应该是置位)。当守时计数器计数到0x00时,计数溢出标志TOV0置位,即TOV0=1,此刻可申请溢出中止。

以上几种作业形式一起合适守时计数器0,1,2。仅仅守时计数器1的功用有所增强。下面将会评论。

星期二我看一个程序时分,那个程序是作业在快速PWM形式,挑选计数溢出中止。其时我还想为什么不挑选匹配中止而要去比及计数溢出才中止岂不是占用时刻了,还去问教师了,现在看来是多么的愚笨!快速PWM形式根本就没有匹配中止!

守时计数器0和2,在CTC形式下,频率和相位可调。PWM形式下,频率不可调。由频率计数公司就能够看出。不论是CTC仍是PWM都能够经过调理OCRn的值去调理占空比。(关于产生PWM波频率的核算公式将会在后文给出的,关于守时计数器的各种寄存器可自己去检查Datasheet)

下面是守时计数器1比0和2的增强功用总结:

1)守时计数器1比0和2有许多增强功用。在PWM形式时,可产生频率和相位都可调的PWM波,这时8位守时计时器0和2所做不到的,由于守时计数器1具有输入捕获功用,即具有输入捕获寄存器ICR1,在PWM形式下,ICR1中可寄存一个top值,便是这个top值能够改动PWM波的频率。这点可在频率核算公司看出。

2)守时计数器1有两个输出比较单元和两个输出比较寄存器OCR1A和OCR1B,因而可一起产生2路频率相同,占空比不同的PWM波形。占空比的调整当然由OCR1A和OCR1B来确认。波形在OC1A和OC1B引脚输出。

3)守时计数器1具有输入捕获单元。能够准确的记载外部事情产生的时刻。捕获外部事情的信号由引脚ICP1输入。当输入捕获信号产生,TCNT1中的计数值将被写入输入捕获寄存器ICR1(ICR1H,ICR1L)中去。输入捕获信号也可由模仿比较器的AC0单元的输出信号来触发。关于触发的办法有两种,当守时计数器1的操控寄存器B(即TCCR1B)中的第六位ICESE=0,下降沿触发;ICESE=1,上升沿触发。当满意触发条件时,输入捕获单元开端捕获该事情的产生。运用该功用能够来对输入波形频率的丈量。假如我没有记错的话在51里边守时计数器也有这个功用的,能够有GATE门控位的设置来到达这个意图。51里边,把GATE置位,那么此刻守时计数器的发动由INTX(X=0或1)引脚和TRX(X=0或1)来决议。可先把TRX置位,让守时计数的发动条件还短缺INTX为高电平(即先让INTX处于低电平),等候INTX变为高电平,那么此刻守时计数器发动了,比及INTX变为低电平时守时计数器又被封闭了,那么此刻守时计数器计数值即为一个PWM脉宽了。

提到这儿忽然想到了在AVR里边,守时计数器都有自己的分频器,这儿也能够先设置守时计数器的发动条件都满意,但设置为无分频,此刻相当于人没有了心脏,守时计数器此刻是不作业的。能够在其他什么条件(如一个外部中止里边)满意时,给守时计数器分频,此刻守时计数器才作业!

方才提到中止,与51不同的是,AVR对中止标志位清“0”的操作时向该位写“1”。即AVR铲除中止标志位是软件写“1”。值得提示的是在设置中止寄存器的时分,最好先铲除中止标志位,然后立刻将相应的中止答应操控位值“1”。

这儿还需求阐明的是上文提及到的守时计数器波形输出引脚和输入捕获引脚,在运用之前,必需求先设置好它的方向寄存器是输出仍是输入。假如是输入的话还需求考虑是否需求上拉电阻

说了这么多,差点忘记了个人觉得比较重要的一点。守时计数器1是16位的,它的每一个16位的寄存器别离装备了一个8位的TEMP寄存器,用来临时性的保存寄存器的高8位数据。MCU从16位寄存器读数据不时,低8位被送到MCU的一起,高8位被送到TEMP,当MCU读高8位时取的是TEMP中的数据。从MCU写数据16位数据寄存器时,高8位写到TEMP,写低8位的时分,低8位与TEMP中的高8位组成16位数据写到16位寄存器中。即读的时分是先读低8位,再读高8位;写的时分是先写高8位,再写低8位。

最终给出守时计数器常用3种作业形式的设置办法(以守时计数器1为例):

一般形式:

1,依据需求设置时钟源,即设置操控寄存器TCCR1B。

2,依据守不时刻和时钟源确认守时器的初值写入到数据寄存器TCNT1H和TCNT1B。

3,设置中止时能位。

4,挑选中止号,编写中止服务程序。留意需求在中止服务程序中重载初值写入到TCNT1H和TCNT1B(和51相同的)!

CTC形式:

1,若输出波形,设置端口OC1A或OC1B为输出办法。

2,设置波形产生形式,挑选需求的时钟源,即TCCR1B。

3,设置输出形式,即TCCR1A。

4,依据需求设置上限值top(前面提到过的)写入到输出比较寄存器OCR1A。

5,依据公式核算频率。

快速PWM形式:

1,若输出波形,设置端口OC1A或OC1B为输出办法。

2,设置PWM波形形式,挑选需求的时钟源,即TCCR1A和TCCR1B。

3,设置波形的频率,即OCR1A。

4,设置波形占空比,即OCCR1B。

6,依据频率公式核算频率。

声明:本文内容来自网络转载或用户投稿,文章版权归原作者和原出处所有。文中观点,不代表本站立场。若有侵权请联系本站删除(kf@86ic.com)https://www.86ic.net/yingyong/347622.html

为您推荐

联系我们

联系我们

在线咨询: QQ交谈

邮箱: kf@86ic.com

关注微信
微信扫一扫关注我们

微信扫一扫关注我们

返回顶部