學(xué)習(xí)筆記之 AVR單片機(jī)詳解匯編語言編程_第1頁
學(xué)習(xí)筆記之 AVR單片機(jī)詳解匯編語言編程_第2頁
學(xué)習(xí)筆記之 AVR單片機(jī)詳解匯編語言編程_第3頁
學(xué)習(xí)筆記之 AVR單片機(jī)詳解匯編語言編程_第4頁
學(xué)習(xí)筆記之 AVR單片機(jī)詳解匯編語言編程_第5頁
已閱讀5頁,還剩36頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

學(xué)習(xí)筆記之一:AVR單片機(jī)詳解=====================================================說明:此為我的學(xué)習(xí)筆記,參考摘錄了多本書中的內(nèi)容,以AVR單片機(jī)的結(jié)構(gòu),特點(diǎn),系統(tǒng)等作了詳細(xì)描述,適合當(dāng)作手冊(cè)來翻閱。文中相關(guān)部分是以匯編語言來描述的。但最終要大量使用的是C語言,具體請(qǐng)看《學(xué)習(xí)筆記之二:?jiǎn)纹瑱C(jī)編程之C語言》。一、關(guān)于AVR系列單片機(jī)Avr單片機(jī)是ATMEL公司1997年推出的全新配置精簡(jiǎn)指令集(RISC)單片機(jī)。Avr單片機(jī)的開發(fā)目的在于:能采用C語言編程,從而能高效地開發(fā)出目標(biāo)產(chǎn)品。在Avr單片機(jī)中,運(yùn)用Harvard(哈佛)結(jié)構(gòu),在前一條指令執(zhí)行的時(shí)候,就取出現(xiàn)行的指令,然后以1個(gè)周期執(zhí)行指令。由于采用Harvard結(jié)構(gòu),因此程序存儲(chǔ)器和數(shù)據(jù)存儲(chǔ)器是分開的。可直接訪問全部程序存儲(chǔ)器和數(shù)據(jù)存儲(chǔ)器。在其他的CISC以及類似的RISC結(jié)構(gòu)中,外部振蕩器的時(shí)鐘被分頻降低到傳統(tǒng)的內(nèi)部執(zhí)行周期,這種分頻最大達(dá)12倍。Avr單片機(jī)是用1個(gè)時(shí)鐘周期執(zhí)行1條指令的,是在8位單片機(jī)中第一種真正的RISC單片機(jī)。Avr單片機(jī)采用低功率、非揮發(fā)的CMOS工藝制造,內(nèi)載Flash,EEPROM及SRAM等不同用處的存儲(chǔ)器。通過SIP口和一般編程器,可對(duì)Avr單片機(jī)的Flash存儲(chǔ)器進(jìn)行編程。二、單片機(jī)特點(diǎn)摘要(這里以AT90S8535型號(hào)的單片機(jī)為例,以后所述除特別說明都以這個(gè)型號(hào)的單片機(jī)為主線)片內(nèi)8KB的Flash程序存儲(chǔ)器,一次讀取一個(gè)字(16位),可反復(fù)擦寫、修改程序1000次以上不損壞。高速,每個(gè)時(shí)鐘周期執(zhí)行一條指令,主頻8MHZ時(shí),大多數(shù)指令僅需125ns。Flash對(duì)程序有多重密碼保護(hù)、鎖死功能,具有高度保密性。32個(gè)通用工作寄存器均可作累加器,512字節(jié)的SRAM。低功耗。工作電壓:2.7~6V,抗電源波動(dòng)能力強(qiáng)。512B的EEPROM(電擦寫存儲(chǔ)器),掉電不丟失信息,可在線改寫,壽命100000次。32個(gè)I/O口,輸入/輸出的方向可以定義。輸出口的驅(qū)動(dòng)能力強(qiáng),灌電流可達(dá)40mA,能直接驅(qū)動(dòng)LED、繼電器等器件,省去驅(qū)動(dòng)電路;輸入口可以三態(tài)輸入,也可帶內(nèi)部上拉電阻,省去外接上拉電阻。2個(gè)8位和1個(gè)16位定時(shí)/計(jì)數(shù)器,且具有比較匹配輸出和輸入捕獲功能??删幊痰目撮T狗定時(shí)器。有模擬比較器,便于發(fā)現(xiàn)輸入模擬電壓信號(hào)。8通道10位ADC,可直接輸入模擬電壓信號(hào)。2通過10位和1路8位的PWM脈寬調(diào)制輸出,經(jīng)濾波輸出模擬電壓信號(hào),可作D/A輪換器。全雙工UART異步串行接口,便于RS232-C和RS485通信接口。有SPI同步串行接口。有獨(dú)立振蕩器的實(shí)時(shí)時(shí)鐘(RTC),具有計(jì)時(shí)功能。有16種中斷源,每種中斷源在程序空間都有一個(gè)獨(dú)立的中斷向量作相應(yīng)的中斷入口地址。三、引腳定義(封裝圖如下圖1) (1)Vcc,GND:電源,地 (2)A口(PA7~PA0): A口是一個(gè)8位雙向I/O口,每一個(gè)引腳都有內(nèi)部上拉電阻。A口的輸出緩沖器能夠吸收20mA的電流,可直接驅(qū)動(dòng)LED;當(dāng)作輸入時(shí),如果外部被拉低,由于上拉電阻的存在,引腳將輸出電流。在復(fù)位過程中,A口為三態(tài),即使上時(shí)時(shí)鐘還未起振。A口還可用作ADC的模擬輸入口。 (3)B口(PB7~PB0): B口是一個(gè)8位雙向I/O口,每一個(gè)引腳都有內(nèi)部上拉電阻。B口的輸出緩沖器能夠吸收20mA的電流,可直接驅(qū)動(dòng)LED;當(dāng)作輸入時(shí),如果外部被拉低,由于上拉電阻的存在,引腳將輸出電流。在復(fù)位過程中,B口為三態(tài),即使上時(shí)時(shí)鐘還未起振。 (4)C口(PC7~PC0): C口是一個(gè)8位雙向I/O口,每一個(gè)引腳都有內(nèi)部上拉電阻。C口的輸出緩沖器能夠吸收20mA的電流,可直接驅(qū)動(dòng)LED;當(dāng)作輸入時(shí),如果外部被拉低,由于上拉電阻的存在,引腳將輸出電流。C口的2個(gè)引腳還可用作T/C2的振蕩器。在復(fù)位過程中,C口為三態(tài),即使上時(shí)時(shí)鐘還未起振。 圖1、AT90S8535的幾種封裝 (5)D口(PD7~PD0): D口是一個(gè)8位雙向I/O口,每一個(gè)引腳都有內(nèi)部上拉電阻。D口的輸出緩沖器能夠吸收20mA的電流,可直接驅(qū)動(dòng)LED;當(dāng)作輸入時(shí),如果外部被拉低,由于上拉電阻的存在,引腳將輸出電流。在復(fù)位過程中,D口為三態(tài),即使上時(shí)時(shí)鐘還未起振。 (6)RESET:復(fù)位輸入,超過50ns的低電平將引起系統(tǒng)復(fù)位;低于50ns時(shí)間的脈沖不能保證可靠復(fù)位。 (7)XTAL1:振蕩器放大器的輸入端。(8)XTAL2:振蕩器放大器的輸出端。(9)AVcc:A/D轉(zhuǎn)換器的電源,應(yīng)通過一個(gè)低通濾波器與Vcc連接。(10)AREF:A/D轉(zhuǎn)換器的參考電源,介于AGND與AVcc之間。(11)AGND:模擬地。(12)晶體振蕩器: XTAL1和XTAL2分別是片內(nèi)振蕩器的輸入/輸出端,可用晶體振蕩器或陶瓷振蕩器,如圖2; 當(dāng)用外部時(shí)鐘時(shí),XTAL2應(yīng)NC,如圖3;圖2.晶振連接圖3.外部時(shí)鐘驅(qū)動(dòng)設(shè)置(13)實(shí)時(shí)時(shí)鐘振蕩器: 晶振可直接連接到振蕩口的引腳PC6(TOSC1)和PC7(TOSC2)而無需外部電容。 振蕩器已經(jīng)對(duì)32768Hz的晶振做了優(yōu)化,對(duì)外加信號(hào)的帶寬為256kHz。四、AT90S8535單片機(jī)CPU AvrRISC結(jié)構(gòu),如下圖4所示圖4.AT90S8535AVRRISC結(jié)構(gòu) 通用工作寄存器,如下圖5和圖6圖5.內(nèi)存映像圖6.通用工作寄存器 X、Y、Z寄存器:寄存器R26~R31除用作通用寄存器外,還可作為數(shù)據(jù)間接尋址的地址指針,如下圖7.150X寄存器7070R27($1B)R26($1A)Y寄存器7070R27($1D)R26($1C)Z寄存器7070R27($1F)R26($1E)圖7.X,Y,Z寄存器五、AT90S8535單片機(jī)的存儲(chǔ)器組織 所有指令為16位寬,F(xiàn)lash大小為4K×16 程序計(jì)數(shù)器PC為12們寬,可尋址到4096個(gè)字的Flash程序區(qū)。 內(nèi)部SRAM的數(shù)據(jù)存在器(數(shù)據(jù)組織方式見下圖8),起始的96個(gè)地址為寄存器文件和I/O寄存器,其后512個(gè)地址用于尋址SRAM。圖8.SRAM的分布 AT90S8535包含512B的EEPROM,是作為一個(gè)獨(dú)立的數(shù)據(jù)空間而存在的,可按字節(jié)讀/寫。EEPROM的訪問由地址寄存器、數(shù)據(jù)寄存器及控制寄存器決定。AT90S8535的I/O寄存器空間,詳見下表1: 表1.AT90S8535的I/O空間(表中沒有列出的地址為保留地址,有$3C($5C),$37($57),$36($56),$31($51),$30($50),$20($40),$03($23),$02($22),$01($21),$00($20))I/O(數(shù)據(jù))地址名稱功能$3F($5F)SREG狀態(tài)寄存器$3E($5E)SPH堆棧指針高字節(jié)$3D($5D)SPL堆棧指針低字節(jié)$3B($5B)GIMSK通用中斷屏蔽寄存器$3A($5A)GIFR通用中斷標(biāo)志寄存器$39($59)TIMSKT/C中斷屏蔽寄存器$38($58)TIFRT/C中斷標(biāo)志寄存器$35($55)MCUCRMCU控制寄存器$34($54)MCUSRMCU狀態(tài)寄存器$33($53)TCCR0T/C0控制寄存器$32($52)TCNT0T/C08位計(jì)數(shù)器$2F($4F)TCCR1AT/C1控制寄存器A$2E($4E)TCCR1BT/C1控制寄存器B$2D($4D)TCNT1HT/C1高字節(jié)$2C($4C)TCNT1LT/C1低字節(jié)$2B($4B)OCR1AHT/C1輸出比較寄存器A高字節(jié)$2A($4A)OCR1ALT/C1輸出比較寄存器A低字節(jié)$29($49)OCR1BHT/C1輸出比較寄存器B高字節(jié)$28($48)OCR1BLT/C1輸出比較寄存器B低字節(jié)$27($47)ICR1HT/C1輸入捕獲寄存器高字節(jié)$26($46)ICR1LT/C1輸入捕獲寄存器低字節(jié)$25($45)TCCR2T/C2控制寄存器$24($44)TCNT2T/C28位計(jì)數(shù)器$23($43)OCR2T/C2輸出比較寄存器$22($42)ASSR異步模式狀態(tài)寄存器$21($41)WDTCR看門狗控制寄存器$1F($3F)EEARHEEPROM高地址寄存器$1E($3E)EEARLEEPROM低地址寄存器$1D($3D)EEDREEPROM數(shù)據(jù)寄存器$1C($3C)EECREEPROM控制寄存器$1B($3B)PORTAA口數(shù)據(jù)寄存器$1A($3A)DDRAA口數(shù)據(jù)方向寄存器$19($39)PINAA口輸入引腳$18($38)PORTBB口數(shù)據(jù)寄存器$17($37)DDRBB口數(shù)據(jù)方向寄存器$16($36)PINBB口輸入引腳$15($35)PORTCC口數(shù)據(jù)寄存器$14($34)DDRCC口數(shù)據(jù)方向寄存器$13($33)PINCC口輸入引腳$12($32)PORTDD口數(shù)據(jù)寄存器$11($31)DDRDD口數(shù)據(jù)方向寄存器$10($30)PINDD口輸入引腳$0F($2F)SPDRSPI數(shù)據(jù)寄存器$0E($2E)SPSRSPI狀態(tài)寄存器$0D($2D)SPCRSPI控制寄存器$0C($2C)UDRUART數(shù)據(jù)寄存器$0B($2B)USRUART狀態(tài)寄存器$0A($2A)UCRUART控制寄存器$09($29)WBRRUART波特率寄存器$08($28)ASCR模擬比較哭喊控制和狀態(tài)寄存器$07($27)ADMUXADC多路選擇寄存器$06($26)ADCSRADC控制和狀態(tài)寄存器$05($25)ADCHADC數(shù)據(jù)寄存器高字節(jié)$04($24)ADCLADC數(shù)據(jù)寄存器低字節(jié) IN和OUT指令用來訪問不同的I/O地址,以及在32個(gè)通用寄存器之間傳輸數(shù)據(jù)。當(dāng)使用IN和OUT指令時(shí),地址必須在$00~3F之間,如果要像SRAM一樣訪問I/O寄存器,則相應(yīng)地址要加上$20。為了與后續(xù)產(chǎn)品兼容,保留未用的位應(yīng)寫”0”,而保留的I/O寄存器則不應(yīng)寫。SBI和CBI指令只對(duì)$00~$1F有效。 系統(tǒng)復(fù)位共有三個(gè)復(fù)位源:上電復(fù)位,外部復(fù)位,看門狗復(fù)位: 上電復(fù)位:當(dāng)供電電平加至Vcc和GND引腳時(shí),MCU時(shí)行復(fù)位 外部各位:RESET復(fù)位引腳上的低電壓引發(fā)外部復(fù)位,大于50ns的復(fù)位脈沖將造成芯片復(fù)位 看門狗復(fù)位:當(dāng)看門狗定時(shí)器溢出時(shí),將產(chǎn)生一個(gè)XTAL的短暫復(fù)位脈沖,在此脈沖的下降沿,延時(shí)定時(shí)器開始對(duì)超時(shí)時(shí)間計(jì)數(shù)。 使用Avr的EEPROM注意3點(diǎn):a。避開0地址;b。程序在做初始化時(shí),不要寫EEPROM,在進(jìn)入讀/寫之前確保有數(shù)ms的延時(shí),即等機(jī)器完全穩(wěn)定后,才能操作EEPROM;c。最安全的方法是加復(fù)位電壓檢測(cè)器,如下圖9:圖9.復(fù)位檢測(cè)器件引腳接線圖表2.AT90S8535指令118條(不同型號(hào)芯片的指令可能會(huì)不同,詳見對(duì)應(yīng)手冊(cè) 注:1.源寄存器Rn均可為R0~R31,表中操作數(shù)范圍省略了0≤n≤31 2.表中標(biāo)志是指對(duì)Z,C,N,V,C5標(biāo)志的影響,指令對(duì)其有影響的在表中列出,下標(biāo)為0者執(zhí)行指令后該標(biāo)志清0;標(biāo)志為1者執(zhí)行指令后該標(biāo)志置1;無下標(biāo)者執(zhí)行指令后該標(biāo)志可能會(huì)變化,方向不定。 3影響I,T2標(biāo)志的指令很少。匯編器偽指令,如下表3.表3.匯編偽指令指令語法說明BYTELABEL:.BYTE表達(dá)式保存存儲(chǔ)的內(nèi)容到SRAM中,該指令僅用在數(shù)據(jù)段內(nèi)CSEG.CSEG定義代碼段的開始位置DBLABEL:.DB表達(dá)式[表]保存數(shù)據(jù)到程序存儲(chǔ)器或EEPROM存儲(chǔ)器中DEF.DEF符號(hào)=寄存器設(shè)置寄存器的符號(hào)名,DEF偽指令允許寄存器用符號(hào)代替DEVICE.DEVICEAT90S8535定義被匯編的器件DSEG.DSEG定義數(shù)據(jù)段的開始DWLABEL:.DW表達(dá)式表在程序存儲(chǔ)器和EEPROM在存儲(chǔ)器中定義字常數(shù),表達(dá)式表是一系列表達(dá)式,用逗號(hào)分隔,每個(gè)表達(dá)式必須是32768~65535間的有效值ENDMACRO.ENDMACRO宏結(jié)束EQU.EQU標(biāo)號(hào)=表達(dá)式設(shè)置一個(gè)符號(hào)相等于一個(gè)表達(dá)式.此標(biāo)號(hào)是一個(gè)常數(shù),不能改變或重定義ESEG.ESEG定義EEPROM段的開始位置EXIT.EXIT退出文件,告訴匯編器停止匯編該文件INCLUDE.INCLUDE“文件名”包含另外的文件,從指定的文件開始讀,然后匯編器匯編指定的文件,直到文件結(jié)束或遇到EXIT偽指令LIST.LIST打開列表文件生成器LISTMAC.LISTMAC打開宏表達(dá)式MACRO.MACRO宏名宏開始。宏可帶參數(shù)(最多10個(gè)),這些參數(shù)在宏定義中用@0~@9代表,當(dāng)調(diào)用一個(gè)宏時(shí),參數(shù)用逗號(hào)分隔.NOLIST.NOLIST關(guān)閉列表文件生成器ORG.ORG表達(dá)式設(shè)置定位計(jì)數(shù)器一個(gè)絕對(duì)值SET.SET標(biāo)號(hào)=表達(dá)式設(shè)置一個(gè)與表達(dá)式相等的符號(hào) LOW(表達(dá)式):返回一個(gè)表達(dá)式的低字節(jié) HIGH(表達(dá)式):返回一個(gè)表達(dá)式的第2個(gè)字節(jié) BYTE2(表達(dá)式):與HIGH相同 BYTE3(表達(dá)式):返回一個(gè)表達(dá)式的第3個(gè)字節(jié) BYTE4(表達(dá)式):返回一個(gè)表達(dá)式的第4個(gè)字節(jié) LWRD(表達(dá)式):返回一個(gè)表達(dá)式的0~15位 HWRD(表達(dá)式):返回一個(gè)表達(dá)式的16~31位 PAGE(表達(dá)式):返回一個(gè)表達(dá)式的16~21位 EXP2(表達(dá)式):返回2的(表達(dá)式)次冪 LOG2(表達(dá)式):返回LOG2(表達(dá)式)的整數(shù)部分表4.部分運(yùn)算符符號(hào)名稱優(yōu)先級(jí)符號(hào)名稱優(yōu)先級(jí)!邏輯非14<=小于或等于10~按位非14>大于10-負(fù)號(hào)14>=大于或等于10*乘13==恒等于9/除13!=不等于9+加12&按位與8-減12^按位異或7<<左移11|按位或6>>右移11&&邏輯與5<小于10||邏輯或4六、8535單片機(jī)的EEPROM的讀/寫寫入EEPROM的時(shí)間約在2.5~4ms之間,取決于Vcc電壓。用于訪問EEPROM的寄存器位于I/O空間,有以下4個(gè):EEARH,EEARL,EEDR,EECREEPROM的地址寄存器――EEARH,EEARL位15141312111098$1F($3F)-------EEAR8EEARH$1E($3E)EEAR7EEAR6EEAR5EEAR4EEAR3EEAR2EEAR1EEAR0EEARL位76543210讀/寫RRRRRRRR/WR/WR/WR/WR/WR/WR/WR/WR/W 初始化值:0b0000000XXXXXXXXXEEPROM的數(shù)據(jù)寄存器――EEDR位76543210$1D($3D)MSBEEAR6EEAR5EEAR4EEAR3EEAR2EEAR1LSBEEDR讀/寫R/WR/WR/WR/WR/WR/WR/WR/W初始化值:$00位7~0――EEDR7~EEDR0:EEPROM數(shù)據(jù)對(duì)于EEPROM寫入操作,EEDR寄存器包含了寫入EEPROM的數(shù)據(jù),由EEAR寄存器給出其地址;對(duì)于EEPROM的讀取操作,EEDR包含由EEAR給出的EEPROM地址,數(shù)據(jù)將從這一地址中讀出。EEPROM的控制寄存器――EECR位76543210$1C($3C)----EERIEEEMWEEEWEEEREEECR讀/寫RRRRR/WR/WR/WR/W初始化值:$00位7~4――Res:保留位,90系列單片機(jī)的這些位為保留位,總讀0位3――EERIE:EEPROM準(zhǔn)備好中斷使能。位2――EEMWE:EEPROM的主寫使能。位1――EEWE:EEPROM寫入使能。只有EEMWE置1時(shí),且在EEMWE置1后4個(gè)周期內(nèi),把EEWE置1,才能將數(shù)據(jù)寫入EEPROM所選擇的地址中,因?yàn)楫?dāng)EEMWE被軟件設(shè)置后,4個(gè)周期后被硬件清除;EEMWE置0時(shí),EEWE將無效。位0――EERE:EEPROM讀取使能以下為片內(nèi)EEPROM的讀/寫例程,以供參考:程序清單:.include“8535def.inc”rjmp RESET ;處理復(fù)位EEWrite: ;寫EEPROM子程,r18,r17放寫入地址,r16放要寫入的數(shù)據(jù)sbicEECR,EEWE ;如果EEWE不清除rjmpEEWrite ;等待outEEARH,r18 ;輸出地址outEEARL,r17outEEDR,r16 ;輸出數(shù)據(jù)sbiEECR,EEMWE ;設(shè)置EEPROM寫選通SbiEECR,EEWE ;該指令需4個(gè)時(shí)鐘周期,由于它暫停CPU2個(gè)時(shí)鐘周期retEERead: ;讀EEPROM子程,r18,r17入讀出地址,r16入讀取的數(shù)據(jù)sbicEECR,EEWE ;如果EEWE不清除rjmpEERead ;等待outEEARH,r18 ;輸出地址outEEARL,r17sbiEECR,EERE ;設(shè)置EEPROM讀選通inr16,EEDR ;讀入數(shù)據(jù)retEEWrite_seq: ;連續(xù)寫EEPROM子程,寫入地址(r25,r24)+1,寫入的數(shù)據(jù)入r16sbicEECR,EEWE ;如果EEWE不清除rjmpEEWrite_seq ;等待inr24,EEARL ;得到地址inr25,EEARHadiwr24,0x01 ;地址加1outEEARL,r24 ;輸出地址outEEARH,r25outEEDR,r16 ;輸出數(shù)據(jù)sbiEECR,EEMWE ;設(shè)置EEPROM寫選通sbiEECR,EEWEretEERead_seq ;連續(xù)讀EEPROM子程,讀出地址(年5,年4)+1,讀到的數(shù)據(jù)放r16sbicEECR,EEWE ;如果EEWE不清除rjmpEERead_seq ;等待inr24,EEARL ;得到地址inr25,EEARHadiwr24,0x01 ;地址加1outEEARL,r24 ;輸出地址outEEARH,r25sbiEECR,EERE ;設(shè)置EEPROM讀選通inr16,EEDR ;讀入數(shù)據(jù)ret;測(cè)試程序RESET:ldir16,$02 ;棧指針置初值outSPH,r16ldir16,$5FoutSPI,r16;*****將aa寫入EEPROM的$40地址,再讀出來送B口輸出ldir16,$FF ;定義B口為輸出outDDRB,r16ldir16,$aaldir18,$00ldir17,$40rcallEEWrite ;存儲(chǔ)$AA到EEPROM的$40地址ldir18,$00ldir17,$40rcallEERead ;讀$10地址outPORTB,r16 ;輸出到PORTB口;*****惟$55,$aa,$55,$aa,…模式填充EEPROMldir19,16serr20outEEARH,r20 ;EEARH←$FFserr20outEEARL,r20 ;EEAR←$FF(startaddress-1)loop1:ldir16,$55rcallEEWrite_seq ;寫$55到EEPROMldir16,$aarcallEEWrite_seq ;寫$AA到EEPROMdecr19 ;計(jì)數(shù)器減1brneloop1 ;未完成;****拷貝EEPROM最前10個(gè)字節(jié)到r2~r11serr20outEEARH,r20 ;EEARH←$FFserr20outEEARL,r20 ;EEAR←$FF(startaddress-1)clrZHldiZL,1 ;Z指針指向r1loop2:rcallEERead_seq ;得到EEPROM數(shù)據(jù)stZ,r16 ;存儲(chǔ)到SRAMincZLcpiZL,12 ;到結(jié)尾?brneloop2 ;未完成,循環(huán)forever:rjmpforever ;無限循環(huán)七、8535的I/O口 A口數(shù)據(jù)寄存器PORTA,數(shù)據(jù)方向寄存器DDRA的初始值為$00 A口輸入引腳地址PINA初始值:PINA7~PINA0都為Hi-Z,PINA不是一個(gè)寄存器,該地址允許對(duì)A口的每一個(gè)引腳的物理值進(jìn)行訪問。當(dāng)讀PORTA時(shí),讀到的是PORTA的數(shù)據(jù)鎖存器;當(dāng)讀PINA時(shí),引腳上的邏輯值被讀取。 B口數(shù)據(jù)寄存器PORTB,數(shù)據(jù)方向寄存器DDRB,輸入引腳地址PINB的描述類同A。C口數(shù)據(jù)寄存器PORTC,數(shù)據(jù)方向寄存器DDRC,輸入引腳地址PINB的描述類同A。D口數(shù)據(jù)寄存器PORTD,數(shù)據(jù)方向寄存器DDRD,輸入引腳地址PINB的描述類同A。 下面以PC0為例,說明不考慮端口的第2功能時(shí),I/O口內(nèi)部電路及工作原理,如下圖: WP:寫C口;WD:寫DDRC;RL:讀C口鎖存器;RP:讀C口腳;RD:讀DDRCPC0口的內(nèi)部工作原理圖 1。當(dāng)C口方向寄存器DDRC的第0位置位(DDC0=1)時(shí),PC0口定義輸出。 2。當(dāng)DDC0=0時(shí),PC0口定義輸入。 DDC0是可讀的,用指令inr16,DDRC,再看r16的第0位;PORTC0的輸出Q也是可讀的,用指令inr16,PORTC,再看r16的第0位,讀的是鎖存器(PORTC);PINC0是可讀的,用指令inr16,DDRC,再看r16的第0位,讀的是引腳電平;DDC0,PORTC0都是可寫的(可定義輸入或輸出和確定輸出電平的高低等);但PINC是不可寫的(引腳電平的高低是外部客觀存在)。 PORTC的另外7個(gè)端子不考慮端口的第2功能時(shí),I/O口基本輸入、輸出功能是一樣的。 列表:C口引腳的DDCn作用(n:7,6,…,1,0)DDCnPORTCnI/O上拉注釋00輸入否三態(tài)(高阻)01輸入是外部拉低是PCn引腳會(huì)輸出電流10輸出否0輸出11輸出否1輸出 3。C口是一個(gè)帶內(nèi)部上拉的8位雙向I/O口,點(diǎn)了3個(gè)I/O寄存器地址,分別是PORTC,DDRC,PINC。C口所有引腳都有獨(dú)立可選的上拉,C口的輸出緩沖器可吸收20mA的電流,以直拉驅(qū)動(dòng)LED顯示,當(dāng)PC0~PC7引腳被用作輸入且被外部拉低時(shí),若內(nèi)部拉高被觸發(fā)這些引腳將成為電流源(I)。I/O口應(yīng)用,例1:數(shù)字撥碼盤輸入2位BCD碼,數(shù)碼管靜態(tài)顯示出來,如下圖: B口定義為帶內(nèi)部上拉的輸入口,例如撥盤撥為3,則數(shù)據(jù)線2,1與A相通,讀入低電平;8,4與A不通,讀入高電平,即讀入為$0C,取反即為3。C口、D口定義為輸出,經(jīng)300歐電阻接2共陰數(shù)碼管各段,數(shù)碼管公共端拉地。程序如下:.include“8535def.inc”rjmpresettab:.db$3f,$06,$5f,$4f,$66,$6d,$7d,$07,$7f,$6f ;7段碼表reset:ldir16,$02 ;堆棧指針置初值outsph,r16ldir16,$5foutspl,r16ldir16,0 ;定義B口輸入帶上拉outddrb,r16ldir16,$ffoutportb,r16outddrc,r16 ;定義C口、D口為輸出outddrd,r16inr16,pinb ;讀B口引腳comr16 ;取反movr17,r16andir16,$0f ;取個(gè)位BCD碼swapr17 ;半字節(jié)交換andir17,$0f ;取10們BCD碼ldiZH,high(tab*2) ;查個(gè)位7段碼ldiZL,low(tab*2)addZL,r16lpmoutportc,r0 ;送C口靜態(tài)輸出ldiZH,high(tab*2) ;查10位7段碼ldiZL,low(tab*2)addZL,r17lpmoutportd,r0 ;送D口靜態(tài)輸出h:rjmph 例2。動(dòng)態(tài)掃描5位數(shù)碼管顯示 上例靜態(tài)顯示1位數(shù)碼需占8位口,要顯示5位則需40位輸出口,這顯然不實(shí)用,為節(jié)省輸出口,可采用動(dòng)態(tài)掃描方式,顯示5位數(shù)碼只需13位輸出口,如下圖 C口作字線,D口低5位作位線,動(dòng)態(tài)掃描顯示5位數(shù)碼,數(shù)碼管共陰。待顯示的16位二進(jìn)制數(shù)在r17:r16中,將其二轉(zhuǎn)十,5位BCD碼的個(gè),十,百,千,萬分別存于r18,r19,r20,r21,r22中。每隔1ms將1位BCD碼查出7段碼送B口輸出,送相應(yīng)的位線由D口輸出,延時(shí)1ms,再顯示下一位。這樣,每隔1ms顯示1位,5ms顯示1遍,反復(fù)調(diào)用掃描顯示子程,每秒可顯示200遍。實(shí)驗(yàn)證明,每少顯示30遍以上,人眼就可看見穩(wěn)定的5位數(shù)字,程序如下:.include“8535def.inc”.org$0000rjmpresettab:.db$3f,$06,$5f,$4f,$66,$6d,$7d,$07,$7f,$6freset:ldir16,low(ramend) ;堆棧指針置初值outspl,r16ldir16,high(ramend)outsph,r16ldir16,$ff ;定義PB,PD為輸出口outddrb,r16outddrd,r16ldir16,$ff ;設(shè)待顯示數(shù)為$FFFFldir17,$ffrcallb16td5 ;調(diào)二轉(zhuǎn)十子程movr22,r20movr21,r19movr20,r18movr19,r17movr18,r16aa:rcallsmaio ;調(diào)動(dòng)態(tài)掃描子程rjmpaab16td5:serr20 ;r20先送-1b16td5_1:incr20 ;r20增1subir16,low(10000) ;(r17:r16)<-10000sbcir17,high(10000)brccb16td5_1 ;夠減則返回subir16,low(-10000) ;不夠減+10000,恢復(fù)余數(shù)sbcir17,high(-10000)serr19b16td5_2:incr19subir16,low(1000)sbcir17,high(1000)brccb16td5_2subir16,low(-1000)sbcir17,high(-1000)serr18b16td5_3:incr18subir16,low(100)sbcir17,high(100)brccb16td5_3subir16,low(-100)sbcir17,high(-100)serr17b16td5_4:incr17subir16,10brccb16td5_4subir16,-10retsmiao:ldir16,$fe ;送個(gè)位位線outportd,r16movr23,r18 ;將個(gè)位的BCD碼送r23rcallcqb ;查7段碼,送B口輸出rcallt1ms ;延時(shí)1msldir16,$fd ;送十位位線outportd,r16movr23,r19 ;將十位的BCD碼送r23rcallcqb ;查7段碼,送B口輸出rcallt1ms ;延時(shí)1msldir16,$fb ;送百位位線outportd,r16movr23,r20 ;將百位的BCD碼送r23rcallcqb ;查7段碼,送B口輸出rcallt1ms ;延時(shí)1msldir16,$f7 ;送千位位線outportd,r16movr23,r21 ;將千位的BCD碼送r23rcallcqb ;查7段碼,送B口輸出rcallt1ms ;延時(shí)1msldir16,$ef ;送萬位位線outportd,r16movr23,r22 ;將萬位的BCD碼送r23rcallcqb ;查7段碼,送B口輸出rcallt1ms ;延時(shí)1msretcqb:ldizh,high(tab*2) ;7段碼的首地址給Zldizl,low(tab*2)addzl,r23 ;首地址+偏移量lpm ;查表送B口輸出outportb,r0rett1ms:ldir24,101pushr24del2:pushr24del3:decr24brnedel3popr24decr24brnedel2popr24ret八、中斷系統(tǒng)及應(yīng)用 AT90S8535有16個(gè)中斷源,每個(gè)中斷源在程序空間都有一個(gè)獨(dú)立的中斷向量,所有的中斷事件都有自己的使能位,在使能位置位,且I也置位的情況下,中斷可以發(fā)生。 程序空間的最低位置定義為復(fù)位及中斷向量,處于低地址的中斷具有高的優(yōu)先級(jí),中斷表如下向量號(hào)程序地址來源定義1$000RESET硬件引腳上電復(fù)位和看門狗復(fù)位2$001INT0外部中斷03$002INT1外部中斷14$003TIMER2COMPT/C2比較匹配5$004TIMER2OVFT/C2溢出6$005TIMER1CAPTT/C1捕捉事件7$006TIMER1COMPATC1比較匹配A8$007TIMER1COMPBTC1比較匹配B9$008TIMER1OVFT/C1溢出10$009TIMER0OVFT/C0溢出11$00ASPI,STC串行傳輸結(jié)束12$00BUART,RXUART接收結(jié)束13$00CUART,UDREUART數(shù)據(jù)寄存器空14$00DUARTUART發(fā)送結(jié)束15$00EADCADC轉(zhuǎn)換結(jié)束16$00FEE_RDYEEPROM準(zhǔn)備好17$010ANA_COMP模擬比較器 對(duì)中斷的處理,AT90S8535有2個(gè)中斷屏蔽控制寄存器:GIMSK――通用中斷屏蔽寄存器;TIMSK――T/C中斷屏蔽寄存器 一個(gè)中斷產(chǎn)生后,全局中斷使能位I將被清0,后續(xù)中斷被屏蔽。用戶可以在中斷例程里對(duì)I置位,從而開放中斷,執(zhí)行RETI后,I重新置位。 注意:外部電平中斷沒有中斷標(biāo)志位,因此當(dāng)電平變?yōu)榉侵袛嚯娖胶?,中斷條件即終止。 以下為幾個(gè)與中斷有關(guān)的I/O寄存器: 通用中斷屏蔽寄存器――GIMSK位76543210$3B($5B)INT1INT0------GIMSK讀/寫R/WR/WRRRRRR 初始化值:$00 位7,INT1,外部中斷1請(qǐng)求使能,當(dāng)INT1和I都為“1”時(shí),外部引腳中斷使能。MCU通用控制寄存器(MCUCR)中的中斷檢測(cè)控制位I/O(ISCI1和ISCI0)定義中斷I是上升沿中斷還是下降沿中斷,或都是低電平中斷。即使引腳被定義為輸出,中斷仍可產(chǎn)生。下INT0同。位6,INT0,外部中斷0請(qǐng)求使能,當(dāng)INT0和I都為“1”時(shí),外部引腳中斷使能。位5~0,保留位。通用中斷標(biāo)志寄存器――GIFR位76543210$3A($5A)INTF1INTF0------GIFR讀/寫R/WR/WRRRRRR 初始化值:$00位7,INTF1,外部中斷標(biāo)志1,當(dāng)INTF1引腳有事件觸發(fā)中斷請(qǐng)求時(shí),INTF1置位“1”。如果SREG中的I及GIMSK中的INT1都為“1”,則MCU將跳轉(zhuǎn)到中斷地址#002。中斷例程執(zhí)行后,此標(biāo)志被清除,另外,標(biāo)志也可通過對(duì)其寫“1”來清除。下INTF0同。位7,INTF0,外部中斷標(biāo)志0,當(dāng)INTF0引腳有事件觸發(fā)中斷請(qǐng)求時(shí),INTF0置位“1”。位5~0,保留位。T/C中斷屏蔽寄存器――TIMSK位76543210$39($59)OCIE2TOIE2TICIE1OCIE1AOCIE1BTOIE1-TOIE0TIMSK讀/寫R/WR/WR/WR/WR/WR/WRR/W 初始化值:$00位7――OCIE2:T/C2輸出比較匹配中斷使能。當(dāng)TOIE2和I都為1時(shí),輸出比較匹配中斷使能。當(dāng)T/C2的比較匹配發(fā)生,或TIFR中的OCF2置位,中斷例程($003)將執(zhí)行。位6――TCIE2:T/C2溢出中斷使能。當(dāng)TOIE2和I都為1時(shí),T/C2溢出中斷使能。當(dāng)T/C2溢出,或TIFR中的TOV2置位,中斷例程($004)將執(zhí)行。位5――TICIE1:T/C1輸入捕捉中斷使能。當(dāng)TICIE1和I都為1時(shí),輸入捕捉中斷使通。當(dāng)T/C1的輸入捕捉事件發(fā)生(ICP),或TIFR中的ICF1置位,中斷例程($005)將執(zhí)行。位4――OCIE1A:T/C1輸出比較A匹配中斷使能。當(dāng)TOIE1A和I都為1時(shí),輸出比較A匹配中斷使能。當(dāng)T/C1的比較A匹配發(fā)生,或TIFR中的OCF1A置位,中斷例程($006)將執(zhí)行。位3――OCIE1B:T/C1輸出比較B匹配中斷使能。當(dāng)TOIE1B和I都為1時(shí),輸出比較B匹配中斷使能。當(dāng)T/C1的比較B匹配發(fā)生,或TIFR中的OCF1B置位,中斷例程($007)將執(zhí)行。位2――TOIE1:T/C1溢出中斷使能。當(dāng)TOIE1和I都為1時(shí),T/C1溢出中斷使能。當(dāng)T/C1溢出,或TIFR中的TOV1置位,中斷例程($008)將執(zhí)行。位1保留位。位0――TOIE0:T/C0溢出中斷使能。當(dāng)TOIE0和I都為1時(shí),T/C0溢出中斷使能。當(dāng)T/C0溢出,或TIFR中的TOV0置位,中斷例程($009)將執(zhí)行。T/C中斷標(biāo)志寄存器――TIFR位76543210$38($58)OCF2TOV2ICF1OCF1AOCF1BTOV1-TOV0TIFR讀/寫R/WR/WR/WR/WR/WR/WRR/W 初始化值:$00各位的意義及用法見上面的TIMSK中的描述。各非保留位,在執(zhí)行相應(yīng)中斷例程后,相應(yīng)位會(huì)被硬件清0,此外,也可通過寫“1”來清0。MCU控制寄存器――MCUCR位76543210$38($58)-SESM1SM0ISC11ISC10ISC01ISC00MCUCR讀/寫RR/WR/WR/WR/WR/WR/WR/W 初始化值:$00位7――保留位位6――SE:休眠使能。執(zhí)行SLEEP指令時(shí),SE必須置位,才能使MCU進(jìn)入休眠模式。位5,4――SM1,SM0:休眠模式,這2位用于選擇休眠模式,如下表SM1SM0休眠模式00空閑01保留10掉電11省電位3,2――ISC11,ISC10:中斷I檢測(cè)控制,位1和位0,選擇INT1中斷的邊沿或電平如下表:ISC11ISC10休眠模式00低電平中斷01保留10下降沿中斷11上升沿中斷注:改變ISC11/ISC10時(shí),先要禁止INT1(清除GIMSK的INT1位);否則可能引發(fā)不必要的中斷。位1,0――ISC01,ISC00:中斷I檢測(cè)控制,位1和位0,選擇INT1中斷的邊沿或電平類同ISC11,ISC10。注:ISC01/ISC00時(shí),首先要禁止INT0(清除GIMSK的INT0位);否則可能引發(fā)不必要的中斷。INTn引腳的電平在檢測(cè)邊沿之前采樣。如果邊沿中斷使能,則大于1個(gè)MCU時(shí)鐘的脈沖將觸發(fā)中斷。如果選擇了低電平觸發(fā),則此電平必須保持到當(dāng)前執(zhí)行的指令結(jié)束。九、8535單片機(jī)定時(shí)器/計(jì)數(shù)器及其應(yīng)用 定時(shí)/計(jì)數(shù)器常用作帶內(nèi)部時(shí)鐘的時(shí)基定時(shí)器或用作外部引腳上的脈沖計(jì)數(shù)器,其中有些還具有輸入捕獲、比較匹配、PWM脈寬調(diào)制輸出等功能。AT90S8535還有一個(gè)看門狗定時(shí)器(WDT),用于程序的抗干擾。 1。定時(shí)器/計(jì)數(shù)器0 T/C0為8位加1計(jì)數(shù)器,由$00開始計(jì)數(shù),計(jì)到$FF后再來一時(shí)鐘則溢出,計(jì)數(shù)器清0.可用作定時(shí)和計(jì)數(shù)。 用作定時(shí),時(shí)鐘來自晶振時(shí)鐘CK或其4鐘分頻,由于時(shí)鐘頻率準(zhǔn)確,溢出的時(shí)間間隔是準(zhǔn)確的; 用作外計(jì)數(shù)時(shí),外部引腳T0輸入信號(hào),可選上升或下降沿計(jì)數(shù); 另外,T/C0還可停止不用。T/C0的控制寄存器――TCCR0位76543210$33($53)-----CS02CS01CS00TCCR0讀/寫RRRRRR/WR/WR/W 初始化值:$00 位7~3――保留位。 位2,1,0――CS02,CSO1,CS00:T/C0時(shí)鐘選擇位2,1及0.其時(shí)鐘預(yù)定選擇如下表:CS02CS01CS00說明000停止,T/C0被停止001CK010CK/8011CK/64100CK/256101CK/1024110外部T0腳,下降沿111外部T0腳,上升沿T/C0寄存器――TCNT0位76543210$32($52)MSB------LSBTCNT0讀/寫R/WRRRRRRR/W 初始化值:$00 TNT0是帶讀/寫訪問的向上計(jì)數(shù)器。若TCNT0被寫入,同是時(shí)鐘源正被執(zhí)行,則其在寫入操作之后繼續(xù)計(jì)數(shù)。它是8位加1計(jì)數(shù)器,由$00開始計(jì)數(shù),計(jì)到$FF后再來一時(shí)鐘則溢出,計(jì)數(shù)器清0。TCNT0溢出后,定時(shí)器/計(jì)數(shù)器中斷標(biāo)志存在器(TIFR)中的TOV0位置1。若TIMSK中的TOIE0為1,且SREG中的I位為1,則可產(chǎn)生定時(shí)器/計(jì)數(shù)器0流出中斷。 T/C0應(yīng)用例程1:作計(jì)數(shù)器。如下圖脈沖信號(hào)從PB0(T0)引腳輸入,T/C0作計(jì)數(shù)器,計(jì)數(shù)結(jié)果由PC口以二進(jìn)制從發(fā)光二極管顯示輸出。程序如下:.include“8535def.inc”.org$000rjmpmainmain:ldir16,low(ramend) ;堆棧指針置初值outspl,r16ldir16,high(ramend)outsph,r16ldir16,$07 ;上升沿計(jì)數(shù)outtccr0,r16ldir16,0 ;T/C0置初值0outtcnt0,r16ldir16,$ff ;PC口作輸出outddrc,r16 loop:inr16,tcnt0 outportc,r16 rjmploop T/C0應(yīng)用例程2:作定時(shí)器。8MHz晶振,1024分頻,128μs計(jì)1個(gè)數(shù)。T/C0初值為131,每計(jì)125個(gè)數(shù)(16ms),T/C0溢出1次。其中中斷服務(wù)子程序使PC0改變方向,產(chǎn)生32ms的對(duì)稱方波。1s=1000ms=1000000μs=1000000000ns 程序如下: .include“8535def.inc” .org$000 rjmpmain .org$009 rjmptim0_ovf main:ldir16,low(ramend) outspl,r16 ldir16,high(ramend) outsph,r16 ldir16,$01 ;允許T0流出中斷 outtimsk,r16 ldir16,$05 ;1024分頻 outtccr0,r16 ldir17,131 ;T/C0置初始值131 outtcnt0,r17 outtifr,r16 ldir16,$ff ;PC口作輸出 outddrc,r16 sei here:rjmpheretim0_ovf:inr1,sreg;保存sreg ldir17,131outtccr0,r17inr18,portc ;讀C口數(shù)據(jù)寄存器comr18 ;取反outportc,r18 ;送C口數(shù)據(jù)寄存器outsreg,r1 ;恢復(fù)sregreti改變分頻系數(shù)和中斷服務(wù)子程中給T/C0的初值,均可改變中斷時(shí)間間隔。2。定時(shí)器/計(jì)數(shù)器1定時(shí)器/計(jì)數(shù)器1是16位加1計(jì)數(shù)器。它可用于定時(shí),也可用于對(duì)名部引腳T1脈沖信號(hào)計(jì)數(shù),還可停止不用,這些與定時(shí)器/計(jì)數(shù)器0功能一樣,中不過它是16位計(jì)數(shù)器,計(jì)數(shù)值為$0000~$FFFF,再加1則溢出,且計(jì)數(shù)器清0。此外,定時(shí)器/計(jì)數(shù)器1還具有比較匹配輸出功能,可實(shí)現(xiàn)使引腳在事先預(yù)定的時(shí)刻發(fā)生跳變或中斷,而不用CPU隨時(shí)關(guān)照,以節(jié)省CPU的時(shí)間。定時(shí)器/計(jì)數(shù)器1可用作8位、9位或10位PWM脈沖調(diào)制器。在此模式下,定時(shí)器和OCR1A/OCR1B寄存器用于2個(gè)無尖峰干擾的中心對(duì)稱的PWM。PWM脈沖經(jīng)濾波,可得到模擬電壓信號(hào)。改變PWM脈沖的占空比,即可改變模擬電壓的大小。這種PWM脈沖還便于隔離抗干擾,只用1個(gè)光耦隔離即可。定時(shí)器/計(jì)數(shù)器1還具有輸入捕獲功能,由控制寄存器TCCR1B來定義。另外模擬比較器也可觸發(fā)該輸入捕獲。ICP的引腳邏輯如下圖:如果噪音清除器使能,則觸發(fā)信號(hào)要進(jìn)行4次采樣。只有當(dāng)4個(gè)采樣值都相等時(shí),才會(huì)觸發(fā)捕獲標(biāo)志。輸入引腳信號(hào)以XTAL的時(shí)鐘頻率被采樣。1.定時(shí)器/計(jì)數(shù)器1控制寄存器A――TCCR1A位76543210$2F($4F)COM1A1COM1A0COM1B1COM1B0--PWM11PWM10TCCR1A讀/寫R/WR/WR/WR/WRRR/WR/W初始化值:$00位7,6――COM1A1,COM1A0:比較輸出模式1A,位1和0。COM1A1和COM1A0控制位決定了在定時(shí)器/計(jì)數(shù)器1中比較匹配之后的輸出引腳事件。輸出引腳事件影響OC1A,即輸出比較A引腳1。由于這是對(duì)I/O口的可替換功能,相應(yīng)的方向控制位必須設(shè)為1,以便對(duì)于輸出引腳進(jìn)行控制,控制設(shè)置如下表:(位5,4類同)x=A或BCOM1x1COM1x0說明00定時(shí)器/計(jì)數(shù)器1與輸出腳OC1x不連接01觸發(fā)OC1x輸出線10清除OC1x輸出線(為0)11設(shè)置OC1x輸出線(為1)位5,4――COM1B1,COM1B0:比較輸出模式1B,位1和0。(描述類同COM1A1,COM1A0)在PWM模式下,這些位有不同的功能,參見接下來的PWM模式選擇表。當(dāng)變換COM1x1和COM1x0位時(shí),輸出比較器中斷1必須通過清除TIMSK寄存器中的中斷使通位來禁止,否則在位變換時(shí),會(huì)發(fā)生中斷。位3,2――保留位。90系統(tǒng)單片機(jī)的該位為保留位,總讀0位1,0――PWM11,PWM10:脈沖寬度調(diào)制器選擇位,見下PWM模式選擇表:列表。PWM模式選擇PWM11PWM10說明00禁止定時(shí)器/計(jì)數(shù)器1的PWM操作01定時(shí)器/計(jì)數(shù)器1為8位PWM10定時(shí)器/計(jì)數(shù)器1為9位PWM11定時(shí)器/計(jì)數(shù)器1為10位PWM 2.定時(shí)器/計(jì)數(shù)器1控制寄存器B――TCCR1B位76543210$2E($4E)ICNC1ICES1--CTC1CS12CS11CS10TCCR1B讀/寫R/WR/WRRR/WR/WR/WR/W初始化值:$00位7――ICNC1:輸入捕獲噪音清除器(4CKs)。當(dāng)ICNC1位被清0,輸入捕獲觸發(fā)噪音清除器功能被禁止。輸入捕獲在指定的ICP,即在輸入捕獲引腳上被采樣的第1個(gè)上升/下降沿處被激活。當(dāng)ICNC1位被置1,4個(gè)延續(xù)的采樣成為ICP,即輸入捕獲引腳上的測(cè)量值,所有的采樣需為高/低,取決于ICES1位的輸入捕獲觸發(fā)特性。實(shí)際的采樣頻率為XTAL時(shí)鐘頻率。 位6――ICES1:輸入捕獲1邊沿選擇。 當(dāng)ICES1位被清0/(置1)時(shí),定時(shí)器/計(jì)數(shù)器1的內(nèi)容被傳輸?shù)捷斎氩东@寄存器ICR1,即在輸入捕獲引腳ICP的下降/(上升)邊沿。位5,4――保留位,總讀0位3――CTC1:在比較匹配上清除定時(shí)器/計(jì)數(shù)器0。 當(dāng)CTC1被置1時(shí),在比較匹配之后,定時(shí)器/計(jì)數(shù)器1被復(fù)位到時(shí)鐘周期中的$0000. 當(dāng)CTC1被清0時(shí),定時(shí)器/計(jì)數(shù)器1繼續(xù)計(jì)數(shù),直到它被停止、清除、溢出或被改變方向。 在PWM模式下,該位無效。位2,1,0――CS12,CS11,CS10:時(shí)鐘選擇1的位。其預(yù)定比例源見下表:CS12CS11CS10說明000停止,T/C1被停止001CK010CK/8011CK/64100CK/256101CK/1024110外部T1腳,下降沿111外部T1腳,上升沿3.定時(shí)器/計(jì)數(shù)器1――TCNT1H和TCNT1L位15141312111098$2D($4D)MSB--TCNT1H$2C($4C)LSBTCNT1L76543210讀/寫R/WR/WR/WR/WR/WR/WR/WR/W初始化值:$0000這個(gè)16位的寄存器包括6位定時(shí)器/計(jì)數(shù)器1的預(yù)定比例值。當(dāng)確保當(dāng)CPU訪問這些寄存器時(shí),高、低字節(jié)被同時(shí)讀寫,使用一個(gè)8位的暫存寄存器(TEMP)來完成訪問。TCNT1定時(shí)器/計(jì)數(shù)器1寫入:當(dāng)CPU向高位字節(jié)TCNT1H寫入時(shí),寫入的數(shù)據(jù)被放入TEMP寄存器中。然后當(dāng)CPU向低字節(jié)TCNT1L寫入時(shí),數(shù)據(jù)的字節(jié)被與TEMP寄存器中的字節(jié)數(shù)據(jù)組合,且全部的16位被同步地身TCNT1定時(shí)器/計(jì)數(shù)器1寄存器寫入。TCNT1定時(shí)器/計(jì)數(shù)器1讀?。寒?dāng)CPU讀低位字節(jié)TCNT1L時(shí),TCNT1L低字節(jié)的數(shù)據(jù)被送到CPU,且高字節(jié)TCNT1H的數(shù)據(jù)被放置于TEMP寄存器中;當(dāng)CPU讀高位字節(jié)TCNT1H時(shí),CPU接收TEMP寄存器中的數(shù)據(jù)。4.定時(shí)器/計(jì)數(shù)器1輸出比較寄存器――OCR1AH和OCR1AL位15141312111098$2B($4B)MSB--OCR1AH$2A($4A)LSBOCR1AL76543210讀/寫R/WR/WR/WR/WR/WR/WR/WR/W初始化值:$00005.定時(shí)器/計(jì)數(shù)器1輸出比較寄存器――OCR1BH和OCR1BL位15141312111098$29($49)MSB--OCR1BH$28($48)LSBOCR1BL76543210讀/寫R/WR/WR/WR/WR/WR/WR/WR/W初始化值:$0000輸出比較器為一個(gè)16位讀/寫寄存器。定時(shí)器/計(jì)數(shù)器1輸出比較寄存器包括了將要連續(xù)地與定時(shí)器/計(jì)數(shù)器1相比較的數(shù)據(jù)。比較匹配的操作在定時(shí)器/計(jì)數(shù)器1的控制和狀態(tài)寄存器中被區(qū)分6.定時(shí)器/計(jì)數(shù)器1輸入捕獲寄存器――ICR1H和ICR1L位15141312111098$27($47)MSB--ICR1H$26($46)LSBICR1L76543210讀/寫R/WR/WR/WR/WR/WR/WR/WR/W初始化值:$0000當(dāng)輸入捕獲引腳ICP上信號(hào)的上升或下降沿(根據(jù)輸入捕獲邊沿設(shè)置ICES1)被檢測(cè)到時(shí),定時(shí)器/計(jì)數(shù)器1的當(dāng)前值被傳輸?shù)捷斎氩东@寄存器ICR1;同時(shí),輸入捕獲標(biāo)志ICF1被設(shè)為1.3。定時(shí)器/計(jì)數(shù)器2T/C2的時(shí)鐘源稱為PCK2。若ASSR的AS2位清0,PCK2與系統(tǒng)主時(shí)鐘連接;若置位,T/C2將由PC6(TOSC1)異步驅(qū)動(dòng),使得T/C2可以作為一個(gè)實(shí)時(shí)時(shí)鐘。如果AS2置位,則PC6(TOSC1)和PC7(TOSC2)從C口脫離。引腳上即可外接一個(gè)時(shí)鐘,也可在PC6(TOSC1)上直接施加時(shí)鐘信號(hào)。此時(shí)鐘頻率必須低于MCU主時(shí)鐘的1/4,并且不能高于256kHz。T/C2控制寄存器――TCCR2位76543210$25($45)-PWM2COM21COM20CTC2CCS22CS21CS20TCCR2讀/寫RR/WR/WR/WR/WR/WR/WR/W初始值$00位7――保留位。位6――PWM2:PWM使能位5,4――COM21/20:比較匹配模式位1/0表:比較匹配模式選擇COM21COM20說明00不用作PWM功能01輸出變換10清011置位 位3――CTC2:比較匹配時(shí)清除T/C2。CTC2為1時(shí),比較匹配事件發(fā)生后,TCNT2將復(fù)位為0,若CTC2為0,則T/C2將連續(xù)計(jì)數(shù)而受比較匹配的影響。在PWM下,這一位無效。位2,1,0――CS22/21/20:時(shí)鐘選擇。T/C2預(yù)分頻選擇如下表:CS22CS21CS20說明000停止001PCK2010PCK2/8011PCK2/32100PCK2/64101PCK2/128110PCK2/256111PCK2/1024T/C2計(jì)數(shù)器――TCNT2位76543210$24($44)MSBLSBTCNT2讀/寫R/WR/WR/WR/WR/WR/WR/WR/W初始值$00T/C2是可進(jìn)行讀/寫訪問的8位向上計(jì)數(shù)器。只要有時(shí)鐘輸入,T/C2就會(huì)在寫入值的基礎(chǔ)上向上計(jì)數(shù)。T/C2輸出比較寄存器――OCR2位76543210$24($44)MSBLSBOCR2讀/寫R/WR/WR/WR/WR/WR/WR/WR/W初始值$00T/C2輸出比較寄存器包含與T/C2值連續(xù)比較的數(shù)據(jù)。如果T/C2的值與OCR2相等,則比較匹配發(fā)生,結(jié)果由TCCR2決定。用軟件寫操作,將TCNT2和OCR2設(shè)置為相等,不會(huì)引發(fā)比較匹配。匹配發(fā)生后,T/C中斷標(biāo)志寄存器TIFR中的匹配中斷標(biāo)志OCF2置位。4??撮T狗定時(shí)器看門狗定時(shí)器由片內(nèi)一個(gè)獨(dú)立的振蕩器驅(qū)動(dòng)。在Vcc=5V的條件下,典型振蕩頻率為1MHz,Vcc=3V時(shí),典型振蕩頻率為350KHz。使用看門狗定時(shí)器時(shí),要注意選擇看門狗定時(shí)器復(fù)位間隔時(shí)間小于各分段程序執(zhí)行時(shí)間的1/2,以免正常運(yùn)行時(shí)看門狗定時(shí)器復(fù)位。看門狗定時(shí)器控制寄存器――WDTCR位76543210$24($44)---WDTOEWDEWDP2WDP1WDP0WDTCR讀/寫RRRR/WR/WR/WR/WR/W初始值$00位7,6,5――保留位,總讀0位4――WDTOE:看門狗關(guān)斷使能。當(dāng)WDTOE被清除時(shí),該位必須被置1,否則,看門狗將不會(huì)被禁止。一旦置位后,硬件將在4個(gè)時(shí)鐘周期后清除訪位。位3――WDE:看門狗觸發(fā)。若WDE被清為0,看門狗定時(shí)器功能被禁止。WDE僅在WDTOE位設(shè)置時(shí)被清除。為了禁止被使能的看門狗定時(shí)器,必須遵守以下過程:1.在同一個(gè)操作中,把WDTOE和WDE寫成1,即使在禁止操作開始前WDE為1,也必須把寫入WDE。2.在隨后4個(gè)機(jī)器周期中,把WDE寫為0,這會(huì)禁止看門狗。位2,1,0――WDP2/1/0:看門狗定時(shí)器預(yù)定比例器2/1/0。此三位決定了當(dāng)看門狗定時(shí)器使能時(shí),看門狗定時(shí)器的預(yù)定比例。如下表所述:表??撮T狗定時(shí)器預(yù)分頻選擇WDP2WDP1WDP0分頻系統(tǒng)/K典型溢出時(shí)間/s(Vcc=3v)典型溢出時(shí)間/s(Vcc=5v)000160.0470.015001320.0940.030010640.190.0600111280.380.121002560.750.241015121.50.4811010243.00.9711120486.01.9WDR(看門狗復(fù)位命令)應(yīng)該在看門狗使能之前執(zhí)行一次。如果看門狗在復(fù)位之前使能,則看門狗定時(shí)器有可能不是從0開始計(jì)數(shù)??撮T狗定時(shí)器應(yīng)用編程格式如下:: ;初始化wdr ;啟動(dòng)看門狗定時(shí)器,看門狗定時(shí)器溢出間隔1.9sldir16,$0foutwdtcr,r16:aa::wdr:wdr:wdrrjmpaa調(diào)試程序時(shí),先不啟動(dòng)看門狗定時(shí)器,程序調(diào)試好后,為了抗干擾,再加上看門狗定時(shí)器??撮T狗定時(shí)器關(guān)斷步驟如下:ldir16,$1foutwdtcr,r16ldir16,$17outwdtcr,r16十、8535單片機(jī)模擬量輸入接口模/數(shù)轉(zhuǎn)換器特點(diǎn): 10位精度 ±2LSB精確度 0.5LSB集成非線性度 65~260μs轉(zhuǎn)換時(shí)間 8通道 自由運(yùn)行模式和單次轉(zhuǎn)換模式 ADC轉(zhuǎn)換結(jié)束中斷 休眠模式噪聲消除AT90S8535具有10位精度的逐次逼近型A/D轉(zhuǎn)換器。ADC與一個(gè)8通道的模擬多路轉(zhuǎn)換器相連,這樣就允許A口作為ADC的輸入引腳。ADC包含一個(gè)采樣保持器。ADC具有2個(gè)模擬供電引腳AVcc和AGND。AGND必須與GND相連,具AVcc與Vcc引腳電壓的差別不能大于±0.3V。AREF為外部參考電壓輸入端,此電壓介于AGND與AVcc之間。操作:ADC可以工作于兩種模式,單次轉(zhuǎn)換及自由運(yùn)行模式。在單次轉(zhuǎn)換模式下,必須啟動(dòng)每一次置換;在自由運(yùn)行模式下,ADC會(huì)連續(xù)采樣并更新ADC數(shù)據(jù)寄存器。ADCSR的ADFR位用于選擇模式。ADC由ADCSR的ADEN位控制全能。全能ADC后,第一次轉(zhuǎn)換將引發(fā)一次啞轉(zhuǎn)換過程,以初始化ADC,然后才真正進(jìn)行A/D轉(zhuǎn)換。對(duì)用戶而言,此次轉(zhuǎn)換過程比其他轉(zhuǎn)換過程要多12個(gè)ADC時(shí)鐘周期。ADSC置位將啟動(dòng)A/D轉(zhuǎn)換。在轉(zhuǎn)換過程中,ADSC一直操持為高;轉(zhuǎn)換結(jié)束后,ADSC硬件清0。如果在轉(zhuǎn)換過程中通道改變了,ADC首先要完成當(dāng)前的轉(zhuǎn)換,然后通道才會(huì)改變。ADC產(chǎn)生10的結(jié)果,ADCH和ADCL。為了保證正確讀取數(shù)據(jù),系統(tǒng)采用了如下保護(hù)邏輯:讀數(shù)據(jù)時(shí),首先要讀ADCL。一旦開始讀ADCL,ADC對(duì)數(shù)據(jù)寄存器的訪問就被禁止了。即,如果讀取了ADCL,那么即使在讀ADCH之前,另一次ADC結(jié)束了,2個(gè)寄存器的值也不會(huì)被新的ADC結(jié)果更新,新轉(zhuǎn)換的數(shù)據(jù)將丟失。當(dāng)讀完ADCH之后,ADC才能繼續(xù)對(duì)ADCH和ADCL進(jìn)行訪問。ADC結(jié)束后會(huì)置位ADIF。即使發(fā)生如上所述的,由于ADCH未讀取而丟失轉(zhuǎn)換數(shù)據(jù)的情況,ADC結(jié)束中斷仍將觸發(fā)。預(yù)分頻器:ADC有一個(gè)預(yù)分頻器,可將系統(tǒng)時(shí)鐘調(diào)整到可接受的ADC時(shí)鐘(50~200kHz)。過高的頻率將導(dǎo)致采樣精度降低。ADCSR的ADPS0~2用于產(chǎn)生合適的ADC時(shí)鐘。一旦ADCSR的ADEN置位,預(yù)分頻器就開始連續(xù)不斷地計(jì)數(shù),直到ADEN清0。ADSC的作用是對(duì)ADC進(jìn)行初始化。A/D轉(zhuǎn)換在ADC時(shí)鐘的上升沿啟動(dòng)。采樣/保持要花費(fèi)1.5位ADC時(shí)鐘。在第13個(gè)時(shí)鐘ADC轉(zhuǎn)換結(jié)束,數(shù)據(jù)進(jìn)入ADC數(shù)據(jù)寄存器。ADC噪聲抑制功能:ADC具有消除由CPU核引入的噪聲的功能,實(shí)現(xiàn)過程如下: 1.使能ADC,選擇單次轉(zhuǎn)換模式,并使能轉(zhuǎn)換結(jié)束中斷。 ADEN=1;ADSC=0;ADFR=0;ADIE=1 2.進(jìn)入空閑狀態(tài)。一旦CPU停止,ADC將開始轉(zhuǎn)換。 3.如果在ADC轉(zhuǎn)換結(jié)束中斷之前沒有發(fā)生其他中斷,則ADC轉(zhuǎn)換結(jié)束斷叫將喚醒MCU,并執(zhí)行中斷例程。ADC多路選擇寄存器――ADMUX位76543210$07($27)-----MUX2MUX1MUX0ADMUX讀/寫RRRRRR/WR/WR/W初始值$00位7~3――保留位位2,1,0――MUX2~0:模擬通道選擇位,用于選擇ADC的模擬輸入通道0~7。ADC控制和狀態(tài)寄存器――ADCSR位76543210$06($26)ADENADSCADFRADIFADIEADPS2ADPS1ADPS0ADCSR讀/寫R/WR/WR/WR/WR/WR/WR/WR/W初始值$00位7――ADEN:ADC使能位6――ADSC:ADC開始轉(zhuǎn)換。當(dāng)ADC工作于單次轉(zhuǎn)換模式時(shí),這一位必須置1,以啟動(dòng)每一次轉(zhuǎn)換;而對(duì)于自由運(yùn)行模式,則只需在第一次轉(zhuǎn)換時(shí)設(shè)置一次。不論設(shè)置動(dòng)作是在ADEN置位之后,還是同時(shí)進(jìn)行,ADC都將進(jìn)行一次啞轉(zhuǎn)換,以初始化ADC。轉(zhuǎn)換過程中ADSC保持為高。實(shí)際轉(zhuǎn)換過程結(jié)束后,但在轉(zhuǎn)換結(jié)果進(jìn)入ADC數(shù)據(jù)寄存器之前(差1個(gè)ADC時(shí)鐘),ADSC變?yōu)榈?。在啞轉(zhuǎn)換過程中,ADSC保持為高,對(duì)ADSC寫0沒有意義。位5――ADFR:ADC自由運(yùn)行模式選擇。此位置位后,ADC工作于自由運(yùn)行模式,ADC將連續(xù)不斷地進(jìn)行采樣和數(shù)據(jù)更新。位4――ADIF:ADC中斷標(biāo)志。ADC完成及數(shù)據(jù)更新完成后,ADIF置位。如果I和ADIE置位,則產(chǎn)生ADC結(jié)束中斷。位3――ADIE:ADC中斷使能位2,1,0――ADPS2~ADPS0:ADC預(yù)分頻器選擇,見下表:ADPS2ADPS1ADPS0分頻因子0002001201040118100161013211064111128ADC數(shù)據(jù)寄存器――ADCL和ADCH位76543210$05($25)------ADC9ADC8ADCH$04($24)ADC7ADC6ADC5ADC4ADC3ADC2ADC1ADC0ADCL讀/寫RRRRRRRRRRRRRRRR初始值$00 $00掃描多個(gè)通道:由于模擬通道的轉(zhuǎn)換總是要延遲到轉(zhuǎn)換結(jié)束,因此,自由運(yùn)行模式可以用來掃描多個(gè)通道而不中斷轉(zhuǎn)換器。一般情況下,ADC轉(zhuǎn)換結(jié)束中斷用于修改通道,但需注意,中斷在轉(zhuǎn)換結(jié)果可讀時(shí)觸發(fā)。在自由運(yùn)行模式下,一下次轉(zhuǎn)換在中斷觸發(fā)的同時(shí)啟動(dòng)。ADC中斷觸發(fā),即新一次轉(zhuǎn)換開始后,改變ADMUX將不起作用。ADC噪聲消除技術(shù):AT90S8535的內(nèi)外部數(shù)字電路會(huì)產(chǎn)生EMI電磁干擾,從而影響模擬測(cè)量精度。如果轉(zhuǎn)換精度要求很,則需應(yīng)用如下技術(shù),以減少噪聲:1.AT90S8535的模擬部分及其他模擬器件在PCB上要有獨(dú)立的地線層。模擬地線與數(shù)字地線單點(diǎn)相連。2使模擬信號(hào)通路盡量短。要使模擬走線在模擬地上通過,并盡量遠(yuǎn)離高速數(shù)字通路。3.AVcc要通過一個(gè)RC網(wǎng)絡(luò)連接Vcc。4利用ADC的噪聲消除技術(shù)減少CPU引入的噪聲。5.如果A口的一些引腳用作數(shù)字輸出口,則在ADC轉(zhuǎn)換過程中不要改變其狀態(tài)。 注:由于AVcc同時(shí)也為A口輸出驅(qū)動(dòng)提供電源,因此,如果A口有輸出引腳,則RC網(wǎng)絡(luò)不要使用。模/數(shù)轉(zhuǎn)換應(yīng)用舉例:測(cè)量8535的ACH6和ACH72路模擬電壓信號(hào),電路如下:2路輸入信號(hào)經(jīng)RC濾波去除交流分量。6.2V穩(wěn)壓管起保護(hù)作用,高于6.2V的輸入信號(hào)被限幅在6.2V之內(nèi)。對(duì)負(fù)的輸入信號(hào),穩(wěn)壓管反向?qū)?,限幅在?.7之內(nèi),以以免損壞輸入引腳?;鶞?zhǔn)電壓的穩(wěn)定、準(zhǔn)確事關(guān)ADC轉(zhuǎn)換結(jié)果的精確性。這里采用LM336(5.0V)的3端精密并聯(lián)式二極管。通過調(diào)節(jié)精密多圈電位器,可調(diào)節(jié)Vref的電壓值。AVcc的供電經(jīng)100Ω電阻和0.1μF電容濾波,以減少交流分量對(duì)ADC的影響。5位數(shù)碼管最左邊顯示測(cè)量的路號(hào),右邊4位顯示A/D轉(zhuǎn)換的數(shù)字量。采用自由模式程序如下:.include“8535def.inc”.org$0000rjmpresettab:.db$3f,$06,$5b,$4f,$66,$6d,$7d,$07,$7f,$6f;7段數(shù)碼表reset:ldir16,low(ramend)outspl,r16ldir16,high(ramend)outsph,r16ldir16,$ff ;定義PB,PD為輸出口outddrb,r16outddrd,r16ldir16,$00 ;定義PA口為輸入口,不帶內(nèi)部上拉電阻outddra,r16ldir16,$00outporta,r16ldir16,$07 ;先第7路ADCoutadmux,r16ldir18,$e6 ;允許ADC,啟動(dòng)ADC,自由模式outadcsr,r18 ;64分頻作A/D時(shí)鐘rcallt1ms ;延時(shí)1msaa:inr16,adcl ;讀A/D結(jié)果放放r17:r16中inr17,adchldir18,$06 ;改變ADMUX為第6路outadmux,r18rcallb16td5 ;調(diào)用二轉(zhuǎn)十子程,見前面的例程ldir22,7 ;萬位顯示路嚇7movr21,r19 ;4位ADC結(jié)果送顯示緩沖區(qū)movr20,r18movr19,r17movr18,r16ldir17,200 ;每一路A/D掃描200次,恰好1sbb:rcallsmaio ;動(dòng)態(tài)掃描子程,見前面例程decr17brnebbinr16,adcl ;讀A/D結(jié)果放入r17:r16中inr17,adchldir18,$07 ;改變ADMUX為第7路outadmux,r18rcallb16td5ldir22,6 ;萬位顯示路號(hào)6movr21,r19 ;4位ADC結(jié)果送顯示緩沖區(qū)movr20,r18movr19,r17movr18,r16ldir17,200cc:rcallsmaiodecr17brneccrjmpaa 模擬比較器:模擬比較器對(duì)正極PB2引腳(AIN0)和負(fù)極PB3引腳(AIN1)之上的輸入值進(jìn)行比較。當(dāng)電壓值Vpb2>Vpb3,模擬比較器輸出ACO被置位。比較器的輸出可用來觸發(fā)模擬比較器中斷(上升沿、下降沿或電平變換),也可觸發(fā)定時(shí)器/計(jì)數(shù)器1的輸入捕獲功能。模擬比較器控制和狀態(tài)寄存器――ACSR位76543210$08($28)ACD-ACOACIACIEACICACIS1ACIS0ACSR讀/寫R/WRRR/WR/WR/WR/WR/W初始值$00位7――ACD:模擬比較器禁止位。當(dāng)該位設(shè)為1,模擬比較器的電源關(guān)閉??稍谌魏螘r(shí)候?qū)ζ渲梦?,以便關(guān)閉,可減少器件功耗(常用于休閑模式下又不需從模擬比較器中斷喚醒的情況)。改變ACD位時(shí),模擬比較器中斷必須通過清空ACSR中的ACIE位來禁止,否則,在該位改變時(shí),會(huì)產(chǎn)生中斷。位6――保留位。位5――ACO:模擬比較器輸出。位4――ACI:模擬比較器中斷標(biāo)志位。當(dāng)比較器輸出觸發(fā)中斷時(shí),ACI將置位。中斷方式由ACIS1和ACIS0決定。當(dāng)執(zhí)行相應(yīng)的中斷處理向量時(shí),ACI被硬件清0。另外,ACI也可通過對(duì)此位寫邏輯1來清0。注意,如果ACSR的另一些位被SBI或CBI指令修改時(shí),ACI亦被清0.位3――ACIE:模擬比較器中斷使能。當(dāng)ACIE位設(shè)為1,且狀態(tài)寄存器(SREG)中的I位被設(shè)為1時(shí),模擬比較器中斷被觸發(fā)。當(dāng)被清0,中斷被禁止。位2――ACIC:模擬比較器輸入捕獲使能。當(dāng)被置1時(shí),該位觸發(fā)定時(shí)器/計(jì)數(shù)器1的輸入捕獲功能,由模擬比較器來觸發(fā)。為了使比較器觸發(fā)定時(shí)器/計(jì)數(shù)器1的輸入捕獲中斷,定時(shí)器中斷屏蔽寄存器(TIM-SK)的TICIE1位必須被設(shè)置。位1,0――ACIS1,ACIS0:模擬比較器中斷模式選擇,如下表:ACIS1ACIS0中斷模式ACIS1ACIS0中斷模式00電平變換引發(fā)中斷10ACO下降沿中斷01保留11ACO上升沿中斷注意:改變ACIS1/ACIS0時(shí),要禁止模擬比較器的中斷,否則有可能引發(fā)不必要的中斷。十一、AVR單片機(jī)串行接口及應(yīng)用1、通用串行接口UART90系列單片機(jī)帶有一個(gè)全雙工的通用串行異步收發(fā)器(UART),其主要特征:1、波特率發(fā)生器可生成多種波特率;2、在XTAL低率下,仍可產(chǎn)生較高的波特率;3、8位和9位數(shù)據(jù);4、噪聲濾波;5、過速的檢測(cè);6、幀錯(cuò)誤檢測(cè);7、錯(cuò)誤起始位的檢測(cè);8、3個(gè)獨(dú)立的中斷,即發(fā)送(TX)完成,發(fā)送數(shù)據(jù)寄存器空,接收(RX)完成。數(shù)據(jù)傳輸通過把被傳送的數(shù)據(jù)寫入U(xiǎn)ART的I/O寄存器UDR初始化。在以下情況下,數(shù)據(jù)從UDR傳送到移位寄存器中: 1、當(dāng)前一個(gè)字符的停止位被移出后,新的字符被寫入U(xiǎn)DR寄存器,移位寄存器立即再被裝入。 2、當(dāng)前一個(gè)字符的停止位被移出前,新的字符被寫入U(xiǎn)DR寄存器,移位寄存器在當(dāng)前字符的停止位移出后被裝入。接收器前端的邏輯以16倍波特率對(duì)RXD引腳采樣。當(dāng)線路閑置時(shí),一個(gè)邏輯0的采樣將被認(rèn)為是起始位的下降沿,并且起始位的探測(cè)序列開始。通過清除UCR寄存器中的RXEN位,使接收器被禁止。這意味首PD0可以被用作通用的I/O引腳。當(dāng)RXEN被設(shè)置時(shí),UART接收器被連到PD0引腳而不管方向寄存器的設(shè)置。UARTI/O數(shù)據(jù)寄存器――UDR位76543210$0C($2C)MSBLSBUDR讀/寫R/WR/WR/WR/WR/WR/WR/WR/W初始值$00UDR寄存器是2個(gè)物理上分離的寄存器,分享同一個(gè)I/O地址。當(dāng)定入寄存器時(shí),UART的發(fā)送數(shù)據(jù)寄存器被寫放;當(dāng)讀UDR時(shí),讀的是UART接收寄存器。UARTI/O狀態(tài)寄存器――USR位76543210$0B($2B)RXCTXCUDREFEOR-―-USR讀/寫RRRRRRRR初始值0b00100000USR寄存器是一個(gè)只讀的寄存器,提供UART的狀態(tài)信息。位7――RXC:UART接收完成。當(dāng)收到的字符從接收移位寄存器傳到UDR中時(shí),該位被設(shè)置。不論探測(cè)到任何的幀錯(cuò)誤,該位都被設(shè)置;當(dāng)UCR中的RXCIE位被設(shè)置后,UART接收完成中斷將被執(zhí)行(當(dāng)RXC被設(shè)置),RXC在讀UDR時(shí)被清除;當(dāng)使用中斷數(shù)據(jù)接收時(shí),接收完成中斷子程序必須讀UDR,而清除RXC;否則,在中斷完成后,會(huì)引起新的中斷。位6――TXC:UART發(fā)送完成。當(dāng)發(fā)送移位寄存器的全部數(shù)據(jù)被移出,且沒有新的數(shù)據(jù)被寫入U(xiǎn)DR時(shí),該位被設(shè)置。這個(gè)標(biāo)志在半雙工的通信接口中很有用;當(dāng)完成發(fā)送后,立即釋放通信總線,并必須進(jìn)入接收模式;當(dāng)UCR中TXCIE被設(shè)置后,設(shè)置TXC將導(dǎo)致UART發(fā)送完成中斷被執(zhí)行,TXC在執(zhí)行相應(yīng)的中斷微量時(shí),被硬件清除,或者TXC也可以通過在該位寫一個(gè)邏輯1而被清除。位5――UDRE:UART數(shù)據(jù)寄存器空。當(dāng)定性UDR的字符被傳送到發(fā)送移位寄存器中時(shí),該位被設(shè)置。設(shè)置該位指示出發(fā)送器準(zhǔn)備新的數(shù)據(jù)發(fā)送;當(dāng)UCR中的UDRIE位被設(shè)置時(shí),UART發(fā)送完成中斷將被執(zhí)行。位4――FE:幀出錯(cuò)。在幀出錯(cuò)條件被檢測(cè)到時(shí),該位被設(shè)置(如當(dāng)收到數(shù)據(jù)的停止位為0時(shí))。FE在收到數(shù)據(jù)的停止位為1時(shí),被清除。位3――OR:過速(超越出錯(cuò))。如果UDR寄存器中舊的數(shù)據(jù)還沒被讀走,新的數(shù)據(jù)又進(jìn)入接收移位寄存器,則OR位被置1。位2~0――保留位,總讀為0.UARTI/O控制寄存器――UCR位76543210$0A$2ARXCIETXCIEUDRIERXENTXENCHR9RXB8TXB8UCR讀/寫R/WR/WR/WR/WR/WR/WR/WR/W初始值$00位7――RXCIE:RX完成中斷使能。當(dāng)該位被置1時(shí),如果全局中斷被使能,在USR中設(shè)置RXC位將導(dǎo)致接收完成中斷被執(zhí)行。位6――TXCIE:TX完成中斷使能。位5――UDRIE:UART數(shù)據(jù)寄存器空中斷使能。位4――RXEN:接收使能。當(dāng)該位被設(shè)置為1時(shí),允許UART接收。當(dāng)接收器被禁止時(shí),TXC,OR及FE無法置位。如果這些位被設(shè)置,在把RXEN關(guān)閉時(shí),不能清除它們。位3――TXEN:發(fā)送

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

評(píng)論

0/150

提交評(píng)論