AVR单片机定时器使用总结TC0
AVR单片机定时器TC0定时操作过程
![AVR单片机定时器TC0定时操作过程](https://img.taocdn.com/s3/m/7c712c6125c52cc58bd6be10.png)
定时器T/C0定时功能实现过程一、中断总使能:SREG=0X80;二、使能定时器溢出中断,TIMSK的TOIE0置1三、选择定时器时钟分频系数,由TCCR0的CS01,CS01,CS00决定。
四、定时器计数器付初始值,TCNT0=61,TCNT0位8位寄存器,计数范围为0-255,付初始值61后,从61开始计数到255时产生溢出中断付初值后定时就开始工作。
定时时间计算:每个计数时钟脉冲的时间T=1/f,f=晶振频率/分频系数,如晶振为8MHZ ,分频系数为1024,则定时器器时钟频率为f=8000000HZ/1024 =7812.5HZ,单个时钟脉冲时间:T=1/f=1/7812.5=0.128ms (毫秒),T/C0最大的计数值为256,最大计时时间为256*0.128ms=32.768ms 。
定时器初值计算公式:定时器初值=256- 定时时间/单个时钟脉冲时间:如定时25ms,初值=256- 25ms/0.128ms=256-195=61注:1MHZ=1000KHZ=1000000HZ,1s(秒)=1000ms(毫秒)/***************************************************************************************函数功能:定时器T/C0实现1秒钟定时,控制发光二极管周期性亮灭,晶振8MHZ***************************************************************************************/#include <iom16v.h>char Counter = 0; // 1S计数变量清零,变量声明/********端口初始化********/void port_init() //端口初始化子函数{PORTA=0xFF; //PA口配置为输出DDRA=0xFF; //PA口初始值为"1"}/********定时器0初始化********/void timer0_init() //因为定时时间太短,看不到灯的变化{SREG = 0x80; //使能全局中断TIMSK|=(1<<TOIE0); //使能T0溢出中断TCCR0|=(1<<CS02)|(0<<CS01)|(1<<CS00); // T/C0工作于普通模式,1024分频,//定时器频率= 8M/1024 =7812.5HzTCNT0 = 61; //定时初值设置,定时时间=(256-61)/7812.5=25ms}/********主函数********/void main(){port_init();timer0_init();while(1);}/********定时器0中断服务函数********/#pragma interrupt_handler timer0_ovf:10void timer0_ovf(void){TCNT0 =61; //重装计数初值if(++Counter >= 40) //定时时间到1S吗?定时中断溢出40次为1S,25ms*40=1000ms=1s(秒) {PORTA^=BIT(0); //,将PA口的第0位取反操作。
AVR单片机定时器CTC输出PWM模式
![AVR单片机定时器CTC输出PWM模式](https://img.taocdn.com/s3/m/a24973bbcd22bcd126fff705cc17552707225e86.png)
AVR单片机定时器CTC输出PWM模式
第一篇:AVR单片机定时器CTC输出PWM模式
CTC:比较匹配时清零计数器模式。
当计数器TCNT0的数值等于比较寄存器OCR0时计数器TCNT0自动清零。
OCR0定义了计数器的最大(TOP)值,这个模式使得用户可以很容易地控制比较匹配输出的频率。
T/C0的比较输出脚为OC0(PB3),PB口的第三脚,在此模式下可以在OC0上输出PWM控制外部设备。
例如:在OC0脚上输出20HZ的方波信号,方波的周期时间为T=1/20HZ=0.05秒=50ms,半个周期为25ms,系统采用8MHZ晶振,1024分频,时钟计数频率为8000000/1024=7812.5HZ,每个时钟脉冲时间为1/7812.5=0.128ms,定时25ms的计数值为25ms/0.128ms=195,将195赋值为T/C0的比较寄存器OCR0,启动定时器后,TCNT0从0开始计数,当计数到195时,产生比较中断,在OC0脚上输出20HZ的占空比为50%的方波信号。
操作过程如下:
一、I/O管脚初始化:PB3(OC0)脚设为输出,DDRB|=(1<
二、使能全局中断:SREG=0X80;。
单片机定时器的使用总结
![单片机定时器的使用总结](https://img.taocdn.com/s3/m/5333655c7fd5360cba1adbc5.png)
单片机定时器的使用第一部分:51系列定时器定时/计数器0 和定时/计数器1都有4种定时模式。
16位定时器对内部机器周期进行技术,机器周期加1,定时器值加1,1MHZ 模式下,一个机器周期为1us 。
定时器工作模式寄存器TMOD,不可位寻址,需整体赋值,高4位用于定时器1,第四位用于定时器0。
C/T:为定时器功能选择位,C/T=0对机器周期计数,C/T=1,对外部脉冲计数。
GATE:门控位,GATE=0,软件置位TRn即可启动计时器,GATE=1需外部中断引脚为高电平时才能软件置位TRn启动计时器,一般取GATE=0。
定时器控制寄存器TCONTFn:Tn溢出标志位,当定时器溢出时,硬件置位TFn,中断使能的情况下,申请中断,CPU响应中断后,硬件自动清除TFn。
中断屏蔽时,该位一般作为软件查询标志,由于不进入中断程序,硬件不会自动清除标志位,可软件清除。
TRn:计时器启动控制位,软件置位TRn即可启动定时器,软件清除TRn关闭标志位。
IEn:外部中断请求标志位。
ITn:外部中断出发模式控制位,ITn=0为低电平触发,ITn=1为下降沿触发。
中断允许控制寄存器IEEA(IE.7):全局中断控制位。
EA=1开全局中断,EA=0关闭全局中断。
IE.6无意义。
ETn:定时器中断使能控制位。
置位允许中断,清除禁止中断。
ES:串行接收/发送中断控制位,置位允许中断。
EXn:外部中断使能控制位。
置1允许,清0禁止。
中断优先级控制寄存器IP,复位后为00HIP.6,IP.7保留,无意义。
PT2:定时器2中断优先级控制,置1设为高优先级,清0置位低优先级。
PS:串行中断优先级控制位。
PT1/0:定时器1/0优先级控制位,置1高,清0低。
PXn:外部中断优先级控制位。
当有同级中断同时响应,按IE0—>TF0—>IE1—>TF1—IE0—>RI+TI—>TF2顺序依次响应。
定时器模式0的使用TMOD&=0xf0/TMOD&=0x0fTL0高3位不用,低5位溢出时,直接向TH0进位。
ATMEGA16定时器0
![ATMEGA16定时器0](https://img.taocdn.com/s3/m/f97d6f7327284b73f2425067.png)
ATMEGA16定时器0(2013-04-09 21:51:35)转载▼分类:AVR标签:avr定时器0MEGA16定时器0T/C0 是一个八位定时器,主要有定时、外部事件计数、产生PWM 波形这几个功能,我们在使用这些功能之前,首先要设置T/C0 工作在合适的工作模式下。
T/C0 有四种工作模式,分别是普通模式、CTC 模式、快速PWM、相位可调的PWM 模式四种。
模式设置通过T/C0 的控制寄存器TCCR0 来完成。
1.普通模式在此模式下,T/C0 的计数寄存器TCNT0 在时钟的驱动下不停累加。
当计满后(计数值达到最大,8 位寄存器最大计数值为0xff),由于数值的溢出寄存器清零重新开始累加。
当计数器溢出后,TIFR 中的溢出标志位TOV0 会置位,也可触发中断。
所以我们可以通过查询或中断的方式得知定时器的溢出从而进行相关处理。
此模式适合定时与计数。
关于定时和计数,这里的定时功能是T/C0 在对时钟计数达到一定的值后引发中断,达到了定时功能,然而本质的过程是计数工作。
那么这里所说的计数功能是外部事件计数。
实例:T/C0 定时实验,将T/C0 设置为普通模式,对1024 分频的系统时钟进行计数,计满发生中断,40 次中断递增一个计数用的变量,主函数则不停显示这个变量。
第一步:开总中断,SREG |= 0X80;第二步:开T/C0 溢出中断第三步:模式设置、分频设置、匹配输出模式设置T/C0 控制寄存器用于设置工作模式,时钟分频和波形输出模式。
这里T/C0 设置为普通模式,WGM00-WGM01设置为00。
此模式下定时器的TOP 值,也就是能够达到的最大计数值为0xFF。
TOV0 在计数器计满后置位,也就是计到MAX,八位的定时器计数达到255 为计满。
低三位设置定时器时钟。
T/C0 在系统时钟的分频或外部时钟的驱动下递增或递减。
系统时钟也就是晶振的大小是11.0592MHZ。
此实验中,设置为1024 分频。
最全面的AVRmega16定时计数器的学习笔记
![最全面的AVRmega16定时计数器的学习笔记](https://img.taocdn.com/s3/m/0ae58fe4ba1aa8114531d91c.png)
定时计数器学习笔记ATmega16-共配置了2个8位和1个16位,共3个定时计数器,它们是8位的定时计数器T/C0 T/C2和16位的定时计数器T/C1。
一、学习和使用定时计数器时,必须注意以下的基本要素:1、脉冲信号源。
脉冲信号源是指输入到定时计数器的计数脉冲信号。
通常用于定时计数器计数的脉冲信号可以由外部输入引脚提供,也可以由单片机内部提供。
2、计数器类型。
计数器类型是指计数器的计数运行方式,可分为加一(减一)计数器,单程计数或双向计数等。
3、计数器的上下限。
计数器的上下限指计数单元的最小值和最大值。
一般情况下,计数器的下限值为零,上限值为计数单元的最大计数值,即255(8位)或65535(16位)。
需要注意的是,当计数器工作在不同模式下时,计数器的上限值并不都是计数单元的最大计数值255或65535,它将取决于用户的配置和设定。
4、计数器的事件。
计数器的事件指计数器处于某种状态时的输出信号,该信号通常可以向MC申请中断。
如当计数器计数到达计数上限值255时,产生溢出”信号,向MC申请中断。
二、8 位定时计数器T/C0、T/C2(一)T/CO、T/C2的特点:(1)单通道计数器。
(2)比较匹配时清零计数器(自动重装特性,Auto Reload )。
(3)可产生无输出抖动(glitch-free )的,相位可调的脉宽调制(PWM信号输出。
(4)频率发生器。
(5)外部事件计数器(仅T/CO)。
(6)带10位的时钟预分频器。
(7)溢出和比较匹配中断源(TOV0 OCF和TOV2 OCF2。
(8)允许使用外部引脚的32kHz手表晶振作为独立的计数时钟源(仅T/C2)。
(二)寄存器1、TCNT0--TC(计数寄存器TCNT是T/C0的计数值寄存器。
写TCNT(寄存器将在下一个定时器时钟周期中阻塞比较匹配。
因此,在计数器运行期间修改TCNT0勺内容,有可能将丢失一次TCNT与OCR0勺匹配比较操作2、OCR0输出比较寄存器8位寄存器OCR(中的数据用于同TCNT(寄存器中的计数值进行匹配比较。
avr单片机的定时器、中断和PWM(转)
![avr单片机的定时器、中断和PWM(转)](https://img.taocdn.com/s3/m/77b46025e2bd960590c67765.png)
/s/blog_4aa25f130100go4v.html转中断:我的理解就是cpu执行时,遇到中断——根据对应的中断源(硬件或软件)——pc定位中断入口地址,然后根据这里的函数指针——跳转到相应的服务程序之所以上面()了硬件或软件,这里还涉及到向量中断和非向量中断:区别就在于确定中断源,如果是硬件编码了中断源的,直接跳转相应的服务函数则是向量中断。
而非向量中断指的是:如果发生中断了,但此时还不清楚是那个中断,需要查找标志位来确定跳转到那个中断区域。
可以发现向量中断肯定来的快些,这里为定时器的中断来做好准备。
再来看看avr单片机的定时器:定时器/计数1(16位)————分为普通模式,CTC模式,快速pwm模式,相位修正pwm模式,相位频率修正pwm模式,输入捕获模式。
普通模式:*1 寄存器TCCR1B(控制寄存器)7 6 5 4 3 2 1 0ICNC1 ICES1 - WGM13 WGM12 CS12 CS11 CS10CS12 CS11 CS10控制分频(内:预分频器):取值0-5对应了停止,无分频,8,64,256,1024当为110为下降沿驱动,111为上升沿驱动(外部):用于对外部信号的计数*2上面的计数结果放在计数寄存器TCNT1,TCNT0中(高低8位)*3中断屏蔽寄存器(TIMSK)OCIE2 TOIE2 TICIE1 OCIE1A OCIE1B TOIE1OCIE0 TOIE0TOIE1 :设置为溢出中断,置1嘿嘿,有了上面的3个寄存器就可以做秒表等了——思路为:设定控制寄存器(内分频,还是外部计数?)——装初值——设置中断方式(这里用了溢出)——打开中断注意点:装初值时需要先写高位TCNT1,再写低位TCNT0,读时相反TCCR1B=0x01;无分频TCNT1H=0x88;TCNT1L=0x88;TIMSK|=BIT(2); 再开中断SREG|=bit(7); 这样初始化oK!由于avr不像51无int code等之类定义的方法,用的是#pragma data:code 底下为存储的内容写中断也类似:#pragma interrupt_handler (中断函数名:向量号)miao:9(现在该理解向量中断吧)写好申明后就写函数体了void miao(){中断服务程序}这样作为普通用法就小功告成了总结一下就是模式,初值,中断(对应的3个寄存器)和具体C函数的写法CTC模式比较输出模式:用于输出50%占空比的方波信号,用于产生准确的连续定时信号硬件:对应了pd4,pd5输出比较b和a比较输出*1 寄存器TCCR1A(控制寄存器)功能多了寄存器也分a、b了^_^7 6 5 4 3 2 1 0com1A1 COM1A0 com1B1 COM1B0 FOC1A FOC1B W GM11 WGM10用到了4567和01 4、5控制b 6、7控制acom1A(B)1 COM1A(B)0 一般用00和01 WGM11,WGM10放在底下讲0 0 普通i/00 1 比较匹配时输出取反1 0 比较匹配时输出01 1 比较匹配时输出1*2 寄存器TCCR1B(控制寄存器)7 6 5 4 3 2 1 0ICNC1 ICES1 - WGM13 WGM12 CS12 CS11 CS10CS12、CS11、CS10为设置时钟源的WGM13,WGM12,WGM11,WGM10用于波形产生描述的位选择,有对应的表0-15 这里选了4:CTC-OCR1A-立即更新-最大 OCR1A (16位)输出比较寄存器-这里存放了上限值设置的目的是,计数上升到了设定的上限后就电平取反思路:先初始话,对应的复用i/o为输出——设定com1A(B)1,COM1A(B)0 为比较输出取反——设定上限值为ocr1A 就ok了0CR1A可以根据公式计算:具体公式看手册,这里因为我打不起来o(∩_∩)o...哈哈总结一下就是控制寄存器a,b以及上限的值即可产生方波快速PWM分8位9位10位快速pwm,以及自定义方式我的理解:OCR1A存放上限值,这样用上了A的功能,由上面可知A只能为方波了,且计数到这个值时取反下限值通过OCR1B来确定的,从而计数到这个值置0,从而可以发现在一个周期内 OCROB即为高电平的时间(确定占空比)如图TCCR1A=0x63;TCCR1B=0x1B; 工作方式(快速pwm15,64分频)和分频系数OcR1A=1249;OCCR1B=250; 设为100Hz PWM信号,和2毫秒的高电平时间总结一下就是控制寄存器:由上限值,和分频系数可以确定计数的时间,确定频率由下限值可以确定占空比怎么样?明白了吗?o(∩_∩)o...相位修正PWM和快速pwm一样,模式分8位9位10位快速pwm,以及自定义方式共5种对应123和10,11相位修正其实和上面的方法相同,只不过到最大值时,不是取反,而是计数--,直到到了下限时取反由上可以发现2图的区别吧,一个为到TOP后,直接置0,后者为--,且在top 不取反而是到了最小值是取的,周期故而也比快速的长了一倍,故频率为快速pwm的一半,但是占空比不变,这也是为什么叫快速pwm的原因TCCR1A=0x63;TCCR1B=0x13 工作方式(相位修正pwm11,64分频)和分频系数OcR1A=1249;OCCR1B=250; 设为100Hz PWM信号,和2毫秒的高电平时间相位频率修正PWM和相位修正的类似输入捕获。
单片机定时器实用方法总结
![单片机定时器实用方法总结](https://img.taocdn.com/s3/m/1e761d4530b765ce0508763231126edb6f1a76f2.png)
单片机定时器实用方法总结在单片机的应用中,定时器是一种常用的功能模块,它能够精确地计时和定时触发其他操作。
本文将总结一些单片机定时器的实用方法,帮助读者更好地应用定时器功能。
一、定时器的基本原理定时器是单片机中用于计时的硬件模块,通过计算定时器的计数值可以得到一段时间的长度。
定时器通常由一个计数器部分和一个控制逻辑部分组成。
计数器用于累加时钟脉冲的数量,控制逻辑部分负责设置计数器的初始值、计时模式和中断触发条件等。
二、定时器的控制寄存器在使用定时器之前,需要配置定时器的控制寄存器。
不同的单片机厂商和型号的定时器可能设置略有不同,但通常包含以下几个方面的设置:1. 定时器模式选择:定时器可以采用不同的计数模式,如定时模式、计时模式、脉宽调制模式等。
具体选择何种模式要根据实际需求来定。
2. 工作模式选择:定时器可以选择工作在单次触发模式还是连续触发模式。
单次触发模式下,定时器完成一次定时后会停止计数;连续触发模式下,定时器会自动重新开始新的计时。
3. 中断触发条件设置:定时器可以配置中断触发条件,即定时器计数到达某一个值时产生中断请求。
这个值可以通过设置计数器的初始值和定时器的重装载值来实现。
三、定时器的应用案例以下是几个使用单片机定时器的实用案例,供读者参考:1. 脉冲计数器在需要计算脉冲个数的应用场景中,可以使用定时器来实现脉冲计数的功能。
通过设置定时器的工作模式为计时模式,计数器每收到一个脉冲信号就加1,从而实现对脉冲个数的精确计数。
2. 延时功能定时器可以用于实现延时功能。
通过设置定时器的工作模式和计时值,可以精确控制延时的时间长度。
例如,可以使用定时器进行毫秒级别的延时,或者用定时器实现微秒级别的精确延时。
3. PWM输出控制定时器常常用于控制PWM(脉宽调制)信号的输出。
通过设置定时器的工作模式为PWM模式,并根据需要设定脉宽和频率参数,可以实现对PWM信号的输出控制。
这在一些需要模拟控制信号的应用中非常有用,如电机速度控制、LED亮度调节等。
avr单片机的总结
![avr单片机的总结](https://img.taocdn.com/s3/m/cc8e800d76c66137ee06197a.png)
1、A VR单片机中断总结A VR单片机只是A TMEL公司推出的一款基于RISC指令构架的高性能、低功耗单片机。
ATmega16单片机具有21个中断源,如下表所示。
每一个中断源都有一个独立的中断向量作为中断服务程序的入口地址,而且所有的中断源都有自己独立的使能位。
如果全局中断IA VR单片机有3个外部中断,由引脚触发。
PB2(INT2),PD2(INT0)、PD3(INT1).。
需要注意:如果允许外部中断的话,即使是INT0,INT1、INT2这三个引脚都设为输出方式,外部中断也会触发。
INT0、INT1外部中断可以选择的触发方式有上升沿触发、下降沿触发以及低电平触发;INT2只有跳变沿触发,没有电平触发。
使用外部中断涉及到的寄存器有:MCU控制寄存器MCUCR,MCU控制欲寄存器MCUCSR,通用中断控制寄存器GICR,通用中断寄存器GIFR。
A VR单片机的中断响应时间最少为4个时钟周期。
在这4个时钟周期里,程序计数器PC的2字节自动入栈,而堆栈指针SP减2。
中断相关的寄存器:外部中断0触发方式选择6位—ISC2:外部中断2的触发方式,异步外部中断2由外部引脚INT2激发。
如果ISC2清零,则INT2的下降沿激活中断;如果ISC2置1,则INT2的上升沿激活中断。
INT2的边沿触发方式是异步的,只要INT2引脚上产生宽度超过50ns就会引起中断。
如果选择了低电平中断,则低电平必须保持到当前的指令完成才会产生中断。
而且只要引脚拉低,就会引发中断请求。
改变ISC2时有可能发生中断。
因此在寄存器GICR里清楚相应的中断使能位INT2,然后再改变ISC2,最后在重新使能中断之前,需要通过对GIFR寄存器的响应中断标志位INF2写“1”使其清零。
位7INT1:使能外部中断请求1.当INT1为1,且状态寄存器SREG的I标志置位的时候,相应的外部引脚中断使能。
MCU通用控制寄存器MCUCR的中断敏感电平控制ISC11和ISC10决定中断是由上升沿、下降沿、还是INT1电平触发的。
单片机定时器的使用总结(一)
![单片机定时器的使用总结(一)](https://img.taocdn.com/s3/m/c593ba4817fc700abb68a98271fe910ef12daea5.png)
单片机定时器的使用总结(一)引言概述:
单片机定时器是一种广泛应用于嵌入式系统中的重要功能模块。
它可以实现时间延时、计时和定时中断等功能,对于实现精确的时间控制和事件调度具有重要意义。
本文将对单片机定时器的使用进行总结,主要包括定时器的基本原理、定时器的设置方法、定时器的常见问题及解决方法等。
正文:
1. 定时器的基本原理
- 定时器的工作原理和时钟源选择
- 定时器的计数方式和计数器溢出
- 定时器的计数器和预分频器
2. 定时器的设置方法
- 定时器的初始化配置
- 定时器的工作模式选择
- 定时器的计数值设置和自动重装载
- 定时器的中断使能和中断标志位
3. 定时器的常见问题及解决方法
- 定时器溢出导致计数错误的分析和解决
- 定时器中断处理过程中的注意事项
- 定时器计数精度和误差分析及校准方法
4. 定时器的高级应用
- 定时器用于PWM波形生成的实现方法
- 定时器用于脉冲计数的应用场景和实现
- 定时器与外部中断的结合应用
5. 定时器的优化和扩展
- 定时器选择和性能比较
- 定时器的功耗优化方法
- 定时器的多路复用与扩展
总结:
本文对单片机定时器的使用进行了总结,包括定时器的基本原理、设置方法、常见问题及解决方法,以及定时器的高级应用和优化扩展。
通过对单片机定时器的深入了解和灵活运用,可以实现精确的时间控制和事件调度,提高系统性能和可靠性。
在未来的开发实践中,我们应该根据具体需求选择适合的定时器,并注意定时器的设置和使用细节,以充分发挥定时器的功能和优势。
avr单片机定时器0溢出中断程序
![avr单片机定时器0溢出中断程序](https://img.taocdn.com/s3/m/8042ace9195f312b3169a59b.png)
avr单片机定时器0溢出中断程序2014 年2 月17 日22:26:32 芯片名称: AVR (艾特梅尔公司)mega16A 微控制器芯片;开发板: 自主研发的YF-A1 芯片开发板; (YF :是本人名字缩写) 第53 次试验,用逻辑分析仪捕捉,输出于IO 口的数字,脉冲信号,脉冲信号宽度:1.5~1.8 微妙,每9~11 个脉宽1.5us 的信号时序中,夹杂着一个脉宽位为3 微妙的高脉冲信号. 我用了好几个小时都计算不出定时器0 内部的时钟频率........哪里出错了呢? 外部用12 兆晶体整荡器; 我的计算结论是:定时器0 内部频率为32khz ,但是这显然有问题. 定时器时钟为内部8 分频TCCR0=0X02; TCNTO 初始值250,即每6 个时钟周期溢出一次,每溢出一次,PB 口电平取反一次, 就这样反向计算脉宽 1.5us ÷ 6 ==每一个被分频的时钟时间÷ 8 =时钟频率;/* 写这个程序我用了3 个多小时,反复实验.苍天不负有心人额,,哎╮(╯▽╰) ╭,,,,,程序名: 定时器0 溢出中断概述: 定时器每一毫秒溢出一次,溢出500 次,即0.5 秒,LED 灯跳变一次,我发现,如果不将所有io 口初始化,芯片将变得极其不稳定,无法正常工作,定时器0 溢出标志位TOV0 一旦溢出,进入中断服务程序后,将自动清零,再无需软件清零,我似乎明白了硬件清零的意思;finish time :2014 年2 月28 日20:40:21;*/#include #include interrupt.h>#includetypedef unsigned char uint8;typedef unsigned int uint16;volatile uint16 a=0;。
AVR定时计数器0的寄存器配置
![AVR定时计数器0的寄存器配置](https://img.taocdn.com/s3/m/a0f95e20a5e9856a561260c8.png)
T/C0是一个通用的单通道8位定时器/计数器模块。
其主要的特点如下:●单通道计数●比较匹配时清零计数器(自动重装/加载)●无干扰脉冲,相位正确的PWM●频率发生器●外部事件计数器●10位的时钟预分频器●溢出和比较匹配中断源(TOV0 和OCF0)与T/C0相关的寄存器1.T/C0计数寄存器—TCNT0通过T/C 寄存器可以直接对计数器的8 位数据进行读写访问。
对TCNT0寄存器的写访问将在下一个时钟阻止比较匹配。
在计数器运行的过程中修改TCNT0的数值有可能丢失一次TCNT0和OCR0 的比较匹配。
计数器每一次加一操作都会使TCNT0的数值加1。
2.输出比较寄存器—OCR0输出比较寄存器包含一个8 位的数据,不间断地与计数器数值TCNT0进行比较。
匹配事件可以用来产生输出比较中断,或者用来在OC0引脚上产生波形。
3.定时/计数中断屏蔽寄存器—TIMSKOCIE为比较匹配中断允许标志位,置1时表示允许。
TOIE为溢出中断允许标志位,置1时表示允许。
4.定时计数中断标志寄存器—TIFROCF为比较输出的中断标志位,当比较匹配成功时,OCF被设为1,程序转入执行相应的中断函数,OCF由硬件自动清零,写入逻辑1可以清除该标志位。
TOV为溢出中断标志位,当产生溢出时,TOV被设为1,程序转入执行相应的中断函数,TOV同样由硬件自动清零,写入逻辑1可清除标志位。
5.T/C0控制寄存器—TCCR0他用于选择计数器的计数源、工作模式、和比较输出等方式。
(1)FOCO:强制输出比较FOC0 仅在WGM00指明非PWM模式时才有效。
但是,为了保证与未来器件的兼容性,在使用PWM 时,写TCCR0 要对其清零。
对其写1后,波形发生器将立即进行比较操作。
比较匹配输出引脚OC0 将按照COM01:0的设置输出相应的电平。
要注意FOC0 类似一个锁存信号,真正对强制输出比较起作用的是COM01:0的设置。
FOC0 不会引发任何中断,也不会在利用OCR0 作为TOP的CTC模式下对定时器进行清零的操作。
AVR第九章 T-C0应用-定时溢出中断动态扫描五位数码管显示
![AVR第九章 T-C0应用-定时溢出中断动态扫描五位数码管显示](https://img.taocdn.com/s3/m/b7459b62783e0912a2162a77.png)
2.T/C0定时溢出中断动态扫描五位数码管显示图7.3 动态扫描显示前面讲述延时的方法实现数码管动态扫描个、十、百、千和万位,每位分时输出字线和位线,占用了程序90%以上的时间,在快速系统中这是不允许的。
下面介绍一种采用T/C0溢出中断的方法,每2ms 溢出中断一次,在中断服务程序中轮流改变字线和位线,显示某位,随即返回主程序,这样可以不占用主程序大量时间来管理动态扫描程序。
主程序只需把要显示的各位七段码放到相应的SRAM中即可。
电路同图7.3所示。
主程序把要显示的16位二进制数放在r17:r16中,经二转十、查七段码放在$100~$104中,位线码送初值$fe,并对T/C0溢出中断初始化。
在中断服务程序中判位线码,该显示哪位就送相应的字线和位线,再修改位线码,为下次中断做好准备,然后立刻返回主程序。
2ms以后T/C0又溢出中断送子线和位线,开始显示下一位,并修改位线码,中断返回。
这样个、十、百、千和万位循环反复显示,每位显示2ms,10ms显示一遍(5位),每秒显示100遍,这样可以看到5位稳定的数码显示。
而T/C0溢出中断占用的时间只是几µs,绝大多数时间都可以给主程序使用。
.include "8535def.inc".org $0000rjmp reset.org $009rjmp tim0_ovftab:.db $3f,$06,$5b,$4f,$66,$6d,$7d,$07,$7f,$6f reset: ldi r16,low(ramend) ;栈指针置初值out spl,r16ldi r16,high(ramend)out sph,r16ldi r16,$ff ;定义PB、PD为输出口out ddrb,r16out ddrd,r16ldi r17,$ff ;设初值在r17:r16ldi r16,$ffrcall b16td ;调用二转十子程;查七段码,送给$100~$104mov r23,r16rcall cqm1sts $100,r0mov r23,r17;十位送$101rcall cqm1sts $101,r0mov r23,r18;百位送$102rcall cqm1sts $102,r0mov r23,r19;千位送$103rcall cqm1sts $103,r0mov r23,r20;万位送$104rcall cqm1sts $104,r0;T/C0初始化ldi r16,$01 ;允许T/C0溢出中断out timsk,r16ldi r16,$03 ;64分频,2ms一位out tccr0,r16ldi r16,$00 ;T/C0置初值0out tcnt0,r16ldi r21,$fe ;位线置初值seihere: rjmp here;定时2ms到中断服务子程序tim0_ovf:in r1,sreg ;保存sregcpi r21,$fe ;该显示个位?brne t21 ;否则转t21lds r20,$100 ;送个位七段码给字线out portb,r20out portd,r21 ;送个位位线ldi r21,$fd ;修改位线(下次显示十位) rjmp t25t21: cpi r21,$fd ;该显示十位?brne t22 ;否则转t22lds r20,$101 ;送十位七段码给字线out portb,r20out portd,r21 ;送十位位线ldi r21,$fb ;修改位线(下次显示百位) rjmp t25t22: cpi r21,$fb ;该显示百位?brne t23 ;否则转t23lds r20,$102 ;送百位七段码给字线out portb,r20out portd,r21 ;送百位位线ldi r21,$f7 ;修改位线(下次显示千位) rjmp t25t23: cpi r21,$f7 ;该显示千位?brne t24 ;否则转t24lds r20,$103 ;送千位七段码给字线out portb,r20out portd,r21 ;送千位位线ldi r21,$ef ;修改位线(下次显示万位) rjmp t25t24: lds r20,$104 ;送万位七段码给字线out portb,r20out portd,r21 ;送万位位线ldi r21,$fe ;修改位线(下次显示个位)t25: out sreg,r1 ;恢复sregreticqm1: ;将R23中的一位十进制数转换成相;应的显示代码保存在R0中。
AVR学习笔记三、定时记数器0实验
![AVR学习笔记三、定时记数器0实验](https://img.taocdn.com/s3/m/ecd299c69ec3d5bbfd0a74d2.png)
A VR学习笔记三、定时/记数器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个功能模块,分别描述如下:●单片机系统:检测按键的按下,通过LED灯的亮灭指示按键按下次数。
●外围电路:按键检测电路以及显示按键状态的LED显示电路。
●软件程序:熟悉掌握ATmega16单片机的定时/计数器0的计数程序的编写。
3.1.2、器件和原理本实例首先介绍ATmega16单片机的定时/计数器0的功能,然后详细介绍如何利用定时/计数器0实现对外部事件进行计数的功能。
AVR单片机定时计数器TC0图解教程
![AVR单片机定时计数器TC0图解教程](https://img.taocdn.com/s3/m/6c8d3ed933d4b14e85246814.png)
Output Compare Flag 输出比较匹配中断标志,转向中断向量执行中断服 务时硬件自动清零
输出比较寄存器 0 Output Compare Register OCR0
00 PB3 不与 OC0 相连, 作普通 IO 用 TCNT0=OCR0 TCNT0=TOP 01 保留 10 OC0/PB3 11 TCNT0=OCR0 TCNT0=TOP
=
输出比较寄存器 0 Output Compare Register OCR0
00 PB3 不与 OC0 相连, 作普通 IO 用 TCNT0=OCR0 TCNT0=TOP 01 保留 10 OC0/PB3 11 TCNT0=OCR0 TCNT0=TOP
SREG(Status Register) 状态寄存器 初 R/W TCCR0(T/C0 Control Register) T/C0 控制寄存器 初值 R/W Bit 0 RW FOC0 0 RW WGM01 0 RW COM01 0 RW COM00 0 RW WGM00 0 RW CS02 0 RW CS01 0 RW CS00 初值 R/W Bit TIMSK(Timer Interrupt Mask Register) 定时计数器中断屏蔽寄存器 0 RW OCIE2 0 RW TOIE2 0 RW TICIE1 0 RW OCIE1A 0 RW OCIE1B 0 RW TOIE1 0 RW OCIE0 0 RW TOIE0 Bit I T H S V N Z C 0 0 0 0 0 0 0 0
Output Compare Flag 输出比较匹配中断标志,转向中断向量执行中断服 务时硬件自动清零
定时/计数器 Timer0/Counter0 Register TCNT0
AVR定时器学习笔记
![AVR定时器学习笔记](https://img.taocdn.com/s3/m/d357494e767f5acfa1c7cd47.png)
0
0
0
0
1 普通模式
0xFF
立即
0xFF 比较匹配时触发 OC0
0
0
0
1
0 普通模式
0xFF
立即
0xFF 比较匹配时清零 OC0
0
0
0
1
1 普通模式
0xFF
立即
0xFF 比较匹配时置位 OC0
1
0
1
0
0 PWM,相位可调
0xFF
0xFF
0x00 PB3 为通用 I/O 引脚
1
0
1
0
1 PWM,相位可调
求定时时间
TS = {(MAX+1-TCNT0)* N }/Fclk
0.(A)
变量 N 代表预分频因子(1、8、64、或 1024),TS 定时时间,MAX 最大计数,Fclk 系统时钟
TCNT0 T/C0 的初始值;
求 T/C0 的初值
TCNT0 = MAX+1 – {(TS*Fclk)/N } (B)
第二部分:定时器 0 T/C0 定时器 0 有两个中断源 TIMER0 OVF(溢出中断)和 TIMER0 COMP(比较匹配中断),中断向量号分别为 10
和 20;在三个定时器中,T/C0 的中断级别最低。(PS:既然 TIMER0 OVF(溢出中断)比 TIMER0 COMP(比较匹配 中断)优先级要高,那么 T/C0 主要用在计数方面吧?^-^ ^-^) 1、 T/C0 的时钟源 T/C0 的计数时钟源可由来自外部引脚 T0(PB0)的信号提供,也可来自芯片的内部。时钟源
OCR0
立即
0xFF PB3 为通用 I/O 引脚
2
1
AVR单片机定时器使用总结TC0
![AVR单片机定时器使用总结TC0](https://img.taocdn.com/s3/m/a18c77f3f90f76c661371a5c.png)
A VR单片机定时器使用总结T0一、普通模式:普通模式(WGM01:0 = 0) 为最简单的工作模式。
在此模式下计数器不停地累加。
计到8比特的最大值后(TOP = 0xFF),由于数值溢出计数器简单地返回到最小值0x00 重新开始。
在TCNT0 为零的同一个定时器时钟里T/C 溢出标志TOV0 置位。
此时TOV0 有点象第9 位,只是只能置位,不会清零。
但由于定时器中断服务程序能够自动清零TOV0,因此可以通过软件提高定时器的分辨率。
在普通模式下没有什么需要特殊考虑的,用户可以随时写入新的计数器数值。
输出比较单元可以用来产生中断。
但是不推荐在普通模式下利用输出比较来产生波形,因为这会占用太多的CPU 时间。
TCCR0:`该模式一般用来定时中断。
使用步骤:1、计算确定TCNT0初值;2、设工作方式,置初值;3、开中断;二、CTC( 比较匹配时清零定时器)模式在CTC 模式(WGM01:0 = 2) 下OCR0 寄存器用于调节计数器的分辨率。
当计数器的数值TCNT0等于OCR0时计数器清零。
OCR0定义了计数TOP值,亦即计数器的分辨率。
这个模式使得用户可以很容易地控制比较匹配输出的频率,也简化了外部事件计数的操作。
CTC模式的时序图为Figure 31。
计数器数值TCNT0一直累加到TCNT0与OCR0匹配,然后TCNT0 清零。
利用OCF0 标志可以在计数器数值达到TOP 时产生中断。
在中断服务程序里可以更新TOP的数值。
由于CTC模式没有双缓冲功能,在计数器以无预分频器或很低的预分频器工作的时候将TOP 更改为接近BOTTOM 的数值时要小心。
如果写入的OCR0 数值小于当前TCNT0 的数值,计数器将丢失一次比较匹配。
在下一次比较匹配发生之前,计数器不得不先计数到最大值0xFF,然后再从0x00 开始计数到OCF0。
为了在CTC 模式下得到波形输出,可以设置OC0 在每次比较匹配发生时改变逻辑电平。
AVR_timer0寄存器详细说明
![AVR_timer0寄存器详细说明](https://img.taocdn.com/s3/m/e3d73427482fb4daa58d4b94.png)
Timer0( T/C0)
1.TCCRO控制寄存器
BIT7_FOC0:强制输出比较,此位写1时相当于发生了一个比较匹配,故平时此位应置0;BIT6、3_WGM01:0工作模式(关于各模式具体工作参看后面)
工作模式简述:
普通模式:定时用,但不要用来产生PWM输出。
比较匹配清0计数器CTC模式:产生频率可变的占空比恒定且为50%的方波;
快速PWM模式:产生频率恒定的占空比可变的脉冲波形;
相位修正PWM模式:产生的PWM前后沿对称,且波形的频率恒定、占空比可变。
BIT5、4_COM01:0比较匹配后的OC0引脚的输出方式
BIT2:0_CS02:0时钟选择
2.TCNT0计数寄存器
BIT7:0此寄存器存放的就是定时器计数的值。
3.OCR0比较寄存器
4.TIMSK中断屏蔽寄存器
BIT7:2是T/C2和T/C1才用到的中断屏蔽;
BIT1_OCIE0:比较匹配中断使能;
BIT0_TOIE0:溢出中断使能。
5.TIFR中断标志寄存器(不用手动清除标志位)
BIT7:2是T/C2和T/C1才用到的中断标志位;
BIT1_OCF0:比较匹配的中断标志位,即TCNT0=OCR0时产生的中断;
BIT0_TOV0:溢出中断标志位。
工作模式:
1.普通模式
2.比较匹配清0计数器CTC模式
3.快速PWM模式
4.相位可调PWM模式。
AVR_定时器使用详解
![AVR_定时器使用详解](https://img.taocdn.com/s3/m/f7e0987c1711cc7931b716fe.png)
//宏定义 #define PWM1A_ON() PORTD|= (1<<PWM1A) //输出高电平,灯亮 #define PWM1A_OFF() PORTD&=~(1<<PWM1A) //输出低电平,灯灭
int main(void) {
//上电默认 DDRx=0x00,PORTx=0x00输入,无上拉电阻
PORTA =0xFF;
//不用的管脚使能内部上拉电阻。
PORTC =0xFF;
PORTB =~ (1<<PWM0);
//低电平,灯灭
DDRB = (1<<PWM0);
//输出
Hale Waihona Puke PORTD =~((1<<PWM1A)|(1<<PWM1B)|(1<<PWM2)); //低电平,灯灭
(0<<ICES1)|(1<<WGM13)|(1<<WGM12)|(1<<CS12)|(0<<CS11)|(1<<CS10); //1024分频,WGM1=15快速 PWM 模式,TOP=OCRnA,ICP 下降沿触发,OC1B 正向 PWM 输出,OC1A 为普通 IO }
SIGNAL(SIG_INPUT_CAPTURE1) //输入捕捉中断 {
PWM 频率 = 系统时钟频率/(分频系数*(1+计数器上限值))
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
公式确定: 变量N 代表预分频因子(1、8、64、或1024)。
focn
TCCR0:
o 2 N (1 OCRn)
fclk _ i
FOC0 WGM00 COM01 COM00 WGM01 CS02 CS01 CS00
OC0 取反 方波
0 0 0 0 0 1 1 0 1 1 0 0 0 0 1 0 1 0 1 1 0 0 0 0 1 1 1 0 1 1
f clk f ocn _ pwm N 256
变量N 代表分频因子(1、 8、 64、 256 或1024)。 OCR0寄存器为极限值时表示快速PWM模式的一些特殊情况。若OCR0等 BOTTOM, 输出为出现在第MAX+1 个定时器时钟周期的窄脉冲; OCR0 为MAX 时,根据COM01:0的设定,输出恒为高电平或低电平。通过设定OC0 在比较匹配 时进行逻辑电平取反(COM01:0 = 1), 可以得到占空比为50%的周期信号。 OCR0 为 0 时信号有最高频率foc2 = fclk_I/O/2。这个特性类似于CTC 模式下的OC0 取 反操作,不同之处在于快速PWM 模式具有双缓冲。 TCCR0: FOC0 WGM00 COM0 COM00 WGM01 CS02 1 —— CS01 —— —— —— —— CS00 —— —— —— ——
利用OCF0 标志可以在计数器数值达到TOP 时产生中断。在中断服务程序 里可以更新TOP的数值。由于CTC模式没有双缓冲功能,在计数器以无预分频器 或很低的预分频器工作的时候将TOP 更改为接近BOTTOM 的数值时要小心。 如 果写入的OCR0 数值小于当前TCNT0 的数值,计数器将丢失一次比较匹配。在 下一次比较匹配发生之前,计数器不得不先计数到最大值0xFF,然后再从0x00 开始计数到OCF0。 为了在CTC 模式下得到波形输出,可以设置OC0 在每次比较匹配发生时改 变逻辑电平。这可以通过设置COM01:0 = 1 来完成。在期望获得OC0 输出之前, 首先要将其端口设置为输出。波形发生器能够产生的最大频率为fOC0 = fclk_I/O/2 (OCR0 = 0x00)。频率由如下
生中断。 工作于相位修正PWM 模式时, 比较单元可以在OC0 引脚产生PWM 波 形:将COM01:0设置为2 产生普通相位的PWM,设置COM01:0 为3 产生反向 PWM信号 ( 参见P79Table41)。要想在引脚上得到输出信号还必须将OC0 的数 据方向设置为输出。OCR0和 TCNT0比较匹配发生时OC0 寄存器将产生相应的 清零或置位操作,从而产生PWM 波形。工作于相位修正模式时PWM 频率可由 下式公式获得:
f
OCnPCPWM
f
clk
N 510
变量N 表示预分频因子 (1、 8、 64、256 或1024)。 OCR0寄存器处于极值代表了相位修正PWM模式的一些特殊情况。在普通PWM 模式下,若OCR0 等于BOTTOM,输出一直保持为低电平;若OCR0 等于MAX, 则输出保持为高电平。 反向PWM 模式则正好相反。 在Figure 33 的第2 个周期, 虽然没有发生比较匹配, OCn 也出现了一个从高到低的跳变。其目的是保证波 形在BOTTOM 两侧的对称。没有比较匹配时有两种情况会出现跳变: • 如Figure 33 所示,OCR0A的值从MAX改变为其他数据。当OCR0A值为MAX 时,引脚OCn 的输出应该与前面降序记数比较匹配的结果相同。为了保证波形 在BOTTOM两侧的对称,当T/C 的数值为MAX 时,引脚OCn 的输出又必须符 合后面升序记数比较匹配的结果。 • 定时器从一个比OCR0A 高的值开始记数,并因而丢失了一次比较匹配。系统 因此引入发生OCn 却仍然有跳变的现象。
工作于快速PWM 模式时,计数器的数值一直增加到MAX,然后在后面的一 个时钟周期清零。具体的时序图为Figure 32。图中柱状的TCNT0 表示这是单边 斜坡操作。 方框图同时包含了普通的PWM 输出以及反向PWM 输出。 TCNT0 斜 坡上的短水平线表示OCR0和TCNT0 的比较匹配。 计时器数值达到MAX 时T/C 溢出标志TOV0 置位。如果中断使能,在中断服务 程序可以更新比较值。工作于快速PWM 模式时,比较单元可以在OC0 引脚上
0 1 1 0 0 0 1 1 0 0 0 1 1 0 0
1 0 1 0 1 1 0 1 0 1 1 0 1 0 1
清零 低
置位 高
三、快速PWM 模式:
快速PWM 模式(WGM01:0 = 3) 可用来产生高频的PWM 波形。快速PWM 模式与其他PWM模式的不同之处是其单斜坡工作方式。计数器从BOTTOM计到 MAX,然后立即回到BOTTOM重新开始。对于普通的比较输出模式,输出比较 引脚OC0在TCNT0与OCR0匹配时清零, 在BOTTOM 时置位; 对于反向比较输出 模式, OC0 的动作正好相反。由于使用了单斜坡模式,快速PWM 模式的工作 频率比使用双斜坡的相位修正PWM 模式高一倍。此高频操作特性使得快速 PWM 模式十分适合于功率调节,整流和DAC 应用。高频 可以减小外部元器件( 电感,电容) 的物理尺寸,从而降低系统成本。
相位修正PWM 模式的PWM 精度固定为8 比特。计时器不断地累加直到 MAX,然后开始减计数。在一个定时器时钟周期里 TCNT0 的值等于MAX。 图中 TCNT0 的数值用柱状图表示,以说明双斜坡操作。本图同时说明了普通 PWM 的输出和反向PWM 的输出。TCNT0 斜坡上的小横条表示OCR0 与 TCNT0 的比较匹配。 当计时器达到BOTTOM 时T/C 溢出标志位TOV0 置位。此标志位可用来产
0 1 0 1
0 0 0 0
—— —— ——
——
——
——
***中断屏蔽寄存器:1:允许中断,0:屏蔽中断
7——OCIE2:T/C2 输出比较匹配中断使能; 6——TOIE2:T/C2 溢出中断使能 5——TICIE1:T/C1 输入捕捉中断使能 4——OCIE1A:T/C1输出比较 A 匹配中断使能 3——OCIE1B:T/C1 输出比较 B 匹配中断使能 2——TOIE1:T/C1 溢出中断使能 1——OCIE0:T/C0 输出比较匹配中断使能 0——TOIE0:T/C0 溢出中断使能
OC0
普通 保留 匹配时 OC0 清零, TOP 时OC0 置位 匹配时 OC0A 置位, TOP 时OC0 清零
0 0 0 0
1 1 1 1
0 0 1 1
0 1
1 1 1 1
—— —— ——
0 1
四、相位修正PWM 模式:
相位修正PWM 模式(WGM01:0 = 1) 为用户提供了一个获得高精度相位修PWM 波形的方法。此模式基于双斜坡操作。计时器重复地从BOTTOM 计到MAX,然 后又从MAX倒退回到BOTTOM。在一般的比较输出模式下,当计时器往MAX数 时若发生了TCNT0与OCR0的匹配, OC0将清零为低电平; 而在计时器往BOTTOM 计数时若发生了TCNT0与OCR0 的匹配, OC0 将置位为高电平。工作于反向输 出比较时则正好相反。与单斜坡操作相比,双斜坡操作可获得的最大频率要小。 但由于其对称的特性,十分适合于电机控制。
TCCR0: FOC0 WGM00 COM01 COM00 WGM01 CS02 CS01 —— —— —— CS00 —— —— ——
OC0
普通 保留 升序匹配清零 OC0 ;降序时匹 配将置位OC0 升序匹配置位 OC0 ;降序比较 匹 配 将 清 零 OC0
0 0 0 0
1 1 1 1
0 0 1 1
输出PWM 波形。设置COM01:0为2 可以产生普通的PWM 信号;为3 则可以产 生反向PWM 波形( 参见P79Table 40)。 要想在引脚上得到输出信号还必须将OC0 的数据方向设置为输出。产生PWM 波形的机理是OC0 寄存器在OCR0 TCNT0 匹配时置位( 或清零),以及在计数器清零( 从MAX变为BOTTOM) 的那一个定时 器时钟周期清零( 或置位)。输出的PWM 频率可以通过如下公式计算得到:
AVR 单片机定时器使用总结 T0
一、普通模式:
普通模式(WGM01:0 = 0) 为最简单的工作模式。在此模式下计数器不停地 累加。计到8比特的最大值后(TOP = 0xFF),由于数值溢出计数器简单地返回到 最小值0x00 重新开始。在TCNT0 为零的同一个定时器时钟里T/C 溢出标志 TOV0 置位。此时TOV0 有点象第9 位,只是只能置位,不会清零。但由于定 时器中断服务程序能够自动清零TOV0,因此可以通过软件提高定时器的分辨 率。 在普通模式下没有什么需要特殊考虑的, 用户可以随时写入新的计数器数值。 输出比较单元可以用来产生中断。 但是不推荐在普通模式下利用输出比较来产生 波形,因为这会占用太多的CPU 时间。 TCCR0: FOC0 0 0 0 0 0 0 WGM00 COM01 COM00 WGM01 CS02 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 1 CS01 0 1 1 0 0 1 CS00 1 0 1 0 1 0 分频 1 8 64 256 1024 下 降 沿 触 发 上 升 沿 触 发 HEX 01 01 03 04 05
0
0
0
0
0
1
1
1
`该模式一般用来定时中断。使用步骤: 1、 2、 3、 计算确定TCNT0初值; 设工作方式,置初值; 开中断;
二、CTC( 比较匹配时清零定时器)模式
在CTC 模式(WGM01:0 = 2) 下OCR0 寄存器用于调节计数器的分辨率。 当计数器的数值TCNT0等于OCR0时计数器清零。OCR0定义了计数TOP值,亦 即计数器的分辨率。这个模式使得用户可以很容易地控制比较匹配输出的频率, 也简化了外部事件计数的操作。CTC模式的时序图为 Figure 31。计数器数值 TCNT0一直累加到TCNT0与OCR0匹配,然后TCNT0 清零。