arduino的定時器功能


一直很好奇arduino的定時器是怎么工作的,最近查了一下Atmega328P的芯片資料,現已Atmega328P的Timer1定時器作為說明,控制輸出匹配引腳D9口的輸出電平。

Arduino定時器有普通模式、CTC模式、快速PWM模式、相位可調PWM模式。本文采用CTC模式,即當寄存器TCNT1與OCR1A/OCR1B相等時(即匹配),OC1A/OC1B按照COM1x[1:0]的值相應的改變(置位,清零或取反)。同時TCNT1清零,TCNT1從0x00重新開始計數,當計數結果和下一個OCR1A/OCR1B寄存器中值相等時又發生匹配。發生匹配時,匹配比較標志OCF1x置位,即OCF1x=1,可申請匹配比較中斷。本文使用OC1A(Arduino pro mini 的D9引腳)引腳作為輸出,且比較匹配時電平取反。

Arduino定時器設置步驟:1設置定時器初值,確定定時時間;2、設置定時器匹配模式;2、設置預分頻模式,與定時時間有關。下面是相關代碼。

 

 1 /*******************************************************************************
 2 ***
 3 *PROJECT CODE: 定時輸出                                                        *
 4 *CREATE DATE : 2014/11/27                                                      *
 5 *CREATED BY  :HGXH                                                             *
 6 *FUNCTION    :定時時間到后,OC1A輸出引腳電平交替變化,每隔1s                   *
 7 *MODIFY DATE :2014/11/27                                                       *
 8 *DOCUMENT    :                                                                 *
 9 *OTHERS      :CPU = 16MHZ                                                      *
10 *********************************************************************************
11 **/
12 void setup(){
13     DDRB = (1 << 1);//OC1A設置為輸出模式,OC1A引腳為PB1引腳,即Arduino pro moni D9引腳
14     OCR1A = 15624;//定時器初值周期0.5Hz OCR1A = 16000000/(2*1024*0.5) - 1 = 15624
15     TCCR1A = (0<<COM1A1) | (1<<COM1A0) | (0<<WGM11) | (0<<WGM10);//OC1A輸出電平交替變換,CTC模式
16     TCCR1B = (0<<WGM13) | (1<<WGM12) | (1<<CS12) | (0<<CS11) | (1<<CS10);//1024分頻,CS[12:10]決定分頻模式有1、8、64、256、1024幾種
17     
18 }
19 void loop()
20 {
21     
22     if((TIFR1 & 0x01) == 1)//輸出比較器A匹配后OCF1A位置1
23     OCR1A = 15624;//定時器初值
24 }

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM