AVR單片機(學(xué)習ing)-ATMEGA16的定時(shí)/計數器
6)T/C1 中斷屏蔽寄存器- TIMSK
• Bit 5 – TICIE1: T/C1 輸入捕捉中斷使能
當該位被設為"1”,且狀態(tài)寄存器中的I 位被設為"1” 時(shí), T/C1 的輸入捕捉中斷使能。一
旦TIFR 的ICF1 置位,CPU 即開(kāi)始執行T/C1 輸入捕捉中斷服務(wù)程序( 見(jiàn)P43 “ 中斷” )。
• Bit 4 – OCIE1A: 輸出比較 A 匹配中斷使能
當該位被設為"1”,且狀態(tài)寄存器中的I 位被設為"1” 時(shí), T/C1 的輸出比較A 匹配中斷使
能。一旦TIFR 上的OCF1A 置位,CPU 即開(kāi)始執行T/C1 輸出比較A 匹配中斷服務(wù)程序。
• Bit 3 – OCIE1B: T/C1 輸出比較 B 匹配中斷使能
當該位被設為"1”,且狀態(tài)寄存器中的I 位被設為"1” 時(shí),使能T/C1 的輸出比較B 匹配中
斷使能。一旦TIFR 上的OCF1B 置位,CPU 即開(kāi)始執行T/C1 輸出比較B 匹配中斷服務(wù)
程序。

• Bit 5 – TICIE1: T/C1 輸入捕捉中斷使能
當該位被設為"1”,且狀態(tài)寄存器中的I 位被設為"1” 時(shí), T/C1 的輸入捕捉中斷使能。一
旦TIFR 的ICF1 置位,CPU 即開(kāi)始執行T/C1 輸入捕捉中斷服務(wù)程序( 見(jiàn)P43 “ 中斷” )。
• Bit 4 – OCIE1A: 輸出比較 A 匹配中斷使能
當該位被設為"1”,且狀態(tài)寄存器中的I 位被設為"1” 時(shí), T/C1 的輸出比較A 匹配中斷使
能。一旦TIFR 上的OCF1A 置位,CPU 即開(kāi)始執行T/C1 輸出比較A 匹配中斷服務(wù)程序。
• Bit 3 – OCIE1B: T/C1 輸出比較 B 匹配中斷使能
當該位被設為"1”,且狀態(tài)寄存器中的I 位被設為"1” 時(shí),使能T/C1 的輸出比較B 匹配中
斷使能。一旦TIFR 上的OCF1B 置位,CPU 即開(kāi)始執行T/C1 輸出比較B 匹配中斷服務(wù)
程序。
• Bit 2 – TOIE1: T/C1 溢出中斷使能
當該位被設為"1”,且狀態(tài)寄存器中的I 位被設為”1” 時(shí), T/C1 的溢出中斷使能。一旦
TIFR 上的TOV1 置位, CPU 即開(kāi)始執行T/C1 溢出中斷服務(wù)程序。
當該位被設為"1”,且狀態(tài)寄存器中的I 位被設為”1” 時(shí), T/C1 的溢出中斷使能。一旦
TIFR 上的TOV1 置位, CPU 即開(kāi)始執行T/C1 溢出中斷服務(wù)程序。
7)T/C 中斷標志寄存器- TIFR
• Bit 5 – ICF1: T/C1 輸入捕捉標志位
外部引腳ICP1 出現捕捉事件時(shí)ICF1 置位。此外,當ICR1 作為計數器的TOP 值時(shí),一
旦計數器值達到TOP, ICF1 也置位。
執行輸入捕捉中斷服務(wù)程序時(shí)ICF1 自動(dòng)清零。也可以對其寫(xiě)入邏輯"1” 來(lái)清除該標志位。
• Bit 4 – OCF1A: T/C1 輸出比較 A 匹配標志位
當TCNT1 與OCR1A 匹配成功時(shí),該位被設為"1”。
強制輸出比較(FOC1A) 不會(huì )置位OCF1A。
執行強制輸出比較匹配A 中斷服務(wù)程序時(shí)OCF1A 自動(dòng)清零。也可以對其寫(xiě)入邏輯"1” 來(lái)
清除該標志位。
• Bit 3 – OCF1B: T/C1 輸出比較 B 匹配標志位
當TCNT1 與OCR1B 匹配成功時(shí),該位被設為"1”。
強制輸出比較(FOC1B) 不會(huì )置位OCF1B。
執行強制輸出比較匹配B 中斷服務(wù)程序時(shí)OCF1B 自動(dòng)清零。也可以對其寫(xiě)入邏輯"1” 來(lái)
清除該標志位。
• Bit 2 – TOV1: T/C1 溢出標志
該位的設置與T/C1 的工作方式有關(guān)。工作于普通模式和CTC 模式時(shí),T/C1 溢出時(shí)TOV1
置位。對工作在其它模式下的TOV1 標志位置位,執行溢出中斷服務(wù)程序時(shí)OCF1A 自動(dòng)清零。也可以對其寫(xiě)入邏輯"1” 來(lái)清除該標志位。

