<meter id="pryje"><nav id="pryje"><delect id="pryje"></delect></nav></meter>
          <label id="pryje"></label>

          新聞中心

          EEPW首頁(yè) > 嵌入式系統(tǒng) > 設(shè)計(jì)應(yīng)用 > AVR單片機(jī)(學(xué)習(xí)ing)-ATMEGA16的定時(shí)/計(jì)數(shù)器

          AVR單片機(jī)(學(xué)習(xí)ing)-ATMEGA16的定時(shí)/計(jì)數(shù)器

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


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


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


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

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



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

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


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

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


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


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


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


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

          評(píng)論


          技術(shù)專區(qū)

          關(guān)閉
          看屁屁www成人影院,亚洲人妻成人图片,亚洲精品成人午夜在线,日韩在线 欧美成人 (function(){ var bp = document.createElement('script'); var curProtocol = window.location.protocol.split(':')[0]; if (curProtocol === 'https') { bp.src = 'https://zz.bdstatic.com/linksubmit/push.js'; } else { bp.src = 'http://push.zhanzhang.baidu.com/push.js'; } var s = document.getElementsByTagName("script")[0]; s.parentNode.insertBefore(bp, s); })();