AVR单片机定时器计数器一

合集下载

AVR单片机定时器TC0定时操作过程

AVR单片机定时器TC0定时操作过程

定时器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§9.4(定时计数器1与2)11年

AVR§9.4(定时计数器1与2)11年

out spl,r16
ldi r16,high(ramend) out sph,r16
18主Βιβλιοθήκη 序堆栈的初始化定义PC0为输出
允许T1比较匹配中断 TCNT1=0 OCR1A=$7A12 256分频T/C1,CTC1=1 CPU开中断 等待中断
ldi r16,$01 ;PC0口定义 out ddrc,r16;为输出口 ldi r16,$10 ;允许T1比较 out timsk,r16;匹配A中断 clr r16 ;置TCNT1初值为0 out tcnt1l,r16 out tcnt1h,r16 ldi r16,$7a ;ocr1a置$7a12, out ocr1ah,r16;即1秒中断一次 ldi r16,$12 out ocr1al,r16 ldi r16,$0c ;T/C1对主 out tccr1b,r16;频256分频定时 sei here: rjmp here
• 可读可写 ; 初值=00。
9
T/C1数据类I/O寄存器的读写
1、数据类寄存器都是16位,每一个都由两个I/O寄存器组 成,要保证其读/写的同步性。 2、正确的读写次序(高8位有暂存器) 写时:先高后低; 读时:先低后高。 例1:将$1234 TCNT1 •ldi r16, $34 •ldi r17, $12 •Out TCNT1H, r17 •Out TCNT1L, r16 例2、 输入捕获寄存器 ICR1 R19:R18
2
§9.4.2 T/C1的特殊功能
一、输出比较匹配; 二、输入捕获; 三、PWM等特殊功能。
3
一、 T/C1的输出比较匹配
含义:T/C1在计数的过程中,其计数值与输出比较寄存器的 值相等时发生比较匹配。 TCNT1 T/C1时钟源 相等吗 OCR1A = 触发输出比较匹 配事件A

输入捕捉

输入捕捉
uint count;
/********以下是延时函数********/
void Delay_ms(uint xms)
{
int i,j;
for(i=0;i<xms;i++)
{ for(j=0;j<1140;j++) ; }
}
/********以下是端口初始化函数********/
void port_init()
6. avr定时器/计数器1 --TC1 --输入捕捉模式(捕获外部事件模式)
T/C的输入捕捉单元可用来捕获外部事件,并为其赋予时间标记以说明此时间的发生时刻。外部事件发生的触发信号由引脚ICP1 (PD6)输入,也可通过模拟比较器单元来实现。时间标记可用来计算频率、占空比及信号的其它特征,以及为事件创建日志。当引脚ICP1上的逻辑电平(事件)发生了变化,或模拟比较器输出ACO电平发生了变化,并且这个电平变化为边沿检测器所证实,输入捕捉即被激发:16位的TCNT1数据被拷贝到输入捕捉寄存器ICR1,同时输入捕捉标志位ICF1置位。如果此时ICIE1 = 1,输入捕捉标志将产生输入捕捉中断。中断执行时ICF1自动清零,或者也可通过软件在其对应的I/O位置写入逻辑"1”清零。读取ICR1时要先读低字节ICR1L,然后再读高字节ICR1H。读低字节时,高字节被复制到高字节临时寄存器TEMP。CPU读取ICR1H时将访问TEMP寄存器。
操作步骤:
一、捕获输入端口初始化:捕获输入端ICP1(PD6)设为输入,DDRD&=(0<<PD6);
并使能PD6口的内部上拉电阻,PORTD|=(1<<PD6);
二、设置定时器的工作模式:TCCR1A=0X00 //普通模式,计数最大值为65535

AVR单片机定时器计数器一

AVR单片机定时器计数器一

单片机的定时器/计数器实质就是一个加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。

AVR128定时器计数器1详细解读,附详细程序注释,初学者一看就懂的程序哦

AVR128定时器计数器1详细解读,附详细程序注释,初学者一看就懂的程序哦

1:如何设置A VR单片机的时钟?答:可以通过设置熔丝位来确定A VR单片机工作时的时钟是来自外部晶振还是来自内部的振荡器。

熔丝位设置:芯片有如下几种通过熔丝位选择的时钟源。

