×
单片机 > 单片机程序设计 > 详情

ATMEGA128定时器1的使用

发布时间:2020-06-04 发布时间:
|

//环境: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();  

}




『本文转载自网络,版权归原作者所有,如有侵权请联系删除』

热门文章 更多
8051单片机的函数发生器的设计