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

Atmega16的定时器1使用

发布时间:2020-08-24 发布时间:
|
//经验正以下程序是正确的,可以实现LED 1s亮 1s灭

#include
#include
#define uchar unsigned char
#define uint unsigned int
uint count;
void init()
{
 DDRB|=_BV(PB4)|_BV(PB5)|_BV(PB6)|_BV(PB7);
 PORTB&=~(_BV(PB4)|_BV(PB5)|_BV(PB6)|_BV(PB7));
 //TCNT0=155;//初值为55,即记数到255-155=100次溢出并进入定时器0中断函数
 TCNT1H=(65536-10000)/256;//记数到10000次溢出并进入定时器1中断函数
 TCNT1L=(65536-10000)%256;
 TIMSK|=_BV(TOIE1);//溢出中断使能,相当与52的ETO=1;
 sei();//开总中断
 TCCR1B|=_BV(CS11);//8分频,并启动定时器1,8M晶振经过8分频后以1M的速度来记数,即每过1us记数一次,记数10000次则为10ms,即10ms进入一次定时器1中断函数

}
int main()
{
 init();
 while(1);
}

SIGNAL(SIG_OVERFLOW1)//定时器1中断服务函数,实现LED 1s亮 1s灭
{
 TCNT1H=(65536-10000)/256;//记数到10000次溢出并进入定时器1中断函数
 TCNT1L=(65536-10000)%256;
 count++;
 if(count>=100)
 {
  count=0;
  PORTB^=_BV(PB4);//取反
 }
}



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

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