时钟输入到AVR 时钟发生器,并通往其他合适的模块。

Table 6.时钟源选择芯片时钟选项CKSEL3..0(1)外部晶体/ 陶瓷振荡器1111 - 1010外部低频晶体1001外部RC 振荡器1000 - 0101标定的内部RC 振荡器0100 - 0001外部时钟0000 2.如何操作定时器计数器1,让其工作在定时状态?答:(1)通过设置寄存器TCCR1A,和寄存器TCCR1B中的相应位来给定时器选择分频系数。

(2)向数据寄存器TCNT1H,TCNT1L装初值。

(3)设置定时器/ 计数器中断屏蔽寄存器TIMSK中的第二位TOIE1=1;(4)打开总中断,置SREG中的第4位为‘1’,打开总中断,这里只需使SREG|=0X80即可;(5)在中断函数中重装初值。

3.中断函数格式:#pragma interrupt_handler函数名():中断向量序号void 函数名(){重装初值;其它程序代码.}4.如何计算计数初始值?答:举例说明:若我们设置定时器工作的分频为M分频,时钟频率为fclk,则单片机产生一次中断的时间为t=fclk/m.则若设置定时T则要记的数N为:N=T/t;定时器1 (16位定时器)寄存器TCCR1B = 0x04 设定256预分频要利用定时器定时1秒1,4000000 / 256 = 15625 说明定时器每当1/15625 秒就会触发一次中断2,65535 - 15625 = 49910 //1s/(产生一次中断的时间)计算出要累加多少次才能在1秒后出发定时器1的溢出中断3,49910 <==> C2 F6 将计算后的值换算成16进制4,TCNT1H = 0xC2 ; 对寄存器赋初值TCNT1L = 0xF6 ;。

AVR学习笔记四、定时计数器1实验

AVR学习笔记四、定时计数器1实验

A VR学习笔记四、定时/记数器1实验-------基于LT_Mini_M164.1 定时/计数器1的计数实验4.1.1 实例功能ATmega16的T/C1是一个16位的多功能定时计数器,其主要特点有:●真正的16位设计,允许16位的PWM。

● 2个独立的输出比较匹配单元。

●双缓冲输出比较寄存器。

●一个输入捕捉单元。

●输入捕捉躁声抑制。

●比较匹配时清零计数器(自动重装特性,Auto Reload)。

●可产生无输出抖动(glitch-free)的,相位可调的脉宽调制(PWM)信号输出。

●周期可调的PWM波形输出。

●频率发生器。

●外部事件计数器。

●带10位的时钟预分频器。

● 4个独立的中断源(TOV1、OCF1A、OCF1B、ICF1)。

在前面的实例中,我们已经学习了AVR单片机的定时/计数器0,本实例和下一个我们学习定时/计数器1,从上面的介绍我们可以看出,ATmega16单片机的定时/计数器1功能更为强大,值得我们深入学习。

定时/计数器的基本功能都是定时、计数等,掌握了一个定时/计数器的用法就能很容易的掌握其他定时/计数器的用法,所以我们不在学习定时/计数器1的定时、计数等基本功能。

在接下来的两个实例中,我们将学习定时/计数器1的增强功能。

在本实例中,我们利用ATmega16单片机的定时/计数器1的输入捕捉功能实现对按键时间的捕捉,并检测两次按键之间的时间间隔,然后通过LED指示实例运行效果。

本实例共有3个功能模块,分别描述如下:●单片机系统:使用定时/计数器1的输入捕捉功能检测按键的按下,并判断两次按键按下的时间间隔,然后通过LED灯的亮灭指示按键按下次数。

●外围电路:按键检测电路以及显示运行结果的LED显示电路。

●软件程序:熟悉掌握ATmega16单片机的定时/计数器1的输入捕捉中断程序的编写。

3.1.2、器件和原理本实例首先介绍ATmega16单片机的定时/计数器1的输入捕捉功能,然后详细介绍如何利用定时/计数器1实现对外部事件进行输入捕捉。

第七讲AVR定时器计数器

