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

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

发布时间:2020-06-02 发布时间:
|
/*

      程序名 (program name): 定时器程序 (LED精确一秒闪烁)

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

     概述:   利用8位定时器0 完成精确定时,其中,定时器0溢出 重设初始值和溢出位清零很重要,
     一旦定时器溢出,溢出标志位不会自动清零,注意!此时需要向定时器0溢出标志位位TOV0
 写"1",它就会自动清零;TOV0在TIFR寄存器的末位,溢出位不能位寻址(不能位操作);   
   
完成(finish time) : 2014年2月28日13:50:14
 噢 ,,,'主码' 时间了,,,
            

*/

#include
#include     //中断头文件..

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; 

 }


}


}

关键字:avr单片机  8位定时器  LED 

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

热门文章 更多
C51 特殊功能寄存器SFR的名称和地址