<meter id="pryje"><nav id="pryje"><delect id="pryje"></delect></nav></meter>
          <label id="pryje"></label>

          新聞中心

          EEPW首頁 > 嵌入式系統(tǒng) > 設(shè)計(jì)應(yīng)用 > avr定時(shí)器T0,T1,T2初始化配置及其說明

          avr定時(shí)器T0,T1,T2初始化配置及其說明

          作者: 時(shí)間:2016-11-18 來源:網(wǎng)絡(luò) 收藏
          #include

          #include

          本文引用地址:http://www.ex-cimer.com/article/201611/315757.htm

          unsigned char shi,fen,miao;
          unsigned char t=0;
          #define DATA_T0_INIT 156
          #define DATA_T1_INIT 31249
          #define DATA_T2_INIT 156
          unsigned int T0_CAPT=0;
          //T0/C0溢出中斷向量端口
          #pragma interrupt_handler Timer0_over:iv_TIMER0_OVF
          //T0/C0比較匹配中斷向量端口
          #pragma interrupt_handler Timer0_COMP:iv_TIMER0_COMP
          //T1/C1溢出中斷向量端口
          #pragma interrupt_handler Timer1_Ov:iv_TIMER1_OVF
          //T1/C1比較匹配B中斷向量端口
          #pragma interrupt_handler Timer1_COMPB:iv_TIMER1_COMPB
          //T1/C1比較匹配A中斷向量端口
          #pragma interrupt_handler Timer1_COMPA:iv_TIMER1_COMPA
          //T1/C1事件捕捉中斷向量端口
          #pragma interrupt_handler Timer1_CAPT:iv_TIMER1_CAPT
          //T2/C2溢出中斷向量端口
          #pragma interrupt_handler Timer2_OVF:iv_TIMER2_OVF
          //T2/C2比較匹配中斷向量端口
          #pragma interrupt_handler Timer2_COMP:iv_TIMER2_COMP




          /*********************************************T0定時(shí)器**************************************************************************/
          void T0_init(unsigned char a,unsigned char b)//a是0采用定時(shí)器的溢出中斷使能,是1采用比較匹配中斷使能,b為0,1,2,3,4,分別代表分頻的方式,0,8,64,256,1024
          {
          if(a==0)
          {TCNT0=255-DATA_T0_INIT;TIMSK|=0X01;//TIMSK|=0X01;溢出中斷使能,
          }
          else
          { OCR0=DATA_T0_INIT;TCNT0=0;
          TIMSK|=0X02;// TIMSK|=0X02;比較匹配中斷使能
          }
          switch(b)
          {
          case 0:TCCR0=0X01;break;//TCCR0=0X01;無預(yù)分頻
          case 1:TCCR0=0X02;break;//TCCR0=0X02;8分頻.
          case 2:TCCR0=0X03;break;//TCCR0=0X03;256分頻.
          case 3:TCCR0=0X04;break;//TCCR0=0X04;64分頻.
          case 4:TCCR0=0X05;break;//TCCR0=0X05;1024分頻.
          }
          SREG|=BIT(7); //全局中斷使能
          shi=0;fen=0;miao=0;

          }

          void Timer0_over(void)
          {TCNT0=255-DATA_T0_INIT;
          t++;
          if(t>=50){t=0;miao++;if(miao>=60){fen++;miao=0;if(fen>=60){shi++,fen=0;if(shi>=24)shi=0;fen=0;}}}
          }
          void Timer0_COMP(void)
          {TCNT0=0;
          t++;
          if(t>=50){t=0;miao++;if(miao>=60){fen++;miao=0;if(fen>=60){shi++,fen=0;if(shi>=24)shi=0;fen=0;}}}
          }



          /*********************************************T1定時(shí)器**************************************************************************/

          void Timer1_init(unsigned char a,unsigned char b)
          { //31249 是top值,8mhz 256分頻.
          TCCR1A=0x00; //普通端口操作
          SREG|=0x80; //開放全局中斷
          if(a==1)
          {TCNT1=DATA_T1_INIT;}
          else{TCNT1=0;}
          switch(a)
          {
          case 0:TCCR1B|=0X01;break;//TCCR1B=0X01;無預(yù)分頻
          case 1:TCCR1B|=0X02;break;//TCCR1B=0X02;8分頻.
          case 2:TCCR1B|=0X03;break;//TCCR1B=0X04;64分頻.
          case 3:TCCR1B|=0X04;break;//TCCR1B=0X03;256分頻.
          case 4:TCCR1B|=0X05;break;//TCCR1B=0X05;1024分頻.
          }
          switch(b)
          {
          case 1:TIMSK|=0x04;break;//T1溢出中斷使能
          case 2:OCR1B=DATA_T1_INIT;TIMSK|=0x08;break;//T1比較匹配B中斷使能
          case 3:OCR1A=DATA_T1_INIT;TIMSK|=0x10;break;//T1比較匹配A中斷使能
          case 4:TCCR1B|=0x80;//ICNC1:1使能噪聲捕捉功能
          TCCR1B|=0x40;//噪聲捕捉事件的觸發(fā)方式 ICES1:0下降沿。1上升沿,
          TIMSK|=0x20;break;//T1事件捕捉中斷使能
          }

          }
          void Timer1_Ov(void)
          { t++;
          TCNT1=DATA_T1_INIT; //計(jì)數(shù)值裝入寄存器 T= 0.125uS*N*(1+TOP) TOP=t/(0.125*256)-1
          miao++;if(miao>=60){fen++;miao=0;if(fen>=60){shi++,fen=0;if(shi>=24)shi=0;fen=0;}}
          }
          void Timer1_COMPB()
          {TCNT1=0;
          {miao++;if(miao>=60){fen++;miao=0;if(fen>=60){shi++,fen=0;if(shi>=24)shi=0;fen=0;}}}
          }
          void Timer1_COMPA()
          { TCNT1=0;
          {miao++;if(miao>=60){fen++;miao=0;if(fen>=60){shi++,fen=0;if(shi>=24)shi=0;fen=0;}}}
          }
          void Timer1_CAPT()
          {
          T0_CAPT=ICR1;
          }
          /*********************************************T2定時(shí)器**************************************************************************/

          void Timer2_init(unsigned char a,unsigned char b)
          {
          /*TCCR2控制寄存器
          BIT7 BIT 6 BIT5 BIT4 BIT3 BIT2 BIT1 BIT0
          FOC2 WGM20 COM21 COM20 WGM21 CS22 CS21 CS20*/
          //WGM21:WGM20 0:0普通模式top=0xff
          //COM21:COM20 0:0 正常端口操作,不跟OC2相連

          ASSR=0x00;//ASSR=0x00;有IO時(shí)鐘驅(qū)動(dòng)。ASSR|=0x08;異步模式。由Pc6-Pc7之間的外接石英晶體驅(qū)動(dòng)
          /*
          ASSR控制寄存器
          bit3 bit2 bit 1 bit 0
          AS2 TCUN2UB OCR2UB TCR2UB
          TCUN2UB:異步模式:寫TCNT2時(shí)會(huì)引起 TCUN2UB置位,寫完成時(shí),TCUN2UB自動(dòng)清零,TCUN2UB=0代表TCNT2可以寫入新的數(shù)值了
          OCR2UB:異步模式:寫OCR2時(shí)會(huì)引起 OCR2UB置位,寫OCR2完成時(shí),OCR2UB自動(dòng)清零,OCR2UB=0代表OCR2可以寫入新的數(shù)值了
          TCR2UB:異步模式:寫TCCR2時(shí)會(huì)引起 TCR2UB置位,寫TCCR2完成時(shí),TCR2UB自動(dòng)清零,TCR2UB=0代表TCCR2可以寫入新的數(shù)值了


          */
          switch(a)
          {
          case 0:TCCR2|=0X01;break;//TCCR2=0X01;無預(yù)分頻
          case 1:TCCR2|=0X02;break;//TCCR2=0X02;8分頻.
          case 2:TCCR2|=0X03;break;//TCCR2=0X04;64分頻.
          case 3:TCCR2|=0X04;break;//TCCR2=0X03;256分頻.
          case 4:TCCR2|=0X05;break;//TCCR2=0X05;1024分頻.
          }
          if(b==0)
          {TCNT2=255-DATA_T2_INIT; TIMSK|=0x40;}//T2溢出中斷使能
          else {TCNT2=0;OCR2=DATA_T2_INIT;TIMSK|=0x80;}//T2比較匹配中斷使能
          }

          void Timer2_OVF()
          {TCNT2=255-DATA_T2_INIT;
          t++;
          if(t>=50){t=0;miao++;if(miao>=60){fen++;miao=0;if(fen>=60){shi++,fen=0;if(shi>=24)shi=0;fen=0;}}}

          }

          void Timer2_COMP()
          {TCNT2=0;
          t++;
          if(t>=50){t=0;miao++;if(miao>=60){fen++;miao=0;if(fen>=60){shi++,fen=0;if(shi>=24)shi=0;fen=0;}}}
          }



          關(guān)鍵詞: avr定時(shí)器初始化配

          評(píng)論


          技術(shù)專區(qū)

          關(guān)閉
          看屁屁www成人影院,亚洲人妻成人图片,亚洲精品成人午夜在线,日韩在线 欧美成人 (function(){ var bp = document.createElement('script'); var curProtocol = window.location.protocol.split(':')[0]; if (curProtocol === 'https') { bp.src = 'https://zz.bdstatic.com/linksubmit/push.js'; } else { bp.src = 'http://push.zhanzhang.baidu.com/push.js'; } var s = document.getElementsByTagName("script")[0]; s.parentNode.insertBefore(bp, s); })();