打印
[AVR单片机]

Atmega16-T定时器的CTC模式

[复制链接]
977|1
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
234105664|  楼主 | 2015-9-5 18:52 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
我想问下,T1定时器工作于CTC模式12时,他的TOP值由ICR1的值决定,当TCNT1值达到TOP值时候,就发生比较匹配成功,置位ICF1中断标志位,TCNT1计数器清零。那我想问下,这时候T1为什么没有置位ICFI呢,也就没进入捕捉那个中断.(相应中断控制位都已经打开)TCNT1这时候时钟是匹配到OCR1A后清零,但是我设置的模式WGM13:WGM12=11;这个模式数据手册上讲的是TCNTI累加到ICR1后清零的。

为什么我的总是在TCNTI达到OCR1A后清零呢?????


#include<iom16v.h>
#include<macros.h>
void main(void)
{
DDRD=0XFF;
PORTD=0Xff;
OCR1A = 1800;  
OCR1B =1300;       
//T/C1普通模式设置
  TCCR1A |= (1 << COM1A0)|(1 << COM1B0);      //T/C1不分频,频率1MHz 比较匹配时,OC1A/OC1B电平取反
  TCCR1B |=(1<<WGM13)|(1<<WGM12)|(1 << CS10); // T/C1工作于CTC模式12,不分频,频率1MHz
      
  TIMSK|=(1<<OCIE1A)|(1<<OCIE1B)|(1<<TOIE1)|(1<<TICIE1);//比较匹配A和B中断使能 捕捉中断使能 溢出中断使能
  ICR1=1200;//赋值TOP为1200
  SREG|=BIT(7);//打开总中断

while(1);
}
#pragma interrupt_handler TIMER1_CAPT: 6//定时/计数器1 捕捉
void TIMER1_CAPT(void)
{
PORTC=0XAA;
}
#pragma interrupt_handler TIMER1_COMPA: 7//定时/计数器1 比较匹配A中断向量号
void TIMER1_COMPA(void)
{
PORTC=0XBB;
}
#pragma interrupt_handler TIMER1_COMPB: 8//定时/计数器1 比较匹配B中断向量号
void TIMER1_COMPB(void)
{
PORTC=0XCC;
}
#pragma interrupt_handler timer1: 9//定时/计数器1 溢出中断向量号
void timer1(void)
{
PORTC=0XDD;
}



相关帖子

沙发
SD10A| | 2015-9-8 12:17 | 只看该作者
OCR1A = 1800;  
OCR1B =1300;   
这个有什么作用??
只保留中断6就可以了
  你再试验下

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

3

主题

15

帖子

0

粉丝