第七讲AVR定时器计数器
76 5 4 3 2 1 0
捕获标10志ICF
S3
中断请求2
溢出标志TF
S2
中断请求1
计数器的工作原 理与前述相同
2.ATmega16定时/计数器资源
T/C的预分频器 8位定时/计数器T/C0、T/C2 T/C2的异步操作 PWM模式下的T/C0、T/C2(下节课
内容) 16位定时/计数器T/C1 PWM模式下的T/C1(下节课内容)
内部时钟源
S0用于选择内 部/外部时钟源
计数器 初值
S2
溢出标志TF
中断请求
定时器的工作原理与计数器相同,只 是要求用于计数的脉冲,其频率恒定。
单片机的定时器用户是可以控制(可 编程)的。
事件捕获原理
捕获事件 S0
捕获0x寄8存8 器
闸门电路
S1
计数时钟源
计0x数8器0123456789ABCEF
0xFF
输出引脚OC0(PB3)的行为方式。这是I/O的第二功能, 1
0
0 1 1 1 PW1M,相0 位可调 比clk较I/O匹/6配4(0发x来F生F自时分清频零器O)C0 0xFF
0x00
相应的方向控制位要置“1”,以便将其配置为输出。 2
1
1 0 01
0CTC1模式 c比lk较I/O匹/25配6O(发C来生R0自时分置频位器OC)0 立即
T/C0控制寄存器 —— TCCR0
76 5 4 3 2 1 0
FOC0 WGM00 COM01 COM00 WGM01 M位被置为非PWM模 式下有效。
位6、位3:计C数S02器CC计SO0M1 数01CS模C00O式M00,用T(/TC非于/0C比P0W时较控M钟输模选制出式择模)T式/C0的计数和工

AVR单片机技术 定时器计数器中断应用教案

AVR单片机技术 定时器计数器中断应用教案

定时器/计数器中断应用
教案
教学目标知识目标:定时器/计数器中断应用;
能力目标:掌握AVR单片机定时器/计数器中断编程方法。

教学内容AVR单片机定时器/计数器中断应用
重点、难点定时器/计数器中断设置步骤;
定时器定时计算方法;
计数器计数值设定方法;
主程序和中断服务程序之间的关系;
教学方法趣味案例激励法;课堂讨论;归纳总结
教学组织案例引入:如果我们要设计一个时钟,如何实现?
问题引导:采用延时函数可以实现计时功能么?为什么?
知识展开:采用延时函数可以实现计时功能么?有什么问题?
课堂练习:如何利用定时器实现计时功能?
分析总结:定时器实现计时功能和利用延时函数实现计时功能有何利弊?尽量详细分析。

问题讨论AVRmega16有几个定时器?有什么不同?课后任务资料检索:计数器可以用来完成什么功能?教师备忘。

AVR单片机16位定时器TC1实例

AVR单片机16位定时器TC1实例
最新的gcc是20100110版的他升级很快每个版本编程时有地方会不同你在老版本下通过到新版本下不一定通过所以需要固定一个版本使用并且要认真看看gccavr的帮助文件都是英文的建议打印出来仔细看这很重要关于教材上的定义中断的方式在2010下肯定不能用所以需要看帮助里的中断定义方面的改动和其余的勘误说明
8MHZ/1024=8000000HZ/1024=7812.5HZ,每个计数脉冲的周期时间为1/7812.5=0.128ms,计时200ms的计数器值为:65635-200ms/0.128ms=63972=0xF9E4,则TCNT1H付初值为0xF9,TCNT1L付初值为0xE4.//函数功能:实现PA口的led亮0.1S,灭0.9S
#include
#define uchar unsigned char
/********以下是端口初始化函数********/
void port_init()
{
DDRA= 0xFF;//PA设置为输出口
PORTA = 0xFF;//PA输出高电平
}
/********定时器1初始化********/

TCNT1H = 0xCF;//计数器置初值
TCNT1L = 0x2C;
TCCR1A |= 0x00;//普通端口模式
AVR单片机16位定时器TC1实例
第一篇:AVR单片机16位定时器TC1实例
T/C1是16位定时器/计数器,它的计数器由两个8位寄存器TCNT1H,TCNT1L构成,TCNT1H是高8位寄存器,TCNT1L是低8位寄存器。最大计算值为2的16次幂,十六进制是0xFFFF=65535.例如:定时200ms,晶振8MHZ,分频系数1024,计数时钟频率为

AVR单片机定时计数器TC0图解教程

