AVR单片机T/C1的几种工作模式(16位) 其作用: l 普通模式 l CTC模式 l 快速PWM模式 l 相位修正PWM模式 l 相位频率修正PWM模式 l 输入捕获模式 一、中断系统 #pragma interrupt handler <name>: <vector number> Name:中断函数名,自定义。 vector number:中断向量号。 如:定时器1溢出中断编程 #pragma interrupt handler miao: 9 二、T/C1相关的寄存器 1、T/C1控制寄存器A 2、T/C1控制寄存器B 3、T/C1中断屏蔽寄存器 注:使用中断时必须先开启总中断SREG|=BIT(7) 4、计数寄存器 5、输出比较寄存器 6、输出比较寄存器1B-OCR1B 7、输入捕捉寄存器ICR1H ICR 三、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; TCNT TIMSK|=BIT(2); SREG|=BIT(7); l CTC模式(利用PD4、PD5的第二功能) 用于输出50%占空比的方波信号 用于产生准确的连续定时信号
编程方法:定义CTC模式,选择WGM13:12:11:10 模式选择位,上限值可固定可定义,如定义OCR1A。 在TCCR1A选择比较输出模式COM1A1:0=0:1 (确定是CTC)比较匹配是电平取反,输出50%占空比。 频率由以下公式确定:
,从输出多少HZ方波来确定上限值OCR1A 。 void main() //此程序是编输出2000HZ的方波 { DDRD|=0X30; TCCR TCCR1B=0X09; OCR 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; TCCR TCCR1B=0X1B; OCR OCR1B=250; //占空比为20%,既PD4输出高电平持续2MS。 } l 相位修正PWM模式 其作用跟PWM模式差不多,选择WGM13:12:11:10 模式选择位。 l 输入捕获模式 T/C 的输入捕捉单元可用来捕获外部事件,并为其赋予时间标记以说明此时间的发生时刻。 外部事件发生的触发信号由引脚ICP1 输入,也可通过模拟比较器单元来实现。 时间标记可用来计算频率、占空比及信号的其它特征,以及为事件创建日志。
|
|