股票

MEGA48定时器初始化(8位T/C2)

初始化函数:

  1. #include<mega48.h>
  2. unsigned int systick_1ms = 0;
  3. void Time2Init(void//5ms
  4. {
  5.     TCCR2A |= 2;    // WGM22=0, WGM21=1, WGM20=0, CTC model
  6.     OCR2A = 47;     // Top = 47, Freq = clk/256/47
  7.     TCCR2B |= 6;    // WGM22=0, CS22=1, CS21=1, CS20=0, clk/256
  8.     TIMSK2 = 2;     // enable TIM2_COMPA
  9.     #asm(“sei”)     // open interrupt
  10. }
  11. interrupt [TIM2_COMPA] void timer2_copa_isr(void)
  12. {
  13.     static unsigned char a =0;
  14.     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]。

打赏
原文链接:,转发请注明来源!

发表评论