官术网_书友最值得收藏!

1.6 ATmega 16 單片機的系統控制

本節將介紹ATmega 16單片機的系統控制。

1.時鐘系統

ATmega 16單片機通過Flash熔絲位來選擇系統時鐘,如表1-3所示。時鐘輸入到AVR時鐘發生器,再分頻到相關的模塊。器件出廠時默認設置為CKSEL =“0010”,SUT=“10”。這種默認設置的時鐘源為1MHz的內部RC振蕩器,啟動時間最長,保證用戶可以通過ISP或者并行編程器得到所需的時鐘源。

表1-3 ATmega 16時鐘選項

說明:對于所有熔絲位,1表示未編程,0表示已編程。

1)晶體振蕩器

XTAL1和XTAL2分別是晶體振蕩器的反向放大器的輸入端和輸出端,如圖1-5所示。

圖1-5 晶體振蕩器

這個振蕩器可以使用石英晶體或者陶瓷諧振器,熔絲位CKOPT用來選擇這兩種放大器模式之一。當CKOPT被編程時振蕩器在輸出引腳產生滿幅度的振蕩,這種模式適合于噪聲環境及需要通過XTAL2驅動第2個時鐘緩沖器的情況,而且這種模式的頻率范圍比較大。當保持CKOPT未編程狀態時,振蕩器輸出信號幅度比較小,其優點是功耗大大降低,但頻率范圍較小且不能驅動其他時鐘緩沖器。

對于諧振器,CKOPT未編程時最大頻率為8MHz;CKOPT編程時最大頻率為16MHz。C1和C2的數值要相同,振蕩器可以在3種模式下工作,每一種模式都有一個優化的頻率范圍,如表1-4所示。

表1-4 晶體振蕩器

表1-5給出了熔絲位CKSEL[0]及SUT[1:0]用于選擇的啟動時間。

表1-5 晶體振蕩器啟動時間

2)低頻晶體振蕩器

為了使用32.768kHz鐘表晶體作為器件的時鐘源,必須將熔絲位CKSEL[3:0]設置為“1001”已選擇低頻晶體振蕩器。用戶可以通過對CKOPT的編程選擇使能XTAL1和XTAL2的內部電容(標定值為36pF),從而去掉外部電容。此時啟動時間由熔絲位SUT確定,如表1-6所示。

表1-6 低頻晶體振蕩器啟動時間

3)外部RC振蕩器

對時間不敏感的應用可以使用外部RC振蕩器,如圖1-6所示。振蕩器頻率可以通過公式 f =1(/ 3× RC)來計算,圖中電容至少需要22pF。用戶可以通過編程熔絲位CKOPT來使能XTAL1和GND之間的片內36pF電容,從而省去外部電容。

圖1-6 外部RC振蕩器

振蕩器具有4種工作模式,每種模式都有優化的頻率范圍,通過熔絲位CKSEL[3:0]設定,如表1-7所示。

表1-7 外部RC振蕩器

表1-8給出了外部RC振蕩器的啟動時間。

表1-8 外部RC振蕩器的啟動時間

4)標定的片內RC振蕩器

標定的片內RC振蕩器提供了固定的1.0MHz、2.0MHz、4.0MHz和8.0MHz的時鐘,這些頻率都是在5V、25℃的條件下的標定值。表1-9給出了其熔絲位編程值,選擇這個時鐘(此時不能對CKOPT進行編程)之后無須外部器件。復位時硬件將標定的字節加載到OSCCAL寄存器,自動完成對RC振蕩器的標定。

表1-9 內部RC振蕩器的熔絲位編程值

表1-10給出了內部RC振蕩器啟動時間。

表1-10 內部RC振蕩器的啟動時間

振蕩器標定寄存器OSCCAL定義如下:

位[7:0]-CAL[7:0]:振蕩器標定數據。

將標定數據寫入這個地址可以對內部振蕩器進行調節以消除生產工藝所帶來的振蕩器頻率偏差。復位時1MHz的標定數據(標識數據的高字節,地址為0x00)自動加載到OSCCAL寄存器。如果需要內部RC振蕩器以其他頻率工作,則標定數據必須人工加載:首先通過編程器讀取標識數據,然后將標定數據保存到Flash或EEPROM中。這些數據可以通過軟件讀取,然后加載到OSCCAL寄存器。當OSCCAL為零時振蕩器以最低頻率工作;當對其寫入不為零的數據時內部振蕩器的頻率將增大。寫入0xFF即得到最高頻率,標定的振蕩器用來為訪問EEPROM和Flash定時。在寫EEPROM和Flash的操作時不要將頻率標定到超過標準頻率的10%,否則寫操作有可能失敗。要注意振蕩器只對1.0MHz、2.0MHz、4.0MHz和8.0MHz這4種頻率進行了標定,其他頻率則無法保證。