AVR单片机定时计数器TC0图解教程

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单片机定时器使用总结TC0

AVR单片机定时器使用总结TC0

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单片机定时计数器的结构与应用探素

AVR单片机定时计数器的结构与应用探素
OCF2 TOV2 ICF1 OCF1A OCF1B TOV1 OCF0 TOV0
位0——TOV0(Overflow) T/C0溢出中断标志。当T/C0 产 生溢出时,该位自动置1,向CPU提出溢出中断请求,该中 断得以处理后,该位硬件自动清0,用户也可对其写1清0
位1——OCF0 T/C0 输出比较匹配中断标志。当T/C0比 较匹配成功,OCF0置1,向CPU提出比较匹配中断请求, 该中断得以处理后,该位硬件自动清0,用户也可对其写1 清0
引入
• 先回顾学习51单片机时,定时器的中断 如何产生的?
第8章 定时/计数器实例解析
• 本章重点: • 1.了解AVR定时/计数器的特点 • 2.学会对定时/计数器的相关寄存器进行配置 • 3. 掌握AVR定时/计数器的工作模式 • 本章难点: • 掌握定时/计数器的PWM模式,T/C1的输入
捕捉功能
PORTB|=(1<<PB0); // PB0配置为 ,PB0 上拉电阻
}
/********定时器0初始化函数********/
void timer0_init()
{
SREG = 0x80; //使能全局中断
TIMSK|=(1<<TOIE0); //使能T0溢出中断
TCCR0|=
; //T/C0工作于普通模式,上升沿触发
实例解析1—T/C0计数实验
使用T/C0进行计数,T0(PB0)为外部计数输入端,每计一 次,PA口所接的八个LED灯状态改变一次。
设计思路:设置TCNT1的初值为0XFF,当有外部计数信 号输入时,计数值加1,产生溢出中断,进入T/C0溢出中断函 数,在溢出中断函数中,使PA口取反,LED灯状态改变一次。
定时计数器的应用

avr单片机实现日历时间差计算

avr单片机实现日历时间差计算

avr单片机实现日历时间差计算要实现日历时间差的计算,您可以使用avr单片机的定时器功能来记录起始时间和结束时间,然后通过计算得出时间差。

以下是一个简单的示例代码,可以在avr单片机上实现日历时间差的计算:```c#include <avr/io.h>#include <avr/interrupt.h>volatile uint32_t start_time, end_time;// 定时器初始化函数void timer_init() {// 使用CTC模式,计数器清零时产生比较中断TCCR1B |= (1 << WGM12);// 设置预分频系数为256TCCR1B |= (1 << CS12);// 设置比较值为62500,产生1秒的定时中断OCR1A = 62500;// 开启比较A中断TIMSK1 |= (1 << OCIE1A);// 开启全局中断sei();}// 比较A中断服务函数ISR(TIMER1_COMPA_vect) {// 递增时间戳start_time++;}// 获取当前时间戳uint32_t get_current_time() {uint32_t current_time;// 关闭定时器中断cli();// 获取当前时间戳current_time = start_time;// 开启定时器中断sei();return current_time;}int main() {// 初始化定时器timer_init();// 设置起始时间start_time = 0;// 假设延时一段时间后,获取结束时间_delay_ms(5000);end_time = get_current_time();// 计算时间差uint32_t time_diff = end_time - start_time;// 将时间差转换为日、时、分、秒等形式uint32_t days = time_diff / 86400;uint32_t hours = (time_diff % 86400) / 3600;uint32_t minutes = (time_diff % 3600) / 60;uint32_t seconds = time_diff % 60;// 输出时间差// TODO: 根据实际情况选择输出方式,如串口、LCD等while (1) {// 程序主循环}return 0;}```上述代码中,使用avr单片机的定时器1来计时,每1秒产生一次比较中断。

AVR定时计数器1的控制寄存器说明

AVR定时计数器1的控制寄存器说明

AVR定时计数器1的控制寄存器说明16位的T/C 可以实现精确的程序定时( 事件管理) 、波形产生和信号测量。

其主要特点如下●真正的16位设计( 即允许16位的PWM)● 2 个独立的输出比较单元●双缓冲的输出比较寄存器●一个输入捕捉单元●输入捕捉噪声抑制器●比较匹配发生时清除寄存器( 自动重载)●无干扰脉冲,相位正确的PWM●可变的PWM 周期●频率发生器●外部事件计数器● 4 个独立的中断源(TOV1 、OCF1A 、OCF1B与ICF1)1.T/C1 控制寄存器-TCCR1A、TCCR1BBit 7:6 –COM1A1:0: 通道A 的比较输出模式Bit 5:4 –COM1B1:0: 通道B 的比较输出模式COM1A1:0 与COM1B1:0 分别控制OC1A 与OC1B 状态。

如果COM1A1:0 (COM1B1:0 )的一位或两位被写入"1”,OC1A( OC1B) 输出功能将取代I/O 端口功能。

此时OC1A(OC1B)相应的输出引脚数据方向控制必须置位以使能输出驱动器。

OC1A(OC1B) 与物理引脚相连时,COM1x1:0 的功能由WGM13:0的设置决定。

下表给出当WGM13:0设置为普通模式与CTC模式( 非PWM) 时COM1x1:0 的功能定义。

比较输出模式,非PWMWGM13:0设置为快速PWM 模式时COM1x1:0 的功能定义。

比较输出模式,快速PWM比较输出模式,相位修正及相频修正PWM 模式Bit 3 –FOC1A: 通道A 强制输出比较Bit 2 –FOC1B: 通道B 强制输出比较FOC1A/FOC1B 只有当WGM13:0指定为非PWM模式时被激活。

为与未来器件兼容,工作在PWM 模式下对TCCR1A写入时,这两位必须清零。

当FOC1A/FOC1B 位置1 ,立即强制波形产生单元进行比较匹配。

COM1x1:0 的设置改变OC1A/OC1B 的输出。

AVR单片机定时-计数器的PWM功能设计

AVR单片机定时-计数器的PWM功能设计

AVR单⽚机定时-计数器的PWM功能设计#includevoid main(void){TCCR0A=0b10000001; //升序⽐较匹配时OC0A=0,降序时⽐较匹配时置OC0A=1,TOP固定等于255TCCR0B=0b00000101; //时钟=1024分频,⼀旦设定时钟,TCNT0就开始不断的计数OCR0A =123; //⽐较设定值,数字越⼤,PD6输出1的占空⽐越⼤DDRD.6=1; //端⼝⽅向设置为输出才有效while (1);}#includevoid main(void){TCCR0A=0b10000011; //⽐较匹配时OC0A=0,计数到⽐较值时OC0A=1,TOP固定等于255TCCR0B=0b00000101; //时钟=1024分频OCR0A =123; //⽐较设定值,数字越⼤,PD6输出1的占空⽐越⼤DDRD.6=1; //端⼝⽅向设置为输出才有效while (1);}名词解释:TOP计数器(TCNT0)由0开始不断的作+1计数,计数到最⼤值时,计数器⼜返回到0开始作+1计数(单斜率),如此循环;计数器(TCNT0)由0开始不断的作+1计数,计数到最⼤值时就开始作-1计数,计数到0时⼜开始不断的作+1计数(双斜率),如此循环;这个最⼤值就是TOP(TOP可以为固定值255,也可以是OCR0A的值)由于TCNT0 是⼀个计数器,⼀旦时钟设定,它就会不断的计数(倒数),这样TCNT0 和OCR0A(OCR0B)就会有相等的时候,相等时就是⽐较匹配。

上⾯的2个例⼦中,由于TOP是固定的255,所以要调节PWM频率只能通过调节时钟分频来实现。

可以看出来,如果上⾯的2个例⼦中TOP相同、时钟相同,那么快速PWM的频率⽐相位修正PWM的频率⾼⼀倍,⽽占空⽐的分辩率却刚好相反。

下⾯的例⼦是⼀个“真正的快速PWM”,它除了改变T/C时钟可以改变PWM的频率以外,还可以改变TOP的值(OCR0A)的值来改变PWM的频率,但是它只能是由OC0B输出,不能由OC0A输出,因为这时寄存器OCR0A的值就是TOP的值(计数最⾼值)。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

单片机的定时器/计数器实质就是一个加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 引脚上产生波形。

小企鹅diy科学探究学习网
更多相关文章转到: /wqb_lmkj/blog 文章分类下的单片机。

相关文档
最新文档