詳解ATmega 16單片機(jī)的寄存器
掃描二維碼
隨時(shí)隨地手機(jī)看文章
ATmega 16單片機(jī)的EEPROM存儲(chǔ)器的相關(guān)寄存器(三)
EEPROM存儲(chǔ)器的相關(guān)寄存器
1.EEARH、EEARL——EEPROM地址寄存器
2.EEDR——EEPROM數(shù)據(jù)寄存器
3.EECR——EEPROM控制寄存器
—— —— —— —— EERIE EEMWE EEWE EERE
位 7..4——Res:保留
保留位,讀操作返回值為零。
位 3——EERIE:EEPROM中斷準(zhǔn)備好使能
若SREG的I為"1",則置位EERIE將使能EEPROM準(zhǔn)備好中斷。清零EERIE則禁止此中斷。當(dāng)I=EERIE=1且EEWE清零時(shí),則單片機(jī)產(chǎn)生一個(gè)中斷表示寫操作完成。
位2——EEMWE:EEPROM主機(jī)寫使能
EEMWE決定了EEWE置位是否可以啟動(dòng)EEPROM寫操作。當(dāng)EEMWE為"1"時(shí),在4個(gè)時(shí)鐘周期內(nèi)置位EEWE將把數(shù)據(jù)寫入EEPROM的指定地址。若EEMWE為"0“,則操作EEWE不起作用。EEMWE置位后4個(gè)周期,硬件對其清零。
位 1——EEWE:EEPROM寫使能
EEWE為EEPROM寫操作的使能信號。當(dāng)EEPROM數(shù)據(jù)和地址設(shè)置好之后,需置位EEWE以便將數(shù)據(jù)寫EEPROM。此時(shí)EEMWE必須置位,否則EEPROM寫操作將不會(huì)發(fā)生。寫時(shí)序如下(第3步和第4步的次序并不重要):
(1).等待EEWE位變?yōu)榱?/p>
(2).等待SPMCSR中的SPMEN位變?yōu)榱?/p>
(3).將新的EEPROM地址寫入EEAR(可選)
(4).將新的EEPROM數(shù)據(jù)寫入EEDR(可選)
(5).對EECR寄存器的EEMWE寫"1",同時(shí)清零EEWE
(6).在置位EEMWE的4個(gè)周期內(nèi),置位EEWE
注意:在EEMWE置位后的2.5-4ms后,EEEWE被硬件清零,用戶可以通過查詢此位判斷寫操作是否完成。如果在步驟5和6之間發(fā)生了中斷,寫操作將失敗。因?yàn)榇藭r(shí)EEPROM寫使能操作將超時(shí)。如果一個(gè)操作EEPROM的中斷打斷了另一個(gè)EEPROM操作,EEAR或EEDR寄存器可能被修改,引起EEPROM操作失敗。建議此時(shí)關(guān)閉全局中斷標(biāo)志I。
ATmega 16 單片機(jī)的模擬比較器的相關(guān)寄存器(四)
1.SFIOR——特殊功能IO寄存器
ADTS2 ADTS1 ADTS0 – ACME PUD PSR2 PSR10
位3——ACME:模擬比較器多路復(fù)用器使能
當(dāng)此位為邏輯"1”,且ADC處于關(guān)閉狀態(tài)(ADCSRA寄存器的ADEN為"0”)時(shí),ADC多路復(fù)用器為模擬比較器選擇負(fù)極輸入。當(dāng)此位為"0”時(shí),AIN1連接到比較器的負(fù)極輸入端。
2.ACSR——模擬比較器控制和狀態(tài)寄存器
ACD ACBG ACO ACI ACIE ACIC ACIS1 ACIS0
位7——ACD:模擬比較器禁用
ACD置位時(shí),模擬比較器的電源被切斷??梢栽谌魏螘r(shí)候設(shè)置此位來關(guān)掉模擬比較器。這可以減少器件工作模式及空閑模式下的功耗。改變ACD位時(shí),必須清零ACSR寄存器的ACIE位來禁止模擬比較器中斷。否則ACD改變時(shí)可能會(huì)產(chǎn)生中斷。
位6——ACBG:選擇模擬比較器的能隙基準(zhǔn)源
ACBG置位后,模擬比較器的正極輸入由能隙基準(zhǔn)源所取代。否則,AIN0連接到模擬比
較器的正極輸入。能隙基準(zhǔn)電壓在1.15-1.35V之間,典型值為1.23V。
位 5——ACO:模擬比較器輸出
模擬比較器的輸出經(jīng)過同步后直接連到ACO。同步機(jī)制引入了1-2個(gè)時(shí)鐘周期的延時(shí)。
位4——ACI:模擬比較器中斷標(biāo)志
當(dāng)比較器的輸出事件觸發(fā)了由ACIS1及ACIS0定義的中斷模式時(shí),ACI置位。如果ACIE和SREG寄存器的全局中斷標(biāo)志I也置位,那么模擬比較器中斷服務(wù)程序即得以執(zhí)行,同時(shí)ACI被硬件清零。ACI也可以通過寫"1”來清零。
位 3——ACIE:模擬比較器中斷使能
當(dāng)ACIE位被置"1”且狀態(tài)寄存器中的全局中斷標(biāo)志I也被置位時(shí),模擬比較器中斷被激活。否則中斷被禁止。
位 2——ACIC:模擬比較器輸入捕捉使能
ACIC置位后允許通過模擬比較器來觸發(fā)T/C1的輸入捕捉功能。此時(shí)比較器的輸出被直接連接到輸入捕捉的前端邏輯,從而使得比較器可以利用T/C1輸入捕捉中斷邏輯的噪聲抑制器及觸發(fā)沿選擇功能。ACIC為"0”時(shí)模擬比較器及輸入捕捉功能之間沒有任何聯(lián)系。為了使比較器可以觸發(fā)T/C1的輸入捕捉中斷,定時(shí)器中斷屏蔽寄存器TIMSK的TICIE1必須置位。
位 1:0–ACIS[1:0]:模擬比較器中斷模式選擇
這兩位確定觸發(fā)模擬比較器中斷的事件。需要改變設(shè)置時(shí),必須清零ACSR寄存器中的中斷使能位ACIE以禁止中斷,避免修改設(shè)置時(shí)產(chǎn)生不必要的中斷。
ACIS1 ACIS0 中斷模式
0 0 比較器輸出變化即可觸發(fā)中斷
0 1 保留
1 0 比較器輸出的下降沿產(chǎn)生中斷
1 1 比較器輸出的上升沿產(chǎn)生中斷
ATmega 16 單片機(jī)的A/D轉(zhuǎn)換器的相關(guān)寄存器(五)
1.ADMUX——ADC多工選擇寄存器
REFS1 REFS0 ADLAR MUX4 MUX3 MUX2 MUX1 MUX0
位 7:6——REFS[1:0]:參考電壓選擇
通過這2位可以選擇參考電壓。如果在轉(zhuǎn)換過程中改變了它們的設(shè)置,只有等到當(dāng)前轉(zhuǎn)換結(jié)束(ADCSRA寄存器的ADIF置位)之后改變才會(huì)起作用。如果在AREF引腳上施加了外部參考電壓,內(nèi)部參考電壓就不能被選用了。
REFS1 REFS0 參考電壓選擇
0 0 AREF,內(nèi)部Vref關(guān)閉
0 1 AVCC,AREF引腳外加濾波電容
1 0 保留
1 1 2.56V的片內(nèi)基準(zhǔn)電壓源,AREF引腳外加濾波電容
位 5——ADLAR:ADC轉(zhuǎn)換結(jié)果左對齊
ADLAR影響ADC轉(zhuǎn)換結(jié)果在ADC數(shù)據(jù)寄存器中的存放形式。ADLAR置位時(shí)轉(zhuǎn)換結(jié)果為左對齊,否則為右對齊。ADLAR的改變將立即影響ADC數(shù)據(jù)寄存器的內(nèi)容,不論是否有轉(zhuǎn)換正在進(jìn)行。
位4:0–MUX[4:0]:模擬通道與增益選擇位
通過這幾位的設(shè)置,可以對連接到ADC的模擬輸入進(jìn)行選擇。也可對差分通道增益進(jìn)行選擇。如果在轉(zhuǎn)換過程中改變這幾位的值,那么只有到轉(zhuǎn)換結(jié)束(ADCSRA寄存器的ADIF置位)后新的設(shè)置才有效。
MUX[4..0] 單端輸入 正差分輸入 負(fù)差分輸入 增益
[!--empirenews.page--]00000 ADC0
00001 ADC1
00010 ADC2
00011 ADC3 N/A
00100 ADC4
00101 ADC5
00110 ADC6
00111 ADC7
01000 ADC0 ADC0 10x
01001 ADC1 ADC0 10x
01010 ADC0 ADC0 200x
01011 ADC1 ADC0 200x
01100 ADC2 ADC2 10x
01101 ADC3 ADC2 10x
01110 ADC2 ADC2 200x
01111 ADC3 ADC2 200x
10000 ADC0 ADC1 1x
10001 ADC1 ADC1 1x
10010 N/A ADC2 ADC1 1x
10011 ADC3 ADC1 1x
10100 ADC4 ADC1 1x
10101 ADC5 ADC1 1x
10110 ADC6 ADC1 1x
10111 ADC7 ADC1 1x
11000 ADC0 ADC2 1x
11001 ADC1 ADC2 1x
11010 ADC2 ADC2 1x
11011 ADC3 ADC2 1x
11100 ADC4 ADC2 1x
11101 ADC5 ADC2 1x
11110 1.22 V(V) N/A
11111 0 V(GND)
2.ADCSRA——ADC控制和狀態(tài)寄存器A
ADEN ADSC ADATE ADIF ADIE ADPS2 ADPS1 ADPS0
位7——ADEN:ADC使能
ADEN置位即啟動(dòng)ADC,否則ADC功能關(guān)閉。在轉(zhuǎn)換過程中關(guān)閉ADC將立即中止正在進(jìn)行的轉(zhuǎn)換。
位 6——ADSC:ADC開始轉(zhuǎn)換
在單次轉(zhuǎn)換模式下,ADSC置位將啟動(dòng)一次ADC轉(zhuǎn)換。在連續(xù)轉(zhuǎn)換模式下,ADSC置位將啟動(dòng)首次轉(zhuǎn)換。第一次轉(zhuǎn)換(在ADC啟動(dòng)之后置位ADSC,或者在使能ADC的同時(shí)置位ADSC)需要25個(gè)ADC時(shí)鐘周期,而不是正常情況下的13個(gè)。第一次轉(zhuǎn)換執(zhí)行ADC初始化的工作。在轉(zhuǎn)換進(jìn)行過程中讀取ADSC的返回值為"1”,直到轉(zhuǎn)換結(jié)束。ADSC清零不產(chǎn)生任何動(dòng)作。
位5——ADATE:ADC自動(dòng)觸發(fā)使能
ADATE置位將啟動(dòng)ADC自動(dòng)觸發(fā)功能。觸發(fā)信號的上跳沿啟動(dòng)ADC轉(zhuǎn)換。觸發(fā)信號源通過SFIOR寄存器的ADC觸發(fā)信號源選擇位ADTS設(shè)置。
位4——ADIF:ADC中斷標(biāo)志
在ADC轉(zhuǎn)換結(jié)束,且數(shù)據(jù)寄存器被更新后,ADIF置位。如果ADIE及SREG中的全局中斷使能位I也置位,ADC轉(zhuǎn)換結(jié)束中斷服務(wù)程序即得以執(zhí)行,同時(shí)ADIF硬件清零。此外,還可以通過向此標(biāo)志寫1來清ADIF。要注意的是,如果對ADCSRA進(jìn)行讀-修改-寫操作,那么待處理的中斷會(huì)被禁止。這也適用于SBI及CBI指令。
位 3——ADIE:ADC中斷使能
若ADIE及SREG的位I置位,ADC轉(zhuǎn)換結(jié)束中斷即被使能。
位 2:0——ADPS[2:0]:ADC預(yù)分頻器選擇位
由這3位來確定XTAL與ADC輸入時(shí)鐘與CPU時(shí)鐘之間的分頻因子。
ADPS2 ADPS1 ADPS0 分頻因子
0 0 0 2
0 0 1 2
0 1 0 4
0 1 1 8
1 0 0 16
1 0 1 32
1 1 0 64
1 1 1 128
3.ADCL、ADCH——ADC數(shù)據(jù)寄存器
4.SFIOR——特殊功能IO寄存器
ADTS2 ADTS1 ADTS0 – ACME PUD PSR2 PSR10
位 7:5–ADTS[2:0]:ADC自動(dòng)觸發(fā)源
若ADCSRA寄存器的ADATE置位,ADTS的值將確定觸發(fā)ADC轉(zhuǎn)換的觸發(fā)源;否則,ADTS的設(shè)置沒有意義。被選中的中斷標(biāo)志在其上升沿觸發(fā)ADC轉(zhuǎn)換。從一個(gè)中斷標(biāo)志清零的觸發(fā)源切換到中斷標(biāo)志置位的觸發(fā)源會(huì)使觸發(fā)信號產(chǎn)生一個(gè)上升沿。如果此時(shí)ADCSRA寄存器的ADEN為1,ADC轉(zhuǎn)換即被啟動(dòng)。切換到連續(xù)運(yùn)行模式(ADTS[2:0]=0)
時(shí),即使ADC中斷標(biāo)志已經(jīng)置位也不會(huì)產(chǎn)生觸發(fā)事件。
ADTS2 ADTS1 ADTS0 觸發(fā)源
0 0 0 連續(xù)轉(zhuǎn)換模式
0 0 1 模擬比較器
0 1 0 外部中斷請求0
0 1 1 定時(shí)器/計(jì)數(shù)器0比較匹配
1 0 0 定時(shí)器/計(jì)數(shù)器0溢出
1 0 1 定時(shí)器/計(jì)數(shù)器比較匹配B
1 1 0 定時(shí)器/計(jì)數(shù)器1溢出
1 1 1 定時(shí)器/計(jì)數(shù)器1捕捉事件
ATmega 16 單片機(jī)的TWI接口的相關(guān)寄存器(六)
1.TWBR——TWI比特率寄存器
TWBR為比特率發(fā)生器分頻因子。比特率發(fā)生器是一個(gè)分頻器,在主機(jī)模式下產(chǎn)生SCL時(shí)鐘頻率。當(dāng)TWI工作于從機(jī)模式時(shí),不需要設(shè)定比特率寄存器或預(yù)分頻系數(shù),但從機(jī)的CPU頻率必須大于TWI時(shí)鐘線SCL頻率的16倍。
f
f=—————————————
16+2*TWBR*4(TWPS)
注意:為了保持偉輸?shù)姆€(wěn)定,TWI工作在主機(jī)模式時(shí)TWBR的值不小于10。
2.TWCR——TWI控制寄存器
TWINT TWEA TWSTA TWSTO TWWC TWEN – TWIE
TWCR用來控制TWI操作。它用來使能TWI,通過施加START到總線上來啟動(dòng)主機(jī)訪問,產(chǎn)生接收器應(yīng)答,產(chǎn)生STOP狀態(tài),以及在寫入數(shù)據(jù)到TWDR寄存器時(shí)控制總線的暫停等。這個(gè)寄存器還可以給出在TWDR無法訪問期間,試圖將數(shù)據(jù)寫入到TWDR而引起的寫入沖突信息。
位 7——TWINT:TWI中斷標(biāo)志
當(dāng)TWI完成當(dāng)前工作,希望應(yīng)用程序介入時(shí)TWINT置位。若SREG的I標(biāo)志以及TWCR寄存器的TWIE標(biāo)志也置位,則MCU執(zhí)行TWI中斷例程。當(dāng)TWINT置位時(shí),SCL信號的低電平被延長。TWINT標(biāo)志的清零必須通過軟件寫"1”來完成。執(zhí)行中斷時(shí)硬件不會(huì)自動(dòng)將其改寫為"0”。要注意的是,只要這一位被清零,TWI立即開始工作。因此,在清零TWINT之前一定要首先完成對地址寄存器TWAR,狀態(tài)寄存器TWSR,以及數(shù)據(jù)寄存器TWDR的訪問。
位 6——TWEA:使能TWI應(yīng)答
TWEA標(biāo)志控制應(yīng)答脈沖的產(chǎn)生。若TWEA置位,出現(xiàn)如下條件時(shí)接口發(fā)出ACK脈沖:
(1).器件的從機(jī)地址與主機(jī)發(fā)出的地址相符合
(2).TWAR的TWGCE置位時(shí)接收到廣播呼叫
(3).在主機(jī)/從機(jī)接收模式下接收到一個(gè)字節(jié)的數(shù)據(jù)
(4).將TWEA清零可以使器件暫時(shí)脫離總線。置位后器件重新恢復(fù)地址識(shí)別。
位 5——TWSTA:TWI START狀態(tài)標(biāo)志
當(dāng)CPU希望自己成為總線上的主機(jī)時(shí)需要置位TWSTA。TWI硬件檢測總線是否可用。若總線空閑,接口就在總線上產(chǎn)生START狀態(tài)。若總線忙,接口就一直等待,直到檢測到一個(gè)STOP狀態(tài),然后產(chǎn)生START以聲明自己希望成為主機(jī)。發(fā)送START之后軟件必須清零TWSTA。[!--empirenews.page--]
位 4——TWSTO:TWI STOP狀態(tài)標(biāo)志
在主機(jī)模式下,如果置位TWSTO,TWI接口將在總線上產(chǎn)生STOP狀態(tài),然后TWSTO自動(dòng)清零。在從機(jī)模式下,置位TWSTO可以使接口從錯(cuò)誤狀態(tài)恢復(fù)到未被尋址的狀態(tài)。此時(shí)總線上不會(huì)有STOP狀態(tài)產(chǎn)生,但TWI返回一個(gè)定義好的未被尋址的從機(jī)模式且釋放SCL與SDA為高阻態(tài)。
位 3——TWWC:TWI寫碰撞標(biāo)志
當(dāng)TWINT為低時(shí)寫數(shù)據(jù)寄存器TWDR將置位TWWC。當(dāng)TWINT為高時(shí),每一次對TWDR的寫訪問都將更新此標(biāo)志。
位 2——TWEN:TWI使能
TWEN位用于使能TWI操作與激活TWI接口。當(dāng)TWEN位被寫為"1”時(shí),TWI引腳將I/O引腳切換到SCL與SDA引腳,使能波形斜率限制器與尖峰濾波器。如果該位清零,TWI接口模塊將被關(guān)閉,所有TWI傳輸將被終止。
位1——Res:保留
保留,讀返回值為”0”。
位 0——TWIE:使能TWI中斷
當(dāng)SREG的I以及TWIE置位時(shí),只要TWINT為"1”,TWI中斷就激活。
3.TWSR——TWI狀態(tài)寄存器
位 [7..3]——TWS:TWI狀態(tài)
這5位用來反映TWI邏輯和總線的狀態(tài)。不同的狀態(tài)代碼將會(huì)在后面的部分描述。注意從TWSR讀出的值包括5位狀態(tài)值與2位預(yù)分頻值。檢測狀態(tài)位時(shí)設(shè)計(jì)者應(yīng)屏蔽預(yù)分頻位為"0”。這使?fàn)顟B(tài)檢測獨(dú)立于預(yù)分頻器設(shè)置。
位 2——Res:保留
保留,讀返回值為"0”。
位[ 1..0]——TWPS:TWI預(yù)分頻位
這兩位可讀/寫,用于控制比特率預(yù)分頻因子。
TWPS1 TWPS0 預(yù)分頻器值
0 0 1
0 1 4
1 0 16
1 1 64
4.TWDR——TWI數(shù)據(jù)寄存器
位 [7..0[——TWD:TWI數(shù)據(jù)寄存器
根據(jù)狀態(tài)的不同,其內(nèi)容為要發(fā)送的下一個(gè)字節(jié),或是接收到的數(shù)據(jù)。
5.TWAR——TWI地址寄存器
位[7..1]——TWA:TWI從機(jī)地址寄存器
其值為從機(jī)地址。
位0——TWGCE:使能TWI廣播識(shí)別
置位后MCU可以識(shí)別TWI總線廣播。
ATmega 16 單片機(jī)的WDT定時(shí)器的相關(guān)寄存器(七)
1.WDTCR——看門狗定時(shí)器控制寄存器
– – – WDTOE WDE WDP2 WDP1 WDP0
位[7..5]——Res:保留位
ATmega16保留位,讀操作返回值為零。
位 4——WDTOE:看門狗修改使能
清零WDE時(shí)必須置位WDTOE,否則不能禁止看門狗。一旦置位,硬件將在緊接的4個(gè)時(shí)鐘周期之后將其清零。
位 3——WDE:使能看門狗
WDE為"1“時(shí),看門狗使能,否則看門狗將被禁止。只有在WDTOE為"1“時(shí)WDE才能清零。以下為關(guān)閉看門狗的步驟:
(1).在同一個(gè)指令內(nèi)對WDTOE和WDE寫"1“,即使WDE已經(jīng)為"1“
(2).在緊接的4個(gè)時(shí)鐘周期之內(nèi)對WDE寫"0”
位 [2..0]——WDP2,WDP1,WDP0::看門狗定時(shí)器預(yù)分頻器2,1和0
WDP2、WDP1和WDP0決定看門狗定時(shí)器的預(yù)分頻系數(shù)。
WDP2 WDP1 WDP0 看門狗振蕩器周期 VCC=3.0V時(shí)典型的溢出周期 VCC=5.0V時(shí)典型的溢出周期
0 0 0 16K(16,384) 17.1 ms 16.3 ms
0 0 1 32K(32,768) 34.3 ms 32.5 ms
0 1 0 64K(65,536) 68.5 ms 65 ms
0 1 1 128K(131,072) 0.14 s 0.13 s
1 0 0 256K(262,144) 0.27 s 0.26 s
1 0 1 512K(524,288) 0.55 s 0.52 s
1 1 0 1,024K(1,048,576) 1.1 s 1.0 s
1 1 1 2,048K(2,097,152) 2.2 s 2.1 s
ATmega 16 單片機(jī)的中斷系統(tǒng)的相關(guān)寄存器(八)
復(fù)位和中斷向量
向量號 程序地址 中斷源 中斷定義
1 0x000 RESET 外部引腳電平引發(fā)的,上電的,掉電檢測的,看門狗,及JTAG AVR復(fù)位
2 0x002 INT0 外部中斷請求0中斷
3 0x004 INT1 外部中斷請求1中斷
4 0x006 TIMER2 COMP定時(shí)器/計(jì)數(shù)器2比較匹配中斷
5 0x008 TIMER2 OVF定時(shí)器/計(jì)數(shù)器2溢出中斷
6 0x00A TIMER1 CAPT定時(shí)器/計(jì)數(shù)器1事件捕捉中斷
7 0x00C TIMER1 COMPA定時(shí)器/計(jì)數(shù)器1比較匹配A中斷
8 0x00E TIMER1 COMPB定時(shí)器/計(jì)數(shù)器1比較匹配B中斷
9 0x010 TIMER1 OVF定時(shí)器/計(jì)數(shù)器1溢出中斷
10 0x012 TIMER0 OVF定時(shí)器/計(jì)數(shù)器0溢出中斷
11 0x014 SPI_STC SPI串行傳輸結(jié)束中斷
12 0x016 USART_RXC USART接收結(jié)束中斷
13 0x018 USART_UDRE USART數(shù)據(jù)寄存器空
14 0x01A USART_TXC USART發(fā)送結(jié)束中斷
15 0x01C ADC ADC轉(zhuǎn)換結(jié)束中斷
16 0x01E EE_RDY EEPROM就緒中斷
17 0x020 ANA_COMP 模擬比較器中斷
18 0x022 TWI 兩線串行接口中斷
19 0x024 INT2 外部中斷請求2中斷
20 0x026 TIMER0_COMP 定時(shí)器/計(jì)數(shù)器0比較匹配中斷
21 $028 SPM_RDY 保存程序存儲(chǔ)器內(nèi)容就緒
復(fù)位和中斷向量位置的確定
BOOTRST IVSEL 復(fù)位地址 中斷向量起始地址
1 0 0x0000 0x0002
1 1 0x0000 Boot區(qū)復(fù)位地址+0x0002
0 0 Boot Reset Address 0x0002
0 1 Boot Reset Address Boot區(qū)復(fù)位地址+0x0002
1.MCUCR——MCU控制寄存器
SM2 SE SM1 SM0 ISC11 ISC10 ISC01 ISC00
位3,2——ISC11,ISC10:中斷觸發(fā)方式控制1 位1與位0
外部中斷1由引腳INT1激發(fā),如果SREG寄存器的I標(biāo)志位和相應(yīng)的中斷屏蔽位置位的話。在檢測邊沿前MCU首先采樣INT1引腳上的電平。如果選擇了邊沿觸發(fā)方式或電平變化觸發(fā)方式,那么持續(xù)時(shí)間大于一個(gè)時(shí)鐘周期的脈沖將觸發(fā)中斷,過短的脈沖則不能保證觸發(fā)中斷。如果選擇低電平觸發(fā)方式,那么低電平必須保持到當(dāng)前指令執(zhí)行完成。
ISC11 ISC10 說明
0 0 INT1為低電平時(shí)產(chǎn)生中斷請求
0 1 INT1引腳上任意的邏輯電平變化都將引發(fā)中斷[!--empirenews.page--]
1 0 INT1的下降沿產(chǎn)生異步中斷請求
1 1 INT1的上升沿產(chǎn)生異步中斷請求
位1,0–ISC01,ISC00:中斷0觸發(fā)方式控制位 1與位0
外部中斷0由引腳INT0激發(fā),如果SREG寄存器的I標(biāo)志位和相應(yīng)的中斷屏蔽位置位的話。在檢測邊沿前MCU首先采樣INT0引腳上的電平。如果選擇了邊沿觸發(fā)方式或電平變化觸發(fā)方式,那么持續(xù)時(shí)間大于一個(gè)時(shí)鐘周期的脈沖將觸發(fā)中斷,過短的脈沖則不能保證觸發(fā)中斷。如果選擇低電平觸發(fā)方式,那么低電平必須保持到當(dāng)前指令執(zhí)行完成。
ISC01 ISC00 說明
0 0 INT0為低電平時(shí)產(chǎn)生中斷請求
0 1 INT0引腳上任意的邏輯電平變化都將引發(fā)中斷
1 0 INT0的下降沿產(chǎn)生異步中斷請求
1 1 INT0的上升沿產(chǎn)生異步中斷請求
2.MCUCSR——MCU控制與狀態(tài)寄存器
JTD ISC2 – JTRF WDRF BORF EXTRF PORF
位6——ISC2:中斷2觸發(fā)方式控制
異步外中斷2由外部引腳INT2激活,如果SREG寄存器的I標(biāo)志和GICR寄存器相應(yīng)的中斷屏蔽位置位的話。若ISC2寫0,INT2的下降沿激活中斷。若ISC2寫1,INT2的上升沿激活中斷。INT2的邊沿觸發(fā)方式是異步的。只要INT2引腳上產(chǎn)生寬度大于Table 36所示數(shù)據(jù)的脈沖就會(huì)引發(fā)中斷。若選擇了低電平中斷,低電平必須保持到當(dāng)前指令完成,
然后才會(huì)產(chǎn)生中斷。而且只要將引腳拉低,就會(huì)引發(fā)中斷請求。改變ISC2時(shí)有可能發(fā)生中斷。因此建議首先在寄存器GICR里清除相應(yīng)的中斷使能位INT2,然后再改變ISC2。最后,不要忘記在重新使能中斷之前通過對GIFR寄存器的相應(yīng)中斷標(biāo)志位INTF2寫'1’其清零。
3.GICR——通用中斷控制寄存器
INT1 INT0 INT2 – – – IVSEL IVCE
位7——INT1:使能外部中斷請求1
當(dāng)INT1為'1’,而且狀態(tài)寄存器SREG的I標(biāo)志置位,相應(yīng)的外部引腳中斷就使能了。MCU通用控制寄存器–MCUCR的中斷敏感電平控制1位1/0(ISC11與ISC10)決定中斷是由上升沿、下降沿,還是INT1電平觸發(fā)的。只要使能,即使INT1引腳被配置為輸出,只要引腳電平發(fā)生了相應(yīng)的變化,中斷將產(chǎn)生。
位6——INT0:使能外部中斷請求0
當(dāng)INT0為'1’,而且狀態(tài)寄存器SREG的I標(biāo)志置位,相應(yīng)的外部引腳中斷就使能了。MCU通用控制寄存器–MCUCR的中斷敏感電平控制0位1/0(ISC01與ISC00)決定中斷是由上升沿、下降沿,還是INT0電平觸發(fā)的。只要使能,即使INT0引腳被配置為輸出,只要引腳電平發(fā)生了相應(yīng)的變化,中斷將產(chǎn)生。
位 5——INT2:使能外部中斷請求2
當(dāng)INT2為'1’,而且狀態(tài)寄存器SREG的I標(biāo)志置位,相應(yīng)的外部引腳中斷就使能了。MCU通用控制寄存器–MCUCR的中斷敏感電平控制2位1/0(ISC2與ISC2)決定中斷是由上升沿、下降沿,還是INT2電平觸發(fā)的。只要使能,即使INT2引腳被配置為輸出,只要引腳電平發(fā)生了相應(yīng)的變化,中斷將產(chǎn)生。
4.GIFR——通用中斷標(biāo)志寄存器
INTF1 INTF0 INTF2 – – – – –
位 7——INTF1:外部中斷標(biāo)志1
INT1引腳電平發(fā)生跳變時(shí)觸發(fā)中斷請求,并置位相應(yīng)的中斷標(biāo)志INTF1。如果SREG的位I以及GICR寄存器相應(yīng)的中斷使能位INT1為”1”,MCU即跳轉(zhuǎn)到相應(yīng)的中斷向量。進(jìn)入中斷服務(wù)程序之后該標(biāo)志自動(dòng)清零。此外,標(biāo)志位也可以通過寫入”1”來清零。
位6——INTF0:外部中斷標(biāo)志0
INT0引腳電平發(fā)生跳變時(shí)觸發(fā)中斷請求,并置位相應(yīng)的中斷標(biāo)志INTF0。如果SREG的位I以及GICR寄存器相應(yīng)的中斷使能位INT0為”1”,MCU即跳轉(zhuǎn)到相應(yīng)的中斷向量。進(jìn)入中斷服務(wù)程序之后該標(biāo)志自動(dòng)清零。此外,標(biāo)志位也可以通過寫入”1”來清零。
位 5——INTF2:外部中斷標(biāo)志2
INT2引腳電平發(fā)生跳變時(shí)觸發(fā)中斷請求,并置位相應(yīng)的中斷標(biāo)志INTF2。如果SREG的位I以及GICR寄存器相應(yīng)的中斷使能位INT2為”1”,MCU即跳轉(zhuǎn)到相應(yīng)的中斷向量。進(jìn)入中斷服務(wù)程序之后該標(biāo)志自動(dòng)清零。此外,標(biāo)志位也可以通過寫入”1”來清零。注意,當(dāng)INT2中斷禁用進(jìn)入某些休眠模式時(shí),該引腳的輸入緩沖將禁用。這會(huì)導(dǎo)致INTF2標(biāo)志設(shè)置信號的邏輯變化。
ATmega 16 單片機(jī)的SPI的相關(guān)寄存器(九)
1.SPCR——SPI控制寄存器
SPIE SPE DORD MSTR CPOL CPHA SPR1 SPR0
位 7——SPIE:使能SPI中斷
置位后,只要SPSR寄存器的SPIF和SREG寄存器的全局中斷使能位置位,就會(huì)引發(fā)SPI中斷。
位 6——SPE:使能SPI
SPE置位將使能SPI。進(jìn)行任何SPI操作之前必須置位SPE。
位 5——DORD:數(shù)據(jù)次序
DORD置位時(shí)數(shù)據(jù)的LSB首先發(fā)送;否則數(shù)據(jù)的MSB首先發(fā)送。
位 4——MSTR:主/從選擇
MSTR置位時(shí)選擇主機(jī)模式,否則為從機(jī)。如果MSTR為"1”,SS配置為輸入,但被拉低,則MSTR被清零,寄存器SPSR的SPIF置位。用戶必須重新設(shè)置MSTR進(jìn)入主機(jī)模式。
位3——CPOL:時(shí)鐘極性
CPOL置位表示空閑時(shí)SCK為高電平;否則空閑時(shí)SCK為低電平。CPOL功能總結(jié)如下:
CPOL 起始沿 結(jié)束沿
0 上升沿 下降沿
1 下降沿 上升沿
位 2——CPHA:時(shí)鐘相位
CPHA決定數(shù)據(jù)是在SCK的起始沿采樣還是在SCK的結(jié)束沿采樣。
CPHA 起始沿 結(jié)束沿
0 采樣 設(shè)置
1 設(shè)置 采樣
位1,0——SPR1,SPR0:SPI時(shí)鐘速率選擇1與0
確定主機(jī)的SCK速率。SPR1和SPR0對從機(jī)沒有影響。SCK和振蕩器的時(shí)鐘頻率fosc關(guān)系如下表所示:
SPI2X SPR1 SPR0 SCK頻率
0 0 0 fosc/4
0 0 1 fosc/16
0 1 0 fosc/64
0 1 1 fosc/128
1 0 0 fosc/2
1 0 1 fosc/8
1 1 0 fosc/32
1 1 1 fosc/64
2.SPSR——SPI狀態(tài)寄存器
SPIF WCOL – – – – – SPI2X[!--empirenews.page--]
位7——SPIF:SPI中斷標(biāo)志
串行發(fā)送結(jié)束后,SPIF置位。若此時(shí)寄存器SPCR的SPIE和全局中斷使能位置位,SPI中斷即產(chǎn)生。如果SPI為主機(jī),SS配置為輸入,且被拉低,SPIF也將置位。進(jìn)入中斷服務(wù)程序后SPIF自動(dòng)清零?;蛘呖梢酝ㄟ^先讀SPSR,緊接著訪問SPDR來對SPIF清零。
位 6——WCOL:寫碰撞標(biāo)志
在發(fā)送當(dāng)中對SPI數(shù)據(jù)寄存器SPDR寫數(shù)據(jù)將置位WCOL。WCOL可以通過先讀SPSR,緊接著訪問SPDR來清零。
位5..1——Res:保留
保留位,讀操作返回值為零。
位0——SPI2X:SPI倍速
置位后SPI的速度加倍。若為主機(jī),則SCK頻率可達(dá)CPU頻率的一半。若為從機(jī),只能保證fosc/4。
3.SPDR——SPI數(shù)據(jù)寄存器
相對于串行數(shù)據(jù),SCK的相位和極性有4種組合。CPHA和CPOL控制組合的方式。每一位數(shù)據(jù)的移出和移入發(fā)生于SCK不同的信號跳變沿,以保證有足夠的時(shí)間使數(shù)據(jù)穩(wěn)定。說明如下:
起始沿 結(jié)束沿 SPI模式
CPOL=0,CPHA=0 采樣(上升沿) 采樣(下降沿) 0
CPOL=0,CPHA=1 設(shè)置(上升沿) 采樣(下降沿) 1
CPOL=1,CPHA=0 采樣(下降沿) 采樣(上升沿) 2
CPOL=1,CPHA=1 采樣(下降沿) 采樣(上升沿) 3
ATmega 16 單片機(jī)的USART的相關(guān)寄存器(十)
通用同步和異步串行接收器和轉(zhuǎn)發(fā)器(USART)是一個(gè)高度靈活的串行通訊設(shè)備。主要特點(diǎn)為:
全雙工操作(獨(dú)立的串行接收和發(fā)送寄存器)
異步或同步操作
主機(jī)或從機(jī)提供時(shí)鐘的同步操作
高精度的波特率發(fā)生器
支持5,6,7,8,或9個(gè)數(shù)據(jù)位和1個(gè)或2個(gè)停止位
硬件支持的奇偶校驗(yàn)操作
數(shù)據(jù)過速檢測
幀錯(cuò)誤檢測
噪聲濾波,包括錯(cuò)誤的起始位檢測,以及數(shù)字低通濾波器
三個(gè)獨(dú)立的中斷:發(fā)送結(jié)束中斷,發(fā)送數(shù)據(jù)寄存器空中斷,以及接收結(jié)束中斷
多處理器通訊模式
倍速異步通訊模式
1.UDR——USART I/O數(shù)據(jù)寄存器
USART發(fā)送數(shù)據(jù)緩沖寄存器和USART接收數(shù)據(jù)緩沖寄存器共享相同的I/O地址,稱為USART數(shù)據(jù)寄存器或UDR。將數(shù)據(jù)寫入U(xiǎn)DR時(shí)實(shí)際操作的是發(fā)送數(shù)據(jù)緩沖器存器(TXB),讀UDR時(shí)實(shí)際返回的是接收數(shù)據(jù)緩沖寄存器(RXB)的內(nèi)容。在5、6、7比特字長模式下,未使用的高位被發(fā)送器忽略,而接收器則將它們設(shè)置為0。只有當(dāng)UCSRA寄存器的UDRE標(biāo)志置位后才可以對發(fā)送緩沖器進(jìn)行寫操作。如果UDRE沒有置位,那么寫入U(xiǎn)DR的數(shù)據(jù)會(huì)被USART發(fā)送器忽略。當(dāng)數(shù)據(jù)寫入發(fā)送緩沖器后,若移位寄存器為空,發(fā)送器將把數(shù)據(jù)加載到發(fā)送移位寄存器。然后數(shù)據(jù)串行地從TxD引腳輸出。
接收緩沖器包括一個(gè)兩級FIFO,一旦接收緩沖器被尋址FIFO就會(huì)改變它的狀態(tài)。因此不要對這一存儲(chǔ)單元使用讀-修改-寫指令(SBI和CBI)。使用位查詢指令(SBIC和SBIS)時(shí)也要小心,因?yàn)檫@也有可能改變FIFO的狀態(tài)。
2.UCSRA——USART控制和狀態(tài)寄存器A
RXC TXC UDRE FE DOR PE U2X MPCM
位7——RXC:USART接收結(jié)束
接收緩沖器中有未讀出的數(shù)據(jù)時(shí)RXC置位,否則清零。接收器禁止時(shí),接收緩沖器被刷新,導(dǎo)致RXC清零。RXC標(biāo)志可用來產(chǎn)生接收結(jié)束中斷(見對RXCIE位的描述)。
位 6——TXC:USART發(fā)送結(jié)束
發(fā)送移位緩沖器中的數(shù)據(jù)被送出,且當(dāng)發(fā)送緩沖器(UDR)為空時(shí)TXC置位。執(zhí)行發(fā)送結(jié)束中斷時(shí)TXC標(biāo)志自動(dòng)清零,也可以通過寫1進(jìn)行清除操作。TXC標(biāo)志可用來產(chǎn)生發(fā)送結(jié)束中斷(見對TXCIE位的描述)。
位 5——UDRE:USART數(shù)據(jù)寄存器空
UDRE標(biāo)志指出發(fā)送緩沖器(UDR)是否準(zhǔn)備好接收新數(shù)據(jù)。UDRE為1說明緩沖器為空,已準(zhǔn)備好進(jìn)行數(shù)據(jù)接收。UDRE標(biāo)志可用來產(chǎn)生數(shù)據(jù)寄存器空中斷(見對UDRIE位的描述)。復(fù)位后UDRE置位,表明發(fā)送器已經(jīng)就緒。
位 4——FE:幀錯(cuò)誤
如果接收緩沖器接收到的下一個(gè)字符有幀錯(cuò)誤,即接收緩沖器中的下一個(gè)字符的第一個(gè)停止位為0,那么FE置位。這一位一直有效直到接收緩沖器(UDR)被讀取。當(dāng)接收到的停止位為1時(shí),F(xiàn)E標(biāo)志為0。對UCSRA進(jìn)行寫入時(shí),這一位要寫0。
位3——DOR:數(shù)據(jù)溢出
數(shù)據(jù)溢出時(shí)DOR置位。當(dāng)接收緩沖器滿(包含了兩個(gè)數(shù)據(jù)),接收移位寄存器又有數(shù)據(jù),若此時(shí)檢測到一個(gè)新的起始位,數(shù)據(jù)溢出就產(chǎn)生了。這一位一直有效直到接收緩沖器(UDR)被讀取。對UCSRA進(jìn)行寫入時(shí),這一位要寫0。
位 2——PE:奇偶校驗(yàn)錯(cuò)誤
當(dāng)奇偶校驗(yàn)使能(UPM1=1),且接收緩沖器中所接收到的下一個(gè)字符有奇偶校驗(yàn)錯(cuò)誤時(shí)UPE置位。這一位一直有效直到接收緩沖器(UDR)被讀取。對UCSRA進(jìn)行寫入時(shí),這一位要寫0。
位 1——U2X:倍速發(fā)送
這一位僅對異步操作有影響。使用同步操作時(shí)將此位清零。此位置1可將波特率分頻因子從16降到8,從而有效的將異步通信模式的傳輸速率加倍。
位 0–MPCM:多處理器通信模式
設(shè)置此位將啟動(dòng)多處理器通信模式。MPCM置位后,USART接收器接收到的那些不包含地址信息的輸入幀都將被忽略。發(fā)送器不受MPCM設(shè)置的影響。
3.UCSRB——USART控制和狀態(tài)寄存器B
RXCIE TXCIE UDRIE RXEN TXEN UCSZ2 RXB8 TXB8
位7——RXCIE:接收結(jié)束中斷使能
置位后使能RXC中斷。當(dāng)RXCIE為1,全局中斷標(biāo)志位SREG置位,UCSRA寄存器的RXC亦為1時(shí)可以產(chǎn)生USART接收結(jié)束中斷。
位6——TXCIE:發(fā)送結(jié)束中斷使能
置位后使能TXC中斷。當(dāng)TXCIE為1,全局中斷標(biāo)志位SREG置位,UCSRA寄存器的TXC亦為1時(shí)可以產(chǎn)生USART發(fā)送結(jié)束中斷。
位5——UDRIE:USART數(shù)據(jù)寄存器空中斷使能
置位后使能UDRE中斷。當(dāng)UDRIE為1,全局中斷標(biāo)志位SREG置位,UCSRA寄存器的UDRE亦為1時(shí)可以產(chǎn)生USART數(shù)據(jù)寄存器空中斷。
位 4——RXEN:接收使能
置位后將啟動(dòng)USART接收器。RxD引腳的通用端口功能被USART功能所取代。禁止接收器將刷新接收緩沖器,并使FE、DOR及PE標(biāo)志無效。
位 3——TXEN:發(fā)送使能[!--empirenews.page--]
置位后將啟動(dòng)將啟動(dòng)USART發(fā)送器。TxD引腳的通用端口功能被USART功能所取代。TXEN清零后,只有等到所有的數(shù)據(jù)發(fā)送完成后發(fā)送器才能夠真正禁止,即發(fā)送移位寄存器與發(fā)送緩沖寄存器中沒有要傳送的數(shù)據(jù)。發(fā)送器禁止后,TxD引腳恢復(fù)其通用I/O功能。
位 2——UCSZ2:字符長度
UCSZ2與UCSRC寄存器的UCSZ1:0結(jié)合在一起可以設(shè)置數(shù)據(jù)幀所包含的數(shù)據(jù)位數(shù)(字符長度)。
位 1——RXB8:接收數(shù)據(jù)位8
對9位串行幀進(jìn)行操作時(shí),RXB8是第9個(gè)數(shù)據(jù)位。讀取UDR包含的低位數(shù)據(jù)之前首先要讀取RXB8。
位 0——TXB8:發(fā)送數(shù)據(jù)位8
對9位串行幀進(jìn)行操作時(shí),TXB8是第9個(gè)數(shù)據(jù)位。寫UDR之前首先要對它進(jìn)行寫操作。
4.UCSRC——USART控制和狀態(tài)寄存器C
URSEL UMSEL UPM1 UPM0 USBS UCSZ1 UCSZ0 UCPOL
UCSRC寄存器與UBRRH寄存器共用相同的I/O地址。
位 7——URSEL:寄存器選擇
通過該位選擇訪問UCSRC寄存器或UBRRH寄存器。當(dāng)讀UCSRC時(shí),該位為1;當(dāng)寫UCSRC時(shí),URSEL為1。
位6——UMSEL:USART模式選擇
通過這一位來選擇同步或異步工作模式。
UMSEL 模式
0 異步操作
1 同步操作
位 5:4——UPM[1:0]:奇偶校驗(yàn)?zāi)J?/p>
這兩位設(shè)置奇偶校驗(yàn)的模式并使能奇偶校驗(yàn)。如果使能了奇偶校驗(yàn),那么在發(fā)送數(shù)據(jù),發(fā)送器都會(huì)自動(dòng)產(chǎn)生并發(fā)送奇偶校驗(yàn)位。對每一個(gè)接收到的數(shù)據(jù),接收器都會(huì)產(chǎn)生一奇偶值,并與UPM0所設(shè)置的值進(jìn)行比較。如果不匹配,那么就將UCSRA中的PE置位。
UPM1 UPM0 奇偶模式
0 0 禁止
0 1 保留
1 0 偶校驗(yàn)
1 1 奇校驗(yàn)
位 3——USBS:停止位選擇
通過這一位可以設(shè)置停止位的位數(shù)。接收器忽略這一位的設(shè)置。
USBS 停止位位數(shù)
0 1
1 2
位2:1——UCSZ[1:0]:字符長度
UCSZ1:0與UCSRB寄存器的UCSZ2結(jié)合在一起可以設(shè)置數(shù)據(jù)幀包含的數(shù)據(jù)位數(shù)(字符長度)。
UCSZ2 UCSZ1 UCSZ0 字符長度
0 0 0 5位
0 0 1 6位
0 1 0 7位
0 1 1 8位
1 0 0 保留
1 0 1 保留
1 1 0 保留
1 1 1 9位
位 0——UCPOL:時(shí)鐘極性
這一位僅用于同步工作模式。使用異步模式時(shí),將這一位清零。UCPOL設(shè)置了輸出數(shù)據(jù)的改變和輸入數(shù)據(jù)采樣,以及同步時(shí)鐘XCK之間的關(guān)系。
UCPOL 發(fā)送數(shù)據(jù)的改變(TxD引腳的輸出) 接收數(shù)據(jù)的采樣(RxD引腳的輸入)
0 XCK上升沿 XCK下降沿
1 XCK下降沿 XCK上升沿
5.UBRRL和UBRRH——USART波特率寄存器
UCSRC寄存器與UBRRH寄存器共用相同的I/O地址。
位15——URSEL:寄存器選擇
通過該位選擇訪問UCSRC寄存器或UBRRH寄存器。當(dāng)讀UBRRH時(shí),該位為0;當(dāng)寫UBRRH時(shí),URSEL為0。
位 14:12——保留位
這些位是為以后的使用而保留的。為了與以后的器件兼容,寫UBRRH時(shí)將這些位清零。
位 11:0——UBRR1[1:0]:USART波特率寄存器
這個(gè)12位的寄存器包含了USART的波特率信息。其中UBRRH包含了USART波特率高4位,UBRRL包含了低8位。波特率的改變將造成正在進(jìn)行的數(shù)據(jù)傳輸受到破壞。寫UBRRL將立即更新波特率分頻器。