AVR單片機(jī)(學(xué)習(xí)ing)-ATMEGA16的定時(shí)/計(jì)數(shù)器
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 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ù)程序。
當(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” 來(lái)清除該標(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” 來(lái)
清除該標(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” 來(lái)
清除該標(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” 來(lái)清除該標(biāo)志位。
• 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” 來(lái)清除該標(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” 來(lái)
清除該標(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” 來(lái)
清除該標(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” 來(lái)清除該標(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í)鐘源
• 單通道計(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)專門來(lái)操作的,盡量給力~~~這里我也不詳細(xì)介紹了,重要的是后面的寄存器
寄存器:
定時(shí)器/ 計(jì)數(shù)器TCNT2、輸出比較寄存器OCR2 為8 位寄存器。中斷請(qǐng)求( 圖中簡(jiǎn)寫為
Int.Req.)。信號(hào)在定時(shí)器中斷標(biāo)志寄存器TIFR 都有反映。 所有中斷都可以通過(guò)定時(shí)器中
斷屏蔽寄存器TIMSK 單獨(dú)進(jìn)行屏蔽。圖中未給出TIFR 與TIMSK。
T/C 的時(shí)鐘可以為通過(guò)預(yù)分頻器的內(nèi)部時(shí)鐘或 通過(guò)由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,用來(lái)產(chǎn)生輸出比較中斷請(qǐng)求。
Int.Req.)。信號(hào)在定時(shí)器中斷標(biāo)志寄存器TIFR 都有反映。 所有中斷都可以通過(guò)定時(shí)器中
斷屏蔽寄存器TIMSK 單獨(dú)進(jìn)行屏蔽。圖中未給出TIFR 與TIMSK。
T/C 的時(shí)鐘可以為通過(guò)預(yù)分頻器的內(nèi)部時(shí)鐘或 通過(guò)由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,用來(lái)產(chǎn)生輸出比較中斷請(qǐng)求。
7、8位T/C2的寄存器
1)T/C2的控制寄存器
• Bit 7 – FOC2: 強(qiáng)制輸出比較
FOC2僅在WGM指明非PWM模式時(shí)才有效。但是,為了保證與未來(lái)器件的兼容性,使用
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 的來(lái)源,以及產(chǎn)生何種波形。T/C 支
持的模式有:普通模式,比較匹配發(fā)生時(shí)清除計(jì)數(shù)器模式(CTC),以及兩種PWM 模式 。
• Bit 7 – FOC2: 強(qiáng)制輸出比較
FOC2僅在WGM指明非PWM模式時(shí)才有效。但是,為了保證與未來(lái)器件的兼容性,使用
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 的來(lái)源,以及產(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 的功能。
這些位決定了比較匹配發(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
通過(guò)T/C 寄存器可以直接對(duì)計(jì)數(shù)器的8 位數(shù)據(jù)進(jìn)行讀寫訪問(wèn)。對(duì)TCNT2 寄存器的寫訪問(wèn)
將在下一個(gè)時(shí)鐘阻止比較匹配。在計(jì)數(shù)器運(yùn)行的過(guò)程中修改TCNT2 的數(shù)值有可能丟失一
次TCNT2 和OCR2 的比較匹配。
這三位時(shí)鐘選擇位用于選擇T/C 的時(shí)鐘源,見Table 54。
2)定時(shí)器/ 計(jì)數(shù)器寄存器- TCNT2
通過(guò)T/C 寄存器可以直接對(duì)計(jì)數(shù)器的8 位數(shù)據(jù)進(jìn)行讀寫訪問(wèn)。對(duì)TCNT2 寄存器的寫訪問(wèn)
將在下一個(gè)時(shí)鐘阻止比較匹配。在計(jì)數(shù)器運(yùn)行的過(guò)程中修改TCNT2 的數(shù)值有可能丟失一
次TCNT2 和OCR2 的比較匹配。
3)輸出比較寄存器- OCR2
輸出比較寄存器包含一個(gè)8 位的數(shù)據(jù),不間斷地與計(jì)數(shù)器數(shù)值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驅(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 則是從暫存寄存器中讀取的。
• 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. 需要的話使能中斷
• 警告:在同步和異步模式之間的轉(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 用來(lái)檢查數(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)入這些
休眠模式的過(guò)程。中斷邏輯需要一個(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)過(guò)程時(shí)鐘的不穩(wěn)定性,喚醒時(shí)所有的T/C2 寄存器的內(nèi)容都可
能不正確,不論使用的是晶體還是外部時(shí)鐘信號(hào)。用戶必須重新給這些寄存器賦值。
作錯(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 用來(lái)檢查數(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)入這些
休眠模式的過(guò)程。中斷邏輯需要一個(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)過(guò)程時(shí)鐘的不穩(wěn)定性,喚醒時(shí)所有的T/C2 寄存器的內(nèi)容都可
能不正確,不論使用的是晶體還是外部時(shí)鐘信號(hào)。用戶必須重新給這些寄存器賦值。
• 使用異步時(shí)鐘時(shí)省電模式或擴(kuò)展Standby 模式的喚醒過(guò)程:中斷條件滿足后,在下一
個(gè)定時(shí)器時(shí)鐘喚醒過(guò)程啟動(dòng)。也就是說(shuō),在處理器可以讀取計(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 必須通過(guò)一個(gè)與內(nèi)部I/O 時(shí)鐘同步的寄
存器來(lái)完成。同步發(fā)生于每個(gè)TOSC1 的上升沿。從省電模式喚醒后I/O 時(shí)鐘重新激
活,而讀到的TCNT2 數(shù)值為進(jìn)入休眠模式前的值,直到下一個(gè)TOSC1 上升沿的到
來(lái)。從省電模式喚醒時(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í)鐘。
個(gè)定時(shí)器時(shí)鐘喚醒過(guò)程啟動(dòng)。也就是說(shuō),在處理器可以讀取計(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 必須通過(guò)一個(gè)與內(nèi)部I/O 時(shí)鐘同步的寄
存器來(lái)完成。同步發(fā)生于每個(gè)TOSC1 的上升沿。從省電模式喚醒后I/O 時(shí)鐘重新激
活,而讀到的TCNT2 數(shù)值為進(jìn)入休眠模式前的值,直到下一個(gè)TOSC1 上升沿的到
來(lái)。從省電模式喚醒時(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ù)程序里
硬件清零,也可以通過(guò)對(duì)其寫1 來(lái)清零。當(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
也可以通過(guò)寫1 來(lái)清零。當(dāng)SREG 中的位I、TOIE2 和TOV2 都置位時(shí),中斷服務(wù)程序
得到執(zhí)行。在PWM 模式中,當(dāng)T/C2 在0x00 改變記數(shù)方向時(shí), TOV2 置位。
當(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ù)程序里
硬件清零,也可以通過(guò)對(duì)其寫1 來(lái)清零。當(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
也可以通過(guò)寫1 來(lái)清零。當(dāng)SREG 中的位I、TOIE2 和TOV2 都置位時(shí),中斷服務(wù)程序
得到執(zhí)行。在PWM 模式中,當(dāng)T/C2 在0x00 改變記數(shù)方向時(shí), TOV2 置位。
這里也用到特殊功能寄存器:補(bǔ)充:
好了,現(xiàn)在基本上好了~~累死了
好了,現(xiàn)在基本上好了~~累死了
下面就是實(shí)驗(yàn)了,哈哈
4位秒表啊~~~吼吼
先貼張圖片看看那
然后就是Proteus仿真~~~
然后就是Proteus仿真~~~
出了點(diǎn)問(wèn)題~~整了半天~~哭
關(guān)鍵詞:
AVR單片機(jī)ATMEGA16定時(shí)計(jì)數(shù)
相關(guān)推薦
技術(shù)專區(qū)
- FPGA
- DSP
- MCU
- 示波器
- 步進(jìn)電機(jī)
- Zigbee
- LabVIEW
- Arduino
- RFID
- NFC
- STM32
- Protel
- GPS
- MSP430
- Multisim
- 濾波器
- CAN總線
- 開關(guān)電源
- 單片機(jī)
- PCB
- USB
- ARM
- CPLD
- 連接器
- MEMS
- CMOS
- MIPS
- EMC
- EDA
- ROM
- 陀螺儀
- VHDL
- 比較器
- Verilog
- 穩(wěn)壓電源
- RAM
- AVR
- 傳感器
- 可控硅
- IGBT
- 嵌入式開發(fā)
- 逆變器
- Quartus
- RS-232
- Cyclone
- 電位器
- 電機(jī)控制
- 藍(lán)牙
- PLC
- PWM
- 汽車電子
- 轉(zhuǎn)換器
- 電源管理
- 信號(hào)放大器
評(píng)論