我想问下,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;
}
|