初始化函数:
- #include<mega48.h>
- unsigned int systick_1ms = 0;
- void Time2Init(void) //5ms
- {
- TCCR2A |= 2; // WGM22=0, WGM21=1, WGM20=0, CTC model
- OCR2A = 47; // Top = 47, Freq = clk/256/47
- TCCR2B |= 6; // WGM22=0, CS22=1, CS21=1, CS20=0, clk/256
- TIMSK2 = 2; // enable TIM2_COMPA
- #asm(“sei”) // open interrupt
- }
- interrupt [TIM2_COMPA] void timer2_copa_isr(void)
- {
- static unsigned char a =0;
- systick_1ms++;
之前mega16/32用的比较多,mega48还是第一次接触。很多寄存器名字都有了轻微的改变,比如 TIMSK 改成TIMSK1/2 ,OCR1A/B等16位寄存器被改成了高低两个OCR1AH/L,不过查查datasheet总能解决。有个问题要注意下,#asm(“sei”)全局中断必须打开,不然不工作的,在TIMSK2的使能描述里面写着,“当OCIE2A和状态寄存器的全局中断使能位都为“1”时,T/C2的输出比较匹配A中断使能”。
中断函数中注意对应关系,开了OCIE2A时,就要用[TIM2_COMPA]。