新聞中心

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

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

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


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


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


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

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



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

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


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

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


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


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


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


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

        評論


        技術專區

        關閉
        主站蜘蛛池模板: 祁门县| 聂荣县| 高陵县| 建湖县| 尉氏县| 韶山市| 克山县| 杭州市| 平凉市| 辉县市| 沅陵县| 丹巴县| 清新县| 洛隆县| 贵州省| 郴州市| 南宁市| 华安县| 门头沟区| 东乌珠穆沁旗| 新和县| 肇州县| 宁城县| 石河子市| 视频| 永宁县| 惠水县| 南平市| 堆龙德庆县| 元氏县| 始兴县| 化德县| 冷水江市| 襄垣县| 宁陵县| 成都市| 华亭县| 天气| 湟中县| 延吉市| 平乐县|