Arduino 中的定時器暫存器
在之前的文章中,我們使用了 TimerOne 庫向 Arduino 新增定時器中斷。但是,如果我們希望在沒有第三方庫的情況下生成定時器中斷怎麼辦?在這種情況下,您將需要直接處理 Arduino 中的定時器暫存器。在本文中,我們將僅介紹與定時器操作相關的暫存器並解釋其意義。我們還將提供 ATmega328(用於 Arduino Uno)資料手冊的頁碼,您可以在其中找到有關這些暫存器的詳細資訊。
您可以在此處找到資料手冊 -https://ww1.microchip.com/downloads/en/DeviceDoc/Atmel7810-Automotive-Microcontrollers-ATmega328P_Datasheet.pdf
TCCRxA 和 TCCRxB

這些是定時器控制暫存器。x 代表定時器編號。如果您使用的是 Timer0,則將關注 TCCR0A 和 TCCR0B 暫存器。TCCR0A 暫存器(主要是 WGM00 和 WGM01 位,以及來自 TCRR0B 暫存器的 WGM02 位)控制計數器的計數順序。
請檢視下面的圖片 -

通常,使用正常模式或 CTC 模式之一。在正常模式下,您不關心確切的時間間隔。如果您有一個 8 位計數器,則將其值設定為 0,等待其達到 0xFF(對於 16 位則為 0xFFFF),然後生成中斷。在 CTC(比較匹配時清除定時器)模式下,當計數器的值達到 OCRA 暫存器中設定的值時,會生成中斷。這使您可以更好地控制時間間隔。
TCCR0B 的 CS00、CS01 和 CS02 位用於設定時鐘的預分頻器。請參見下圖 -

TCNTx
此暫存器是實際計數發生的地方。它通常初始化為 0。其值與輸出比較暫存器(在 CTC 模式下)進行比較,當值匹配時,會生成中斷。
OCRxA
此暫存器儲存生成所需延遲所需的刻度數。TCNTx 的值不斷與 OCRxA 進行比較,當值匹配時,會生成中斷
TIMSKx

通常,這裡只有 0CIE0A 位很重要。它必須設定為 1 以在 TCNT 暫存器值達到 OCRA 值時啟用中斷。
資料結構
網路
關係型資料庫管理系統 (RDBMS)
作業系統
Java
iOS
HTML
CSS
Android
Python
C 程式設計
C++
C#
MongoDB
MySQL
Javascript
PHP