锐单电子商城 , 一站式电子元器件采购平台!
  • 电话:400-990-0325

avr单片机8位定时器LED精确1秒闪烁程序

时间:2024-05-05 04:07:10

/*
程序名 (program name): 定时器程序 (LED精确一秒闪烁)

芯片名(chip name): 艾特梅尔公司 16A 芯片;

概述: 利用8位定时器0 完成精确定时,其中,定时器0溢出 重设初始值和溢出位清零很重要,
一旦定时器溢出,溢出标志位不会自动清零,注意!此时需要向定时器0溢出标志位位TOV0
写"1",它就会自动清零;TOV0在FR寄存器的末位,溢出位不能位寻址(不能位操作);

完成(finish time) : 2014年2月28日13:50:14
噢 ,,,'主码' 时间了,,,

*/

#include
#include //中断头文件..

typedef unsigned char uint8;
typedef unsigned int uint16;


io() //初始化所有IO口函数;
{
A=0Xff;
PORTA=0Xff;

DDRB=0XFF;
PORTB=0X00;

DDRC=0XFF;
PORTC=0X00;

DDRD=0XFF;
PORTD=0XFF;


}

mcu() //
{

TC0=0x6A;//定时器初始值寄存器,设置 初始值 (此寄存器的值自增到255再加一就是0了);
TCCR0=0x02;//定时器0分频设置寄存器 定时器8分频.

//定时器公式: 256 - (12兆(机器频率) ÷ 分频) X (溢出时间) =初始值;

}

int main(void)

{
uint16 i=0,j=0;

io(); //初始化所有io口;
mcu(); //设置定时器分频和初始值;


PORTB=0X04; //LED共阳极使能;
while(1)
{

if((TIFR&0X01)==1) //如果定时器溢出;
{
j++;

TCNT0=0x6a; //重设初始值,溢出时间是0.0001秒;
TIFR|=0X01; //!!!!!!!!!这个很重要,一定要将溢出位置一,它就会自己清零;
}

if(j ==9932)//溢出一次用时100微妙,变量j加一,加一万次用时1秒,捕捉到
{ //PA口跳变时间有一点误差,稍作调整,,
j=0;
PORTA^=0XFF;

}


}


}


-电子元器件采购网(www.ruidan.com)是本土元器件目录分销商,采用“小批量、现货、样品”销售模式,致力于满足客户多型号、高质量、快速交付的采购需求。 自建高效智能仓储,拥有自营库存超过50,000种,提供一站式正品现货采购、个性化解决方案、选型替代等多元化服务。
锐单商城拥有海量元器件数据手册IC替代型号,打造电子元器件IC百科大全!

相关文章