当前位置:首页 > 单片机 > 单片机
[导读]//环境:winavr+avr studiochar temp=0;ISR(TIMER1_COMPA_vect )//中断函数{ // user code here temp++; if (temp==10) temp=0; PORTA=temp; DDRA=0xff;}void mytimer_init(void){ //关总中断 cli(); //TCCR1A为配置引

//环境:winavr+avr studio

char temp=0;

ISR(TIMER1_COMPA_vect )//中断函数
{
// user code here
temp++;
if (temp==10)
temp=0;
PORTA=temp;
DDRA=0xff;
}



void mytimer_init(void)
{
//关总中断
cli();
//TCCR1A为配置引脚输出模式,这里取默认为0,未连接即可,因此不需要为其赋值
//T/C1时钟源选择为clk/64,CLK现为内部晶振4MHZ,因此时钟为4,000,000/64 HZ = 62500 HZ
TCCR1B &= ~0x07;
TCCR1B |= 0x03;
//选择模式 WGM10~WGM13
TCCR1A &= ~0x03;
TCCR1B &= ~(0x03<<3);//模式4 CTC
TCCR1B |= 0x01<<3;
//赋值定时初值 16位
TCNT1=0;
//赋值比较寄存器TOP初值 16位 ,在以上工作模式下,当TCNT1=OCR1A时,TCNT1自动清0
OCR1A = 62500;//一秒中断一次

//使能定时器T/C1溢出中断,T/C1的其它中断屏蔽掉
TIMSK &= ~(0xf0<<2);
TIMSK |= (0x01<<4);
ETIMSK &= ~0x01;
//清中断溢出标志位,进入中断后也会自动清除,以后不用再清了
TIFR |= 1<<2;
//启动定时器
SFIOR &= 0x7e;
//开总中断
sei();

}


本站声明: 本文章由作者或相关机构授权发布,目的在于传递更多信息,并不代表本站赞同其观点,本站亦不保证或承诺内容真实性等。需要转载请联系该专栏作者,如若文章内容侵犯您的权益,请及时联系本站删除( 邮箱:macysun@21ic.com )。
换一批
延伸阅读
关闭