5)外部時鐘

為了從外部時鐘源驅動芯片,XTAL1必須如圖1-7所示進行連接,同時熔絲位CKSEL必須編程為“0000”。若熔絲位CKOPT也被編程,則用戶可以使用內部的XTAL1和GND之間的36pF電容。

圖1-7 外部時鐘

在選擇外部時鐘時,啟動時間由熔絲位SUT確定,如表1-11所示。

表1-11 外部時鐘啟動時間

6)T/C振蕩器

對于擁有T/C振蕩器引腳(TOSC1和TSOC20)的AVR單片機來說,晶體可以直接連接這兩個引腳,而無須外部電容。此振蕩器對32.768kHz的鐘表晶體做了優化,不建議在TOSC1引腳直接輸入振蕩信號。

2.電源管理及睡眠模式

睡眠模式可以使AVR單片機關掉沒有使用到的模塊從而降低功耗,AVR單片機具有不同的睡眠模式允許用戶根據實際應用來實施剪裁。進入睡眠模式的條件是執行寄存器MCUCR的SE,然后執行SLEEP指令。具體進入哪一種睡眠模式(空閑模式、ADC噪聲抑制模式、掉電模式、省電模式、Standby模式或擴展的Standby模式)由MCUCR寄存器的SM[2:0]決定。進入睡眠模式之后,使能的中斷可以將AVR喚醒。經過啟動時間,外加4個時鐘周期AVR就可以運行中斷服務程序了,然后回到SLEEP之后的下一條指令。喚醒時不會改變寄存器文件和SRAM的內容,如果在睡眠過程中發生了復位,則AVR喚醒后從中斷向量開始運行。

AVR控制寄存器包含了電源管理的控制位。

位7、5、4-SM[2:0]為休眠模式選擇位,如表1-12所示。

表1-12 休眠模式選擇位

注意:僅在使用外部晶體或諧振器時Standby模式和擴展的Standby模式才可用。

位6-SE為休眠模式使能位。

為了使AVR在執行SLEEP指令之后進入休眠模式,SE必須置位,建議在SLEEP指令的前一條指令置位SE,AVR在喚醒之后立即清除SE位。

ATmega 16單片機的各種喚醒模式下的時鐘和喚醒源請參考數據表。

3.復位系統

ATmega 16有5個復位源:上電復位、外部復位、看門狗復位、掉電檢測復位及JTAG復位。復位時所有的I/O寄存器都被設置為初始值,程序從復位向量開始執行。復位向量處的指令必須是絕對跳轉指令JMP,以使程序跳轉到復位處理例程。請參考數據表查看各種復位模式的時序。

MCU控制和狀態寄存器提供了AVR復位源的信息。

● 位4-JTRF:JTAG復位標志。通過JTAG指令AVR_RESET可以使JTAG復位寄存器置位,并引發AVR復位及JTRF置位。上電復位將使其清零,也可以通過寫0來清除。

● 位3-WDRF:看門狗復位標志。看門狗復位發生時置位,上電復位將使其清零,也可以通過寫0來清除。

● 位2-BORF:掉電檢測復位標志。掉電檢測復位發生時置位,上電復位將使其清零,也可以通過寫0來清除。

● 位1-EXTRF:外部復位標志。外部復位發生時置位,上電復位將使其清零,也可以通過寫0來清除。

● 位0-PORF:上電復位標志。上電復位發生時置位,只能通過寫0來清除。

為了使用這些復位標志來識別復位條件,用戶應該盡早讀取此寄存器的數據,然后將其復位。如果在其他復位發生之前將此寄存器復位,則后續復位源可以通過檢查復位標志來了解。

主站蜘蛛池模板: 宜兰市| 北安市| 申扎县| 兴宁市| 兴化市| 略阳县| 绥棱县| 乌兰察布市| 兰坪| 土默特右旗| 梓潼县| 疏附县| 抚宁县| 沽源县| 浙江省| 明星| 迁西县| 布尔津县| 和顺县| 墨江| 龙门县| 深水埗区| 阳西县| 齐齐哈尔市| 抚远县| 屯留县| 肇州县| 潮州市| 合水县| 柘荣县| 环江| 五华县| 库车县| 婺源县| 库车县| 汾阳市| 东乌| 年辖:市辖区| 长寿区| 阜新| 大宁县|