ATmega16 定时计数器器应用

这里使用ATmega16完成溢出中断功能

1、初始化定时器参数

// Timer/Counter 0 initialization
// Clock source: System Clock
// Clock value: Timer 0 Stopped
// Mode: Normal top=0xFF
// OC0 output: Disconnected
TCCR0=(0<<WGM00) | (0<<COM01) | (0<<COM00) | (0<<WGM01) | (0<<CS02) | (1<<CS01) | (0<<CS00); //设置分频
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<<OCIE2) | (0<<TOIE2) | (0<<TICIE1) | (0<<OCIE1A) | (0<<OCIE1B) | (0<<TOIE1) | (0<<OCIE0) | (1<<TOIE0);
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;   //灯闪烁
  }

}
 

 

 

  • 0
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值