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

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

发布时间:2020-08-26 发布时间:
|

简介:本文主要为关于定时器0溢出中断的程序处理。


//---------------------------------------------------------------------

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

}

}



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

热门文章 更多
AVR熔丝位操作时的要点和需要注意的相关事项