• Bit 5 – ICF1: T/C1 輸入捕捉標志位
外部引腳ICP1 出現捕捉事件時(shí)ICF1 置位。此外,當ICR1 作為計數器的TOP 值時(shí),一
旦計數器值達到TOP, ICF1 也置位。
執行輸入捕捉中斷服務(wù)程序時(shí)ICF1 自動(dòng)清零。也可以對其寫(xiě)入邏輯"1” 來(lái)清除該標志位。
• Bit 4 – OCF1A: T/C1 輸出比較 A 匹配標志位
當TCNT1 與OCR1A 匹配成功時(shí),該位被設為"1”。
強制輸出比較(FOC1A) 不會(huì )置位OCF1A。
執行強制輸出比較匹配A 中斷服務(wù)程序時(shí)OCF1A 自動(dòng)清零。也可以對其寫(xiě)入邏輯"1” 來(lái)
清除該標志位。
• Bit 3 – OCF1B: T/C1 輸出比較 B 匹配標志位
當TCNT1 與OCR1B 匹配成功時(shí),該位被設為"1”。
強制輸出比較(FOC1B) 不會(huì )置位OCF1B。
執行強制輸出比較匹配B 中斷服務(wù)程序時(shí)OCF1B 自動(dòng)清零。也可以對其寫(xiě)入邏輯"1” 來(lái)
清除該標志位。
• Bit 2 – TOV1: T/C1 溢出標志
該位的設置與T/C1 的工作方式有關(guān)。工作于普通模式和CTC 模式時(shí),T/C1 溢出時(shí)TOV1
置位。對工作在其它模式下的TOV1 標志位置位,執行溢出中斷服務(wù)程序時(shí)OCF1A 自動(dòng)清零。也可以對其寫(xiě)入邏輯"1” 來(lái)清除該標志位。
6、8 位有PWM 與異步操作的定時(shí)器/ 計數器2
小小介紹~~~
T/C2 是一個(gè)通用單通道8 位定時(shí)/ 計數器,其主要特點(diǎn)如下:
• 單通道計數器
• 比較匹配時(shí)清零定時(shí)器 ( 自動(dòng)重載)
• 無(wú)干擾脈沖, 相位正確的脈寬調制器 (PWM)
• 頻率發(fā)生器
• 10 位時(shí)鐘預分頻器
• 溢出與比較匹配中斷源(TOV2 與OCF2)
• 允許使用外部的32 kHz 手表晶振作為獨立的I/O 時(shí)鐘源
• 單通道計數器
• 比較匹配時(shí)清零定時(shí)器 ( 自動(dòng)重載)
• 無(wú)干擾脈沖, 相位正確的脈寬調制器 (PWM)
• 頻率發(fā)生器
• 10 位時(shí)鐘預分頻器
• 溢出與比較匹配中斷源(TOV2 與OCF2)
• 允許使用外部的32 kHz 手表晶振作為獨立的I/O 時(shí)鐘源
其實(shí)這里重要的應該是異步操作,這里只是簡(jiǎn)單介紹一下下,后面會(huì )有實(shí)驗專(zhuān)門(mén)來(lái)操作的,盡量給力~~~這里我也不詳細介紹了,重要的是后面的寄存器
寄存器:
定時(shí)器/ 計數器TCNT2、輸出比較寄存器OCR2 為8 位寄存器。中斷請求( 圖中簡(jiǎn)寫(xiě)為
Int.Req.)。信號在定時(shí)器中斷標志寄存器TIFR 都有反映。 所有中斷都可以通過(guò)定時(shí)器中
斷屏蔽寄存器TIMSK 單獨進(jìn)行屏蔽。圖中未給出TIFR 與TIMSK。
T/C 的時(shí)鐘可以為通過(guò)預分頻器的內部時(shí)鐘或 通過(guò)由TOSC1/2 引腳接入的異步時(shí)鐘,詳
見(jiàn)本節后續部分。異步操作由異步狀態(tài)寄存器ASSR 控制。時(shí)鐘選擇邏輯模塊控制引起
T/C計數值增加(或減少)的時(shí)鐘源。 沒(méi)有選擇時(shí)鐘源時(shí)T/C處于停止狀態(tài)。時(shí)鐘選擇邏輯模
塊的輸出稱(chēng)為clkT2。
雙緩沖的輸出比較寄存器OCR2 一直與TCNT2 的數值進(jìn)行比較。波形發(fā)生器利用比較結
果產(chǎn)生PWM 波形或在比較輸出引腳OC2 輸出可變頻率的信號。參見(jiàn)P111 “ 輸出比較單
元” 。比較匹配結果還會(huì )置位比較匹配標志OCF2,用來(lái)產(chǎn)生輸出比較中斷請求。
Int.Req.)。信號在定時(shí)器中斷標志寄存器TIFR 都有反映。 所有中斷都可以通過(guò)定時(shí)器中
斷屏蔽寄存器TIMSK 單獨進(jìn)行屏蔽。圖中未給出TIFR 與TIMSK。
T/C 的時(shí)鐘可以為通過(guò)預分頻器的內部時(shí)鐘或 通過(guò)由TOSC1/2 引腳接入的異步時(shí)鐘,詳
見(jiàn)本節后續部分。異步操作由異步狀態(tài)寄存器ASSR 控制。時(shí)鐘選擇邏輯模塊控制引起
T/C計數值增加(或減少)的時(shí)鐘源。 沒(méi)有選擇時(shí)鐘源時(shí)T/C處于停止狀態(tài)。時(shí)鐘選擇邏輯模
塊的輸出稱(chēng)為clkT2。
雙緩沖的輸出比較寄存器OCR2 一直與TCNT2 的數值進(jìn)行比較。波形發(fā)生器利用比較結
果產(chǎn)生PWM 波形或在比較輸出引腳OC2 輸出可變頻率的信號。參見(jiàn)P111 “ 輸出比較單
元” 。比較匹配結果還會(huì )置位比較匹配標志OCF2,用來(lái)產(chǎn)生輸出比較中斷請求。
7、8位T/C2的寄存器
1)T/C2的控制寄存器
• Bit 7 – FOC2: 強制輸出比較
FOC2僅在WGM指明非PWM模式時(shí)才有效。但是,為了保證與未來(lái)器件的兼容性,使用
PWM 時(shí),寫(xiě)TCCR2 要對其清零。寫(xiě)1 后,波形發(fā)生器將立即進(jìn)行比較操作。比較匹配輸
出引腳 OC2 將按照COM21:0 的設置輸出相應的電平。要注意FOC2 類(lèi)似一個(gè)鎖存信號,
真正對強制輸出比較起作用的是COM21:0 的設置。
FOC2 不會(huì )引發(fā)任何中斷,也不會(huì )在使用OCR2 作為T(mén)OP 的CTC 模式下對定時(shí)器進(jìn)行清
零。
讀FOC2 的返回值永遠為0。
• Bit 6, 3 – WGM21:0: 波形產(chǎn)生模式
這幾位控制計數器的計數序列,計數器最大值TOP 的來(lái)源,以及產(chǎn)生何種波形。T/C 支
持的模式有:普通模式,比較匹配發(fā)生時(shí)清除計數器模式(CTC),以及兩種PWM 模式 。

