新聞中心

EEPW首頁 > 嵌入式系統(tǒng) > 設計應用 > AVR單片機(學習ing)-ATMEGA16的定時/計數(shù)器

AVR單片機(學習ing)-ATMEGA16的定時/計數(shù)器

作者: 時間:2016-11-27 來源:網(wǎng)絡 收藏
6)T/C1 中斷屏蔽寄存器- TIMSK


• Bit 5 – TICIE1: T/C1 輸入捕捉中斷使能
當該位被設為"1”,且狀態(tài)寄存器中的I 位被設為"1” 時, T/C1 的輸入捕捉中斷使能。一
旦TIFR 的ICF1 置位,CPU 即開始執(zhí)行T/C1 輸入捕捉中斷服務程序( 見P43 “ 中斷” )。
• Bit 4 – OCIE1A: 輸出比較 A 匹配中斷使能
當該位被設為"1”,且狀態(tài)寄存器中的I 位被設為"1” 時, T/C1 的輸出比較A 匹配中斷使
能。一旦TIFR 上的OCF1A 置位,CPU 即開始執(zhí)行T/C1 輸出比較A 匹配中斷服務程序。
• Bit 3 – OCIE1B: T/C1 輸出比較 B 匹配中斷使能
當該位被設為"1”,且狀態(tài)寄存器中的I 位被設為"1” 時,使能T/C1 的輸出比較B 匹配中
斷使能。一旦TIFR 上的OCF1B 置位,CPU 即開始執(zhí)行T/C1 輸出比較B 匹配中斷服務
程序。
• Bit 2 – TOIE1: T/C1 溢出中斷使能
當該位被設為"1”,且狀態(tài)寄存器中的I 位被設為”1” 時, T/C1 的溢出中斷使能。一旦
TIFR 上的TOV1 置位, CPU 即開始執(zhí)行T/C1 溢出中斷服務程序。
7)T/C 中斷標志寄存器- TIFR


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


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

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



• Bit 2:0 – CS22:0: 時鐘選擇
這三位時鐘選擇位用于選擇T/C 的時鐘源,見Table 54。

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


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

輸出比較寄存器包含一個8 位的數(shù)據(jù),不間斷地與計數(shù)器數(shù)值TCNT2 進行比較。匹配事
件可以用來產(chǎn)生輸出比較中斷,或者用來在OC2 引腳上產(chǎn)生波形。
4)異步狀態(tài)寄存器- ASSR


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


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


好了,現(xiàn)在基本上好了~~累死了
下面就是實驗了,哈哈
4位秒表啊~~~吼吼
先貼張圖片看看那


然后就是Proteus仿真~~~
出了點問題~~整了半天~~哭
個人認為是個Bug~~你懂得,我以前用51的時候就有這個問題,顯示不完整,可能是更新太快了~

評論


技術專區(qū)

關閉
×

Digikey let's do
· 2025年第1期限时报名开启,5月8日截止
· Digikey助力,提供一站式免费器件支持
· 跟大佬一起 【DIY 功率监测与控制系统】