//这里写的是定时器0的普通溢出中断工作方式,一中断的方式控制LED灯1秒闪烁//
//-----------------------------------------------------------------
// 名称: 定时器0控制单只LED闪烁
//-----------------------------------------------------------------
// 说明: LED在T0定时器溢出中断控制下不断闪烁
//
//-----------------------------------------------------------------
#define F_CPU 4000000UL
#include
#include
#define INT8U unsigned char
#define INT16U unsigned int
#define LED_BLINK() (PORTC ^= 0x01) //LED闪烁
INT16U T_Count = 0; //用于延时累加的变量
//定时器初始化
void Timer_Init()
{
DDRC = 0X01;
TCCR0 = 0X05; //预分频1024
TCNT0 = 256-F_CPU/1024.0*0.05; //0.05秒定时
TIMSK = 0X01; //使能T0中断
sei(); //开中断
}
//-----------------------------------------------------------------
// 主程序
//-----------------------------------------------------------------
int main()
{
Timer_Init();
while(1);
}
//-----------------------------------------------------------------
// T0定时器溢出中断服务程序
//-----------------------------------------------------------------
ISR (TIMER0_OVF_vect)
{
TCNT0 = 256-F_CPU/1024.0*0.05; //重新赋初值
T_Count++;
if( T_Count>=20)//1 s 定时
{
T_Count = 0;
LED_BLINK();
}
//LED闪烁
}
每天成长一点点,一棵小草也能成长为参天大树/
用户377235 2012-11-15 20:56