• Bit 7 – FOC2: 強制輸出比較
FOC2僅在WGM指明非PWM模式時(shí)才有效。但是,為了保證與未來(lái)器件的兼容性,使用
PWM 時(shí),寫(xiě)TCCR2 要對其清零。寫(xiě)1 后,波形發(fā)生器將立即進(jìn)行比較操作。比較匹配輸
出引腳 OC2 將按照COM21:0 的設置輸出相應的電平。要注意FOC2 類(lèi)似一個(gè)鎖存信號,
真正對強制輸出比較起作用的是COM21:0 的設置。
FOC2 不會(huì )引發(fā)任何中斷,也不會(huì )在使用OCR2 作為T(mén)OP 的CTC 模式下對定時(shí)器進(jìn)行清
零。
讀FOC2 的返回值永遠為0。
• Bit 6, 3 – WGM21:0: 波形產(chǎn)生模式
這幾位控制計數器的計數序列,計數器最大值TOP 的來(lái)源,以及產(chǎn)生何種波形。T/C 支
持的模式有:普通模式,比較匹配發(fā)生時(shí)清除計數器模式(CTC),以及兩種PWM 模式

• Bit 5:4 – COM21:0: 比較匹配輸出模式
這些位決定了比較匹配發(fā)生時(shí)輸出引腳OC0 的電平。如果COM01:0 中的一位或全部都
置位, OC0 以比較匹配輸出的方式進(jìn)行工作。同時(shí)其方向控制位要設置為1 以使能輸出
驅動(dòng)。
當OC0 連接到物理引腳上時(shí), COM01:0 的功能依賴(lài)于WGM01:0 的設置。Table 51 給
出了當WGM01:0 設置為普通模式或CTC 模式時(shí)COM01:0 的功能。

