魔兽热血传奇ol1.6单刷:AVR单片机T/C1的几种工作模式

来源:百度文库 编辑:九乡新闻网 时间:2024/04/29 15:24:13

AVR单片机T/C1的几种工作模式(16位)

其作用:

l       普通模式

l       CTC模式

l       快速PWM模式

l       相位修正PWM模式

l       相位频率修正PWM模式

l       输入捕获模式

一、中断系统

#pragma interrupt handler :

Name:中断函数名,自定义。

vector number:中断向量号。

如:定时器1溢出中断编程 #pragma interrupt handler miao: 9

 

二、T/C1相关的寄存器

    1T/C1控制寄存器A

    2T/C1控制寄存器B 

3T/C1中断屏蔽寄存器

注:使用中断时必须先开启总中断SREG|=BIT(7)

4、计数寄存器

5、输出比较寄存器1A-OCR1A

6、输出比较寄存器1B-OCR1B

7、输入捕捉寄存器ICR1H ICR1L

三、T/C1相关的模式

l       普通模式(中断定时) 编程方法:在TCCR1B选择 CS12:11:10 的分频器 如:256分频, 8M/256=31250,芯片执行一句指令需要时间1/31250 S,所以从65535-31250=34285到65535溢出时间为1S。34285十六进制为85ED,在计数寄存器TCNT1H=0X85、TCNT1L=0XED(注:编程时先写高位,再写低位;而执行程序是先读低位再高位)。中断寄存器设置:TIMSK|=BIT(2)即其第二位置1;SREG|=BIT(7)。

TCCR1B=0X04;

    TCNT1H=0X85;

    TCNT1L=0XED;

    TIMSK|=BIT(2);

    SREG|=BIT(7);

l       CTC模式(利用PD4、PD5的第二功能)

用于输出50%占空比的方波信号

 用于产生准确的连续定时信号

 

 

 

 

编程方法:定义CTC模式,选择WGM13:12:11:10 模式选择位,上限值可固定可定义,如定义OCR1A。

在TCCR1A选择比较输出模式COM1A1:0=0:1 (确定是CTC)比较匹配是电平取反,输出50%占空比。

频率由以下公式确定: 变量N 代表预分频因子(1、8、32,64、256,1024)

,从输出多少HZ方波来确定上限值OCR1A 。  void main()  //此程序是编输出2000HZ的方波

{  DDRD|=0X30;

                                                 TCCR1A=0X50;// COM1A1:0=1

                                                 TCCR1B=0X09;

                                                 OCR1A=1999; }

l       快速PWM模式(利用PD4、PD5的第二功能)

其作用跟CTC模式差不多,选择WGM13:12:11:10 模式选择位,只是其可以改变PWM信号占空比,(注:COMnx1:0=2或3已定)  计算公式:fPWM=fclk_IO/(N*(1+TOP)) 变量N 代表预分频因子(1、8、32,64、256,1024) TOP可固定,可由OCR1A定值,占空比由OCR1B定(注:因为OCR1A被保存数据就不能由它来实现PWM信号,由OCR1B实现)

void main()//PD4PD4输出高电平持续2MS,PD5输出占空比为50%,因为其COMnx1:0=1。

{ DDRD|=0X30;

TCCR1A=0X63;

    TCCR1B=0X1B;

    OCR1A=1249;//产生10MS的PWM信号,保存上限值,但不能输出PWM信号

    OCR1B=250; //占空比为20%,既PD4输出高电平持续2MS。

}

l       相位修正PWM模式

其作用跟PWM模式差不多,选择WGM13:12:11:10 模式选择位。

 

l       输入捕获模式

T/C 的输入捕捉单元可用来捕获外部事件,并为其赋予时间标记以说明此时间的发生时刻。

外部事件发生的触发信号由引脚ICP1 输入,也可通过模拟比较器单元来实现。

时间标记可用来计算频率、占空比及信号的其它特征,以及为事件创建日志。