您的位置 首页 汽车

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

*程序名(programname):定时器程序(LED精确一秒闪烁)芯片名(chipname):艾特梅尔公司MEGA16A芯片;概述:利用8位定时器0

/*

程序名 (programname): 守时器程序 (LED准确一秒闪耀)

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

概述: 使用8位守时器0 完结准确守时,其间,守时器0溢出 重设初始值和溢出位清零很重要,
一旦守时器溢出,溢出标志位不会主动清零,留意!此刻需要向守时器0溢出标志位位TOV0
写”1″,它就会主动清零;TOV0在TIFR寄存器的末位,溢出位不能位寻址(不能位操作);

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

*/

#include <avr/io.h>
#include interrupt.h> //中止头文件..

typedef unsigned char uint8;
typedef unsigned int uint16;

io() //初始化一切IO口函数;
{
DDRA=0Xff;
PORTA=0Xff;

DDRB=0XFF;
PORTB=0X00;

DDRC=0XFF;
PORTC=0X00;

DDRD=0XFF;
PORTD=0XFF;

}

mcu() //
{

TCNT0=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;

}

}

}

声明:本文内容来自网络转载或用户投稿,文章版权归原作者和原出处所有。文中观点,不代表本站立场。若有侵权请联系本站删除(kf@86ic.com)https://www.86ic.net/qiche/317523.html

为您推荐

联系我们

联系我们

在线咨询: QQ交谈

邮箱: kf@86ic.com

关注微信
微信扫一扫关注我们

微信扫一扫关注我们

返回顶部