joecongmin的笔记 https://bbs.21ic.com/?473596 [收藏] [复制] [RSS]

日志

AVR应用笔记二(定时器0溢出中断)

已有 2056 次阅读2010-4-8 00:32 |系统分类:单片机| avr

//---------------------------------------------------------------------
//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;
 }
}
 


路过

鸡蛋

鲜花

握手

雷人

发表评论 评论 (1 个评论)

回复 wooemc 2010-9-10 01:17
专业电感制造厂商,欢迎垂询! QQ:1377739080 Http://www.woemc.com