這些位決定了比較匹配發(fā)生時(shí)輸出引腳OC0 的電平。如果COM01:0 中的一位或全部都
置位, OC0 以比較匹配輸出的方式進(jìn)行工作。同時(shí)其方向控制位要設置為1 以使能輸出
驅動(dòng)。
當OC0 連接到物理引腳上時(shí), COM01:0 的功能依賴(lài)于WGM01:0 的設置。Table 51 給
出了當WGM01:0 設置為普通模式或CTC 模式時(shí)COM01:0 的功能。


• Bit 2:0 – CS22:0: 時(shí)鐘選擇
這三位時(shí)鐘選擇位用于選擇T/C 的時(shí)鐘源,見(jiàn)Table 54。
2)定時(shí)器/ 計數器寄存器- TCNT2
通過(guò)T/C 寄存器可以直接對計數器的8 位數據進(jìn)行讀寫(xiě)訪(fǎng)問(wèn)。對TCNT2 寄存器的寫(xiě)訪(fǎng)問(wèn)
將在下一個(gè)時(shí)鐘阻止比較匹配。在計數器運行的過(guò)程中修改TCNT2 的數值有可能丟失一
次TCNT2 和OCR2 的比較匹配。
這三位時(shí)鐘選擇位用于選擇T/C 的時(shí)鐘源,見(jiàn)Table 54。

2)定時(shí)器/ 計數器寄存器- TCNT2

通過(guò)T/C 寄存器可以直接對計數器的8 位數據進(jìn)行讀寫(xiě)訪(fǎng)問(wèn)。對TCNT2 寄存器的寫(xiě)訪(fǎng)問(wèn)
將在下一個(gè)時(shí)鐘阻止比較匹配。在計數器運行的過(guò)程中修改TCNT2 的數值有可能丟失一
次TCNT2 和OCR2 的比較匹配。
3)輸出比較寄存器- OCR2

輸出比較寄存器包含一個(gè)8 位的數據,不間斷地與計數器數值TCNT2 進(jìn)行比較。匹配事
件可以用來(lái)產(chǎn)生輸出比較中斷,或者用來(lái)在OC2 引腳上產(chǎn)生波形。
件可以用來(lái)產(chǎn)生輸出比較中斷,或者用來(lái)在OC2 引腳上產(chǎn)生波形。
4)異步狀態(tài)寄存器- ASSR
• Bit 3 – AS2: 異步 T/C2
AS2為"0”時(shí)T/C2由I/O時(shí)鐘clkI/O驅動(dòng);AS2為"1”時(shí)T/C2由連接到TOSC1引腳的晶體振蕩
器驅動(dòng)。改變AS2 有可能破壞TCNT2、OCR2 與TCCR2 的內容。
• Bit 2 – TCN2UB: T/C2 更新中
T/C2工作于異步模式時(shí),寫(xiě)TCNT2將引起TCN2UB置位。當TCNT2從暫存寄存器更新完
畢后TCN2UB 由硬件清零。TCN2UB 為0 表明TCNT2 可以寫(xiě)入新值了。
• Bit 1 – OCR2UB: 輸出比較寄存器2 更新中
T/C2工作于異步模式時(shí),寫(xiě)OCR2將引起OCR2UB置位。當OCR2從暫存寄存器更新完畢
后OCR2UB 由硬件清零。OCR2UB 為0 表明OCR2 可以寫(xiě)入新值了。
• Bit 0 – TCR2UB: T/C2 控制寄存器更新中
T/C2工作于異步模式時(shí),寫(xiě)TCCR2將引起TCR2UB置位。當TCCR2從暫存寄存器更新完
畢后TCR2UB 由硬件清零。TCR2UB 為0 表明TCCR2 可以寫(xiě)入新值了。
如果在更新忙標志置位的時(shí)候寫(xiě)上述任何一個(gè)寄存器都將引起數據的破壞,并引發(fā)不必
要的中斷。
讀取TCNT2、OCR2 和TCCR2 的機制是不同的。讀取TCNT2 得到的是實(shí)際的值,而
OCR2 和TCCR2 則是從暫存寄存器中讀取的。

