单片机交流
直播中

刘桂英

7年用户 1170经验值
私信 关注
[问答]

如何使用ATmega16完成溢出中断功能?

如何使用ATmega16完成溢出中断功能?

回帖(1)

宁晓蕾

2021-11-2 11:46:06
这里使用ATmega16完成溢出中断功能
1、初始化定时器参数
// Timer/Counter 0 initialization
// Clock source: System Clock
// Clock value: Timer 0 Stopped
// Mode: Normal top=0xFF
// OC0 output: Disconnected
TCCR0=(0<
TCNT0=0x37; //设置初值
OCR0=0x00;





预设频率16MHz,这里选择010,8分之一分频,2MHz,时钟周期0.5us,产生一个100us的时钟周期需要200个周期,所以时间t=(255-55)*0.5,所以初值TCNT0=0x37; //设置初值
2、设置时钟使能
// Timer(s)/Counter(s) Interrupt(s) initialization
TIMSK=(0<
3、打开全局使能
// Global enable interrupts
#asm("sei")
4、写入中断程序
// Declare your global variables here
volatile unsigned int cnt=0;
// Timer 0 overflow interrupt service routine
interrupt [TIM0_OVF] void timer0_ovf_isr(void)
{
// Place your code here
     TCNT0=0x37;   //重新赋予初值
     cnt++;                 //计数
  if(cnt>=1000)  
  {
      cnt=0;                //重新开始计数
      PORTB^=0xff;   //灯闪烁
  }
}


举报

更多回帖

×
20
完善资料,
赚取积分