tag 标签: avr+timer0

相关博文
  • 热度 8
    2011-11-24 22:31
    1237 次阅读|
    0 个评论
    //----------------------------------------------------------------- //说明:定时1秒轮循数码管的七段 定时器0查询方式 //time:2011-11-24 22:19 //********************************************************************/ #define F_CPU  4000000UL #include #include #define INT8U   unsigned char #define INT16U  unsigned int INT8U i,j,temp; void Timer_Init() {  DDRC = 0Xff;  TCCR0 = 0X05;                             //预分频1024  TCNT0 = 256-F_CPU/1024.0*0.05;     //0.05秒定时    } //主函数 int main(void) {    DDRC=0xff;  PORTC = 0X01;                        //初始使a段数码管亮  temp = PORTC;  Timer_Init();     while(1)     {   while(!(TIFR_BV(TOV0)));         //等待标志位置位   TIFR = _BV(TOV0);      //软件对TOV0进行写1 清除标志位   TCNT0 = 256-F_CPU/1024.0*0.05;    //重装定时器初值   j++;   if(j==20)   {    j=0;    i++;    if(i==7) i=0;    PORTC = tempi;  }       } }  /**************每天成长一点点,一棵小草也能长成参天大树*******************/
  • 热度 9
    2011-11-22 21:03
    4157 次阅读|
    1 个评论
    //这里写的是定时器0的普通溢出中断工作方式,一中断的方式控制LED灯1秒闪烁 // //----------------------------------------------------------------- //  名称: 定时器0控制单只LED闪烁 //----------------------------------------------------------------- //  说明: LED在T0定时器溢出中断控制下不断闪烁 //                //----------------------------------------------------------------- #define F_CPU  4000000UL #include #include #define INT8U   unsigned char #define INT16U  unsigned int #define LED_BLINK() (PORTC ^= 0x01)           //LED闪烁 INT16U T_Count = 0;                           //用于延时累加的变量 //定时器初始化 void Timer_Init() {  DDRC = 0X01;  TCCR0 = 0X05;                             //预分频1024  TCNT0 = 256-F_CPU/1024.0*0.05;     //0.05秒定时  TIMSK = 0X01;                             //使能T0中断  sei();                                    //开中断     } //----------------------------------------------------------------- // 主程序 //----------------------------------------------------------------- int main() {  Timer_Init();  while(1);    } //----------------------------------------------------------------- // T0定时器溢出中断服务程序 //----------------------------------------------------------------- ISR (TIMER0_OVF_vect) {  TCNT0 = 256-F_CPU/1024.0*0.05;       //重新赋初值  T_Count++;  if( T_Count=20)//1 s 定时  {   T_Count = 0;   LED_BLINK();  }                           //LED闪烁 }   每天成长一点点,一棵小草也能成长为参天大树/