• Bit 3 – AS2: 異步 T/C2
AS2為"0”時(shí)T/C2由I/O時(shí)鐘clkI/O驅動(dòng);AS2為"1”時(shí)T/C2由連接到TOSC1引腳的晶體振蕩
器驅動(dòng)。改變AS2 有可能破壞TCNT2、OCR2 與TCCR2 的內容。
• Bit 2 – TCN2UB: T/C2 更新中
T/C2工作于異步模式時(shí),寫(xiě)TCNT2將引起TCN2UB置位。當TCNT2從暫存寄存器更新完
畢后TCN2UB 由硬件清零。TCN2UB 為0 表明TCNT2 可以寫(xiě)入新值了。
• Bit 1 – OCR2UB: 輸出比較寄存器2 更新中
T/C2工作于異步模式時(shí),寫(xiě)OCR2將引起OCR2UB置位。當OCR2從暫存寄存器更新完畢
后OCR2UB 由硬件清零。OCR2UB 為0 表明OCR2 可以寫(xiě)入新值了。
• Bit 0 – TCR2UB: T/C2 控制寄存器更新中
T/C2工作于異步模式時(shí),寫(xiě)TCCR2將引起TCR2UB置位。當TCCR2從暫存寄存器更新完
畢后TCR2UB 由硬件清零。TCR2UB 為0 表明TCCR2 可以寫(xiě)入新值了。
如果在更新忙標志置位的時(shí)候寫(xiě)上述任何一個(gè)寄存器都將引起數據的破壞,并引發(fā)不必
要的中斷。
讀取TCNT2、OCR2 和TCCR2 的機制是不同的。讀取TCNT2 得到的是實(shí)際的值,而
OCR2 和TCCR2 則是從暫存寄存器中讀取的。
定時(shí)器/ 計數器2 的異步操作(這里還是挺重要的~~
)

