//---------------------------------------------------------------------
//Copyright(c) 博控设计joecongmin 2010 All righr reserved
//文件名:timer0_test1.c
//文件描述:用定时器1完成100US定时,一秒钟到后取反PC1口
//外接的LED灯,实现LED灯的闪烁。
//实验目的:学习AVR 单片机的定时器0用作定时器用的方法
//当前版本号:V1.0
//完成时间:2010-4-7 13:02:45
//修改记录:
//修改时间:
/起草时间:2010-4-7 8:45:01
//--------------------------------------------------------------------
//----------------------------start------------------------------------
#include"iom88v.h"
#define uint16 unsigned int
#define uchar unsigned char
void delay (uint16 i);
void flash_led(void);
void timer0_init(void);
uchar timer_cnt = 0;//定时器1计数个数
void main(void)
{
DDRC |= 0x02; //PC1 output
timer0_init();
while(1)
{
//flash_led();
}
}
//-------------------------------------------------------------------
//函数原型:void delay (uint16 i);
//入口参数:uint16 i:延时变量
//出口参数:无
//功能:实现延时功能
//-------------------------------------------------------------------
void delay (uint16 i)
{
uchar j;
while(i--)
{
for(j=125;j>0;--j)
{
;
}
}
}
//--------------------------------------------------------------------
//
//功能:非定时下实现LED灯的闪烁
//--------------------------------------------------------------------
void flash_led(void)
{
PORTC |= 0x02; //PC1 = 1;
delay(3000);//
PORTC &= 0xfd; //PC1 = 0;
delay(3000);//
}
/*-----------------------------------------------------------------
函数名称: void timer0_init(void)
函数功能: 定时器0初始化 256预分频 定时一秒
参 数:
返 回 值: 无
-----------------------------------------------------------------*/
void timer0_init(void)
{
TCCR0A &= 0xfc; //11111100
TCCR0B = 0x05; //1024分频
SREG |= 0x80; //全局中断使能
TIMSK0 =0x01; // 定时器0溢出中断使能
}
//--------------------------------------------------------------------
//
//
//定时器0中断服务子程序,工作在普通计数模式1024分频,初值为0每256拍溢出
//中断频率 8000000/1024/256 =30.5HZ
//-------------------------------------------------------------------
#pragma interrupt_handler timer0_ovf_isr:17
void timer0_ovf_isr(void)
{
timer_cnt++;
if(timer_cnt>=15)//30.5HZ 15分频 =2HZ即亮0.5秒灭0.5秒
{
timer_cnt = 0;
if((PORTC &= 0x02)==0x02)
PORTC &= 0xfd; //PC1 = 0;
else
PORTC |= 0x02;
}
}