T/C2 工作于異步模式時(shí)要考慮如下幾點(diǎn):
• 警告:在同步和異步模式之間的轉換有可能造成TCNT2、OCR2 和TCCR2 數據的損
毀。安全的步驟應該是:
1. 清零OCIE2 和TOIE2 以關(guān)閉T/C2 的中斷
2. 設置AS2 以選擇合適的時(shí)鐘源
3. 對TCNT2、OCR2 和TCCR2 寫(xiě)入新的數據
4. 切換到異步模式:等待TCN2UB、OCR2UB 和TCR2UB 清零
5. 清除T/C2 的中斷標志
6. 需要的話(huà)使能中斷
• 警告:在同步和異步模式之間的轉換有可能造成TCNT2、OCR2 和TCCR2 數據的損
毀。安全的步驟應該是:
1. 清零OCIE2 和TOIE2 以關(guān)閉T/C2 的中斷
2. 設置AS2 以選擇合適的時(shí)鐘源
3. 對TCNT2、OCR2 和TCCR2 寫(xiě)入新的數據
4. 切換到異步模式:等待TCN2UB、OCR2UB 和TCR2UB 清零
5. 清除T/C2 的中斷標志
6. 需要的話(huà)使能中斷
• 振蕩器最好使用32.768 kHz手表晶振。給TOSC1 提供外部時(shí)鐘,可能會(huì )造成T/C2 工
作錯誤。系統主時(shí)鐘必須比晶振高4 倍以上。
• 寫(xiě)TCNT2,OCR2和TCCR2時(shí)數據首先送入暫存器,兩個(gè)TOSC1時(shí)鐘正跳變后才鎖
存到對應到的寄存器。在數據從暫存器寫(xiě)入目的寄存器之前不能執行新的數據寫(xiě)入
操作。3 個(gè)寄存器具有各自獨立的暫存器,因此寫(xiě)TCNT2 并不會(huì )干擾OCR2 的寫(xiě)
操作。異步狀態(tài)寄存器ASSR 用來(lái)檢查數據是否已經(jīng)寫(xiě)入到目的寄存器。
• 如果要用T/C2 作為MCU 省電模式或擴展Standby 模式的喚醒條件,則在TCNT2,
OCR2A和TCCR2A更新結束之前不能進(jìn)入這些休眠模式,否則MCU可能會(huì )在T/C2設
置生效之前進(jìn)入休眠模式。這對于用T/C2 的比較匹配中斷喚醒MCU 尤其重要,因
為在更新OCR2 或TCNT2 時(shí)比較匹配是禁止的。如果在更新完成之前(OCR2UB為0)MCU 就進(jìn)入了休眠模式,那么比較匹配中斷永遠不會(huì )發(fā)生, MCU 也永遠無(wú)法
喚醒了。
• 如果要用T/C2作為省電模式或擴展Standby模式的喚醒條件,必須注意重新進(jìn)入這些
休眠模式的過(guò)程。中斷邏輯需要一個(gè)TOSC1 周期進(jìn)行復位。如果從喚醒到重新進(jìn)入
休眠的時(shí)間小于一個(gè)TOSC1 周期,中斷將不再發(fā)生,器件也無(wú)法喚醒。如果用戶(hù)懷
疑自己程序是否滿(mǎn)足這一條件,可以采取如下方法:
1. 對TCCR2、TCNT2 或OCR2 寫(xiě)入合適的數據
2. 等待ASSR 相應的更新忙標志清零
3. 進(jìn)入省電模式或擴展Standby 模式
• 若選擇了異步工作模式,T/C2 的 32.768 kHz 振蕩器將一直工作,除非進(jìn)入掉電模式
或 Standby 模式。用戶(hù)應該注意,此振蕩器的穩定時(shí)間可能長(cháng)達1 秒鐘。因此,建
議用戶(hù)在器件上電復位,或從掉電/Standby 模式喚醒時(shí)至少等待1 秒鐘后再使用
T/C2。同時(shí),由于啟動(dòng)過(guò)程時(shí)鐘的不穩定性,喚醒時(shí)所有的T/C2 寄存器的內容都可
能不正確,不論使用的是晶體還是外部時(shí)鐘信號。用戶(hù)必須重新給這些寄存器賦值。
作錯誤。系統主時(shí)鐘必須比晶振高4 倍以上。
• 寫(xiě)TCNT2,OCR2和TCCR2時(shí)數據首先送入暫存器,兩個(gè)TOSC1時(shí)鐘正跳變后才鎖
存到對應到的寄存器。在數據從暫存器寫(xiě)入目的寄存器之前不能執行新的數據寫(xiě)入
操作。3 個(gè)寄存器具有各自獨立的暫存器,因此寫(xiě)TCNT2 并不會(huì )干擾OCR2 的寫(xiě)
操作。異步狀態(tài)寄存器ASSR 用來(lái)檢查數據是否已經(jīng)寫(xiě)入到目的寄存器。
• 如果要用T/C2 作為MCU 省電模式或擴展Standby 模式的喚醒條件,則在TCNT2,
OCR2A和TCCR2A更新結束之前不能進(jìn)入這些休眠模式,否則MCU可能會(huì )在T/C2設
置生效之前進(jìn)入休眠模式。這對于用T/C2 的比較匹配中斷喚醒MCU 尤其重要,因
為在更新OCR2 或TCNT2 時(shí)比較匹配是禁止的。如果在更新完成之前(OCR2UB為0)MCU 就進(jìn)入了休眠模式,那么比較匹配中斷永遠不會(huì )發(fā)生, MCU 也永遠無(wú)法
喚醒了。
• 如果要用T/C2作為省電模式或擴展Standby模式的喚醒條件,必須注意重新進(jìn)入這些
休眠模式的過(guò)程。中斷邏輯需要一個(gè)TOSC1 周期進(jìn)行復位。如果從喚醒到重新進(jìn)入
休眠的時(shí)間小于一個(gè)TOSC1 周期,中斷將不再發(fā)生,器件也無(wú)法喚醒。如果用戶(hù)懷
疑自己程序是否滿(mǎn)足這一條件,可以采取如下方法:
1. 對TCCR2、TCNT2 或OCR2 寫(xiě)入合適的數據
2. 等待ASSR 相應的更新忙標志清零
3. 進(jìn)入省電模式或擴展Standby 模式
• 若選擇了異步工作模式,T/C2 的 32.768 kHz 振蕩器將一直工作,除非進(jìn)入掉電模式
或 Standby 模式。用戶(hù)應該注意,此振蕩器的穩定時(shí)間可能長(cháng)達1 秒鐘。因此,建
議用戶(hù)在器件上電復位,或從掉電/Standby 模式喚醒時(shí)至少等待1 秒鐘后再使用
T/C2。同時(shí),由于啟動(dòng)過(guò)程時(shí)鐘的不穩定性,喚醒時(shí)所有的T/C2 寄存器的內容都可
能不正確,不論使用的是晶體還是外部時(shí)鐘信號。用戶(hù)必須重新給這些寄存器賦值。
• 使用異步時(shí)鐘時(shí)省電模式或擴展Standby 模式的喚醒過(guò)程:中斷條件滿(mǎn)足后,在下一
個(gè)定時(shí)器時(shí)鐘喚醒過(guò)程啟動(dòng)。也就是說(shuō),在處理器可以讀取計數器的數值之前計數
器至少又累加了一個(gè)時(shí)鐘。喚醒后MCU 停止4 個(gè)時(shí)鐘,接著(zhù)執行中斷服務(wù)程序。中
斷服務(wù)程序結束之后開(kāi)始執行SLEEP 語(yǔ)句之后的程序。
• 從省電模式喚醒之后的短時(shí)間內讀取TCNT2 可能返回不正確的數據。因為T(mén)CNT2 是
由異步的TOSC 時(shí)鐘驅動(dòng)的,而讀取TCNT2 必須通過(guò)一個(gè)與內部I/O 時(shí)鐘同步的寄
存器來(lái)完成。同步發(fā)生于每個(gè)TOSC1 的上升沿。從省電模式喚醒后I/O 時(shí)鐘重新激
活,而讀到的TCNT2 數值為進(jìn)入休眠模式前的值,直到下一個(gè)TOSC1 上升沿的到
來(lái)。從省電模式喚醒時(shí)TOSC1 的相位是完全不可預測的,而且與喚醒時(shí)間有關(guān)。因
此,讀取TCNT2 的推薦序列為:
1. 寫(xiě)一個(gè)任意數值到OCR2 或TCCR2
2. 等待相應的更新忙標志清零
3. 讀TCNT2
• 在異步模式下,中斷標志的同步需要3 個(gè)處理器周期加一個(gè)定時(shí)器周期。在處理器可
以讀取引起中斷標志置位的計數器數值之前計數器至少又累加了一個(gè)時(shí)鐘。輸出比
較引腳的變化與定時(shí)器時(shí)鐘同步,而不是處理器時(shí)鐘。
個(gè)定時(shí)器時(shí)鐘喚醒過(guò)程啟動(dòng)。也就是說(shuō),在處理器可以讀取計數器的數值之前計數
器至少又累加了一個(gè)時(shí)鐘。喚醒后MCU 停止4 個(gè)時(shí)鐘,接著(zhù)執行中斷服務(wù)程序。中
斷服務(wù)程序結束之后開(kāi)始執行SLEEP 語(yǔ)句之后的程序。
• 從省電模式喚醒之后的短時(shí)間內讀取TCNT2 可能返回不正確的數據。因為T(mén)CNT2 是
由異步的TOSC 時(shí)鐘驅動(dòng)的,而讀取TCNT2 必須通過(guò)一個(gè)與內部I/O 時(shí)鐘同步的寄
存器來(lái)完成。同步發(fā)生于每個(gè)TOSC1 的上升沿。從省電模式喚醒后I/O 時(shí)鐘重新激
活,而讀到的TCNT2 數值為進(jìn)入休眠模式前的值,直到下一個(gè)TOSC1 上升沿的到
來(lái)。從省電模式喚醒時(shí)TOSC1 的相位是完全不可預測的,而且與喚醒時(shí)間有關(guān)。因
此,讀取TCNT2 的推薦序列為:
1. 寫(xiě)一個(gè)任意數值到OCR2 或TCCR2
2. 等待相應的更新忙標志清零
3. 讀TCNT2
• 在異步模式下,中斷標志的同步需要3 個(gè)處理器周期加一個(gè)定時(shí)器周期。在處理器可
以讀取引起中斷標志置位的計數器數值之前計數器至少又累加了一個(gè)時(shí)鐘。輸出比
較引腳的變化與定時(shí)器時(shí)鐘同步,而不是處理器時(shí)鐘。
5)定時(shí)器/ 計數器中斷屏蔽寄存器- TIMSK

• Bit 7 – OCIE2: T/C2 輸出比較匹配中斷使能
當OCIE2 和狀態(tài)寄存器的全局中斷使能位I 都為"1” 時(shí),T/C2 的輸出比較匹配A 中斷使
能。當T/C2 的比較匹配發(fā)生,即TIFR 中的OCF2 置位時(shí),中斷服務(wù)程序得以執行。
• Bit 6 – TOIE2: T/C2 溢出中斷使能
當TOIE2 和狀態(tài)寄存器的全局中斷使能位I 都為"1” 時(shí),T/C2 的溢出中斷使能。當T/C2
發(fā)生溢出,即TIFR 中的TOV2 位置位時(shí),中斷服務(wù)程序得以執行。
6)定時(shí)器/ 計數器 中斷標志寄存器- TIFR
• Bit 7 – OCF2: 輸出比較標志 2
當T/C2 與OCR2( 輸出比較寄存器2) 的值匹配時(shí),OCF2 置位。此位在中斷服務(wù)程序里
硬件清零,也可以通過(guò)對其寫(xiě)1 來(lái)清零。當SREG 中的位I、OCIE2 和OCF2 都置位時(shí),
中斷服務(wù)程序得到執行。
• Bit 6 – TOV2: T/C2 溢出標志
當T/C2 溢出時(shí), TOV2 置位。執行相應的中斷服務(wù)程序時(shí)此位硬件清零。此外, TOV2
也可以通過(guò)寫(xiě)1 來(lái)清零。當SREG 中的位I、TOIE2 和TOV2 都置位時(shí),中斷服務(wù)程序
得到執行。在PWM 模式中,當T/C2 在0x00 改變記數方向時(shí), TOV2 置位。
當OCIE2 和狀態(tài)寄存器的全局中斷使能位I 都為"1” 時(shí),T/C2 的輸出比較匹配A 中斷使
能。當T/C2 的比較匹配發(fā)生,即TIFR 中的OCF2 置位時(shí),中斷服務(wù)程序得以執行。
• Bit 6 – TOIE2: T/C2 溢出中斷使能
當TOIE2 和狀態(tài)寄存器的全局中斷使能位I 都為"1” 時(shí),T/C2 的溢出中斷使能。當T/C2
發(fā)生溢出,即TIFR 中的TOV2 位置位時(shí),中斷服務(wù)程序得以執行。
6)定時(shí)器/ 計數器 中斷標志寄存器- TIFR

• Bit 7 – OCF2: 輸出比較標志 2
當T/C2 與OCR2( 輸出比較寄存器2) 的值匹配時(shí),OCF2 置位。此位在中斷服務(wù)程序里
硬件清零,也可以通過(guò)對其寫(xiě)1 來(lái)清零。當SREG 中的位I、OCIE2 和OCF2 都置位時(shí),
中斷服務(wù)程序得到執行。
• Bit 6 – TOV2: T/C2 溢出標志
當T/C2 溢出時(shí), TOV2 置位。執行相應的中斷服務(wù)程序時(shí)此位硬件清零。此外, TOV2
也可以通過(guò)寫(xiě)1 來(lái)清零。當SREG 中的位I、TOIE2 和TOV2 都置位時(shí),中斷服務(wù)程序
得到執行。在PWM 模式中,當T/C2 在0x00 改變記數方向時(shí), TOV2 置位。
這里也用到特殊功能寄存器:補充:
好了,現在基本上好了~~累死了





好了,現在基本上好了~~累死了





下面就是實(shí)驗了,哈哈
4位秒表啊~~~吼吼
先貼張圖片看看那
然后就是Proteus仿真~~~
出了點(diǎn)問(wèn)題~~整了半天~~哭
国产精品自在自线亚洲|国产精品无圣光一区二区|国产日产欧洲无码视频|久久久一本精品99久久K精品66|欧美人与动牲交片免费播放

然后就是Proteus仿真~~~

關(guān)鍵詞:
AVR單片機ATMEGA16定時(shí)計數
相關(guān)推薦
技術(shù)專(zhuān)區
- FPGA
- DSP
- MCU
- 示波器
- 步進(jìn)電機
- Zigbee
- LabVIEW
- Arduino
- RFID
- NFC
- STM32
- Protel
- GPS
- MSP430
- Multisim
- 濾波器
- CAN總線(xiàn)
- 開(kāi)關(guān)電源
- 單片機
- PCB
- USB
- ARM
- CPLD
- 連接器
- MEMS
- CMOS
- MIPS
- EMC
- EDA
- ROM
- 陀螺儀
- VHDL
- 比較器
- Verilog
- 穩壓電源
- RAM
- AVR
- 傳感器
- 可控硅
- IGBT
- 嵌入式開(kāi)發(fā)
- 逆變器
- Quartus
- RS-232
- Cyclone
- 電位器
- 電機控制
- 藍牙
- PLC
- PWM
- 汽車(chē)電子
- 轉換器
- 電源管理
- 信號放大器
評論