學(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),請進(jìn)行舉報或認(rèn)領(lǐng)

文檔簡介

學(xué)習(xí)筆記之一:AVR單片機(jī)詳解=====================================================說明:此為我的學(xué)習(xí)筆記,參考摘錄了多本書中的內(nèi)容,以AVR單片機(jī)的結(jié)構(gòu),特點(diǎn),系統(tǒng)等作了詳細(xì)描述,適合當(dāng)作手冊來翻閱。文中相關(guān)部分是以匯編語言來描述的。但最終要大量使用的是C語言,具體請看《學(xué)習(xí)筆記之二:單片機(jī)編程之C語言》。一、關(guān)于AVR系列單片機(jī)Avr單片機(jī)是ATMEL公司1997年推出的全新配置精簡指令集(RISC)單片機(jī)。Avr單片機(jī)的開發(fā)目的在于:能采用C語言編程,從而能高效地開發(fā)出目標(biāo)產(chǎn)品。在Avr單片機(jī)中,運(yùn)用Harvard(哈佛)結(jié)構(gòu),在前一條指令執(zhí)行的時候,就取出現(xiàn)行的指令,然后以1個周期執(zhí)行指令。由于采用Harvard結(jié)構(gòu),因此程序存儲器和數(shù)據(jù)存儲器是分開的。可直接訪問全部程序存儲器和數(shù)據(jù)存儲器。在其他的CISC以及類似的RISC結(jié)構(gòu)中,外部振蕩器的時鐘被分頻降低到傳統(tǒng)的內(nèi)部執(zhí)行周期,這種分頻最大達(dá)12倍。Avr單片機(jī)是用1個時鐘周期執(zhí)行1條指令的,是在8位單片機(jī)中第一種真正的RISC單片機(jī)。Avr單片機(jī)采用低功率、非揮發(fā)的CMOS工藝制造,內(nèi)載Flash,EEPROM及SRAM等不同用處的存儲器。通過SIP口和一般編程器,可對Avr單片機(jī)的Flash存儲器進(jìn)行編程。二、單片機(jī)特點(diǎn)摘要(這里以AT90S8535型號的單片機(jī)為例,以后所述除特別說明都以這個型號的單片機(jī)為主線)片內(nèi)8KB的Flash程序存儲器,一次讀取一個字(16位),可反復(fù)擦寫、修改程序1000次以上不損壞。高速,每個時鐘周期執(zhí)行一條指令,主頻8MHZ時,大多數(shù)指令僅需125ns。Flash對程序有多重密碼保護(hù)、鎖死功能,具有高度保密性。32個通用工作寄存器均可作累加器,512字節(jié)的SRAM。低功耗。工作電壓:2.7~6V,抗電源波動能力強(qiáng)。512B的EEPROM(電擦寫存儲器),掉電不丟失信息,可在線改寫,壽命100000次。32個I/O口,輸入/輸出的方向可以定義。輸出口的驅(qū)動能力強(qiáng),灌電流可達(dá)40mA,能直接驅(qū)動LED、繼電器等器件,省去驅(qū)動電路;輸入口可以三態(tài)輸入,也可帶內(nèi)部上拉電阻,省去外接上拉電阻。2個8位和1個16位定時/計數(shù)器,且具有比較匹配輸出和輸入捕獲功能。可編程的看門狗定時器。有模擬比較器,便于發(fā)現(xiàn)輸入模擬電壓信號。8通道10位ADC,可直接輸入模擬電壓信號。2通過10位和1路8位的PWM脈寬調(diào)制輸出,經(jīng)濾波輸出模擬電壓信號,可作D/A輪換器。全雙工UART異步串行接口,便于RS232-C和RS485通信接口。有SPI同步串行接口。有獨(dú)立振蕩器的實時時鐘(RTC),具有計時功能。有16種中斷源,每種中斷源在程序空間都有一個獨(dú)立的中斷向量作相應(yīng)的中斷入口地址。三、引腳定義(封裝圖如下圖1) (1)Vcc,GND:電源,地 (2)A口(PA7~PA0): A口是一個8位雙向I/O口,每一個引腳都有內(nèi)部上拉電阻。A口的輸出緩沖器能夠吸收20mA的電流,可直接驅(qū)動LED;當(dāng)作輸入時,如果外部被拉低,由于上拉電阻的存在,引腳將輸出電流。在復(fù)位過程中,A口為三態(tài),即使上時時鐘還未起振。A口還可用作ADC的模擬輸入口。 (3)B口(PB7~PB0): B口是一個8位雙向I/O口,每一個引腳都有內(nèi)部上拉電阻。B口的輸出緩沖器能夠吸收20mA的電流,可直接驅(qū)動LED;當(dāng)作輸入時,如果外部被拉低,由于上拉電阻的存在,引腳將輸出電流。在復(fù)位過程中,B口為三態(tài),即使上時時鐘還未起振。 (4)C口(PC7~PC0): C口是一個8位雙向I/O口,每一個引腳都有內(nèi)部上拉電阻。C口的輸出緩沖器能夠吸收20mA的電流,可直接驅(qū)動LED;當(dāng)作輸入時,如果外部被拉低,由于上拉電阻的存在,引腳將輸出電流。C口的2個引腳還可用作T/C2的振蕩器。在復(fù)位過程中,C口為三態(tài),即使上時時鐘還未起振。 圖1、AT90S8535的幾種封裝 (5)D口(PD7~PD0): D口是一個8位雙向I/O口,每一個引腳都有內(nèi)部上拉電阻。D口的輸出緩沖器能夠吸收20mA的電流,可直接驅(qū)動LED;當(dāng)作輸入時,如果外部被拉低,由于上拉電阻的存在,引腳將輸出電流。在復(fù)位過程中,D口為三態(tài),即使上時時鐘還未起振。 (6)RESET:復(fù)位輸入,超過50ns的低電平將引起系統(tǒng)復(fù)位;低于50ns時間的脈沖不能保證可靠復(fù)位。 (7)XTAL1:振蕩器放大器的輸入端。(8)XTAL2:振蕩器放大器的輸出端。(9)AVcc:A/D轉(zhuǎn)換器的電源,應(yīng)通過一個低通濾波器與Vcc連接。(10)AREF:A/D轉(zhuǎn)換器的參考電源,介于AGND與AVcc之間。(11)AGND:模擬地。(12)晶體振蕩器: XTAL1和XTAL2分別是片內(nèi)振蕩器的輸入/輸出端,可用晶體振蕩器或陶瓷振蕩器,如圖2; 當(dāng)用外部時鐘時,XTAL2應(yīng)NC,如圖3;圖2.晶振連接圖3.外部時鐘驅(qū)動設(shè)置(13)實時時鐘振蕩器: 晶振可直接連接到振蕩口的引腳PC6(TOSC1)和PC7(TOSC2)而無需外部電容。 振蕩器已經(jīng)對32768Hz的晶振做了優(yōu)化,對外加信號的帶寬為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ī)的存儲器組織 所有指令為16位寬,F(xiàn)lash大小為4K×16 程序計數(shù)器PC為12們寬,可尋址到4096個字的Flash程序區(qū)。 內(nèi)部SRAM的數(shù)據(jù)存在器(數(shù)據(jù)組織方式見下圖8),起始的96個地址為寄存器文件和I/O寄存器,其后512個地址用于尋址SRAM。圖8.SRAM的分布 AT90S8535包含512B的EEPROM,是作為一個獨(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位計數(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位計數(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個通用寄存器之間傳輸數(shù)據(jù)。當(dāng)使用IN和OUT指令時,地址必須在$00~3F之間,如果要像SRAM一樣訪問I/O寄存器,則相應(yīng)地址要加上$20。為了與后續(xù)產(chǎn)品兼容,保留未用的位應(yīng)寫”0”,而保留的I/O寄存器則不應(yīng)寫。SBI和CBI指令只對$00~$1F有效。 系統(tǒng)復(fù)位共有三個復(fù)位源:上電復(fù)位,外部復(fù)位,看門狗復(fù)位: 上電復(fù)位:當(dāng)供電電平加至Vcc和GND引腳時,MCU時行復(fù)位 外部各位:RESET復(fù)位引腳上的低電壓引發(fā)外部復(fù)位,大于50ns的復(fù)位脈沖將造成芯片復(fù)位 看門狗復(fù)位:當(dāng)看門狗定時器溢出時,將產(chǎn)生一個XTAL的短暫復(fù)位脈沖,在此脈沖的下降沿,延時定時器開始對超時時間計數(shù)。 使用Avr的EEPROM注意3點(diǎn):a。避開0地址;b。程序在做初始化時,不要寫EEPROM,在進(jìn)入讀/寫之前確保有數(shù)ms的延時,即等機(jī)器完全穩(wěn)定后,才能操作EEPROM;c。最安全的方法是加復(fù)位電壓檢測器,如下圖9:圖9.復(fù)位檢測器件引腳接線圖表2.AT90S8535指令118條(不同型號芯片的指令可能會不同,詳見對應(yīng)手冊 注:1.源寄存器Rn均可為R0~R31,表中操作數(shù)范圍省略了0≤n≤31 2.表中標(biāo)志是指對Z,C,N,V,C5標(biāo)志的影響,指令對其有影響的在表中列出,下標(biāo)為0者執(zhí)行指令后該標(biāo)志清0;標(biāo)志為1者執(zhí)行指令后該標(biāo)志置1;無下標(biāo)者執(zhí)行指令后該標(biāo)志可能會變化,方向不定。 3影響I,T2標(biāo)志的指令很少。匯編器偽指令,如下表3.表3.匯編偽指令指令語法說明BYTELABEL:.BYTE表達(dá)式保存存儲的內(nèi)容到SRAM中,該指令僅用在數(shù)據(jù)段內(nèi)CSEG.CSEG定義代碼段的開始位置DBLABEL:.DB表達(dá)式[表]保存數(shù)據(jù)到程序存儲器或EEPROM存儲器中DEF.DEF符號=寄存器設(shè)置寄存器的符號名,DEF偽指令允許寄存器用符號代替DEVICE.DEVICEAT90S8535定義被匯編的器件DSEG.DSEG定義數(shù)據(jù)段的開始DWLABEL:.DW表達(dá)式表在程序存儲器和EEPROM在存儲器中定義字常數(shù),表達(dá)式表是一系列表達(dá)式,用逗號分隔,每個表達(dá)式必須是32768~65535間的有效值ENDMACRO.ENDMACRO宏結(jié)束EQU.EQU標(biāo)號=表達(dá)式設(shè)置一個符號相等于一個表達(dá)式.此標(biāo)號是一個常數(shù),不能改變或重定義ESEG.ESEG定義EEPROM段的開始位置EXIT.EXIT退出文件,告訴匯編器停止匯編該文件INCLUDE.INCLUDE“文件名”包含另外的文件,從指定的文件開始讀,然后匯編器匯編指定的文件,直到文件結(jié)束或遇到EXIT偽指令LIST.LIST打開列表文件生成器LISTMAC.LISTMAC打開宏表達(dá)式MACRO.MACRO宏名宏開始。宏可帶參數(shù)(最多10個),這些參數(shù)在宏定義中用@0~@9代表,當(dāng)調(diào)用一個宏時,參數(shù)用逗號分隔.NOLIST.NOLIST關(guān)閉列表文件生成器ORG.ORG表達(dá)式設(shè)置定位計數(shù)器一個絕對值SET.SET標(biāo)號=表達(dá)式設(shè)置一個與表達(dá)式相等的符號 LOW(表達(dá)式):返回一個表達(dá)式的低字節(jié) HIGH(表達(dá)式):返回一個表達(dá)式的第2個字節(jié) BYTE2(表達(dá)式):與HIGH相同 BYTE3(表達(dá)式):返回一個表達(dá)式的第3個字節(jié) BYTE4(表達(dá)式):返回一個表達(dá)式的第4個字節(jié) LWRD(表達(dá)式):返回一個表達(dá)式的0~15位 HWRD(表達(dá)式):返回一個表達(dá)式的16~31位 PAGE(表達(dá)式):返回一個表達(dá)式的16~21位 EXP2(表達(dá)式):返回2的(表達(dá)式)次冪 LOG2(表達(dá)式):返回LOG2(表達(dá)式)的整數(shù)部分表4.部分運(yùn)算符符號名稱優(yōu)先級符號名稱優(yōu)先級!邏輯非14<=小于或等于10~按位非14>大于10-負(fù)號14>=大于或等于10*乘13==恒等于9/除13!=不等于9+加12&按位與8-減12^按位異或7<<左移11|按位或6>>右移11&&邏輯與5<小于10||邏輯或4六、8535單片機(jī)的EEPROM的讀/寫寫入EEPROM的時間約在2.5~4ms之間,取決于Vcc電壓。用于訪問EEPROM的寄存器位于I/O空間,有以下4個: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ù)對于EEPROM寫入操作,EEDR寄存器包含了寫入EEPROM的數(shù)據(jù),由EEAR寄存器給出其地址;對于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時,且在EEMWE置1后4個周期內(nèi),把EEWE置1,才能將數(shù)據(jù)寫入EEPROM所選擇的地址中,因為當(dāng)EEMWE被軟件設(shè)置后,4個周期后被硬件清除;EEMWE置0時,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個時鐘周期,由于它暫停CPU2個時鐘周期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;測試程序RESET:ldir16,$02 ;棧指針置初值outSPH,r16ldir16,$5FoutSPI,r16;*****將aa寫入EEPROM的$40地址,再讀出來送B口輸出ldir16,$FF ;定義B口為輸出outDDRB,r16ldir16,$aaldir18,$00ldir17,$40rcallEEWrite ;存儲$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 ;計數(shù)器減1brneloop1 ;未完成;****拷貝EEPROM最前10個字節(jié)到r2~r11serr20outEEARH,r20 ;EEARH←$FFserr20outEEARL,r20 ;EEAR←$FF(startaddress-1)clrZHldiZL,1 ;Z指針指向r1loop2:rcallEERead_seq ;得到EEPROM數(shù)據(jù)stZ,r16 ;存儲到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不是一個寄存器,該地址允許對A口的每一個引腳的物理值進(jìn)行訪問。當(dāng)讀PORTA時,讀到的是PORTA的數(shù)據(jù)鎖存器;當(dāng)讀PINA時,引腳上的邏輯值被讀取。 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功能時,I/O口內(nèi)部電路及工作原理,如下圖: WP:寫C口;WD:寫DDRC;RL:讀C口鎖存器;RP:讀C口腳;RD:讀DDRCPC0口的內(nèi)部工作原理圖 1。當(dāng)C口方向寄存器DDRC的第0位置位(DDC0=1)時,PC0口定義輸出。 2。當(dāng)DDC0=0時,PC0口定義輸入。 DDC0是可讀的,用指令inr16,DDRC,再看r16的第0位;PORTC0的輸出Q也是可讀的,用指令inr16,PORTC,再看r16的第0位,讀的是鎖存器(PORTC);PINC0是可讀的,用指令inr16,DDRC,再看r16的第0位,讀的是引腳電平;DDC0,PORTC0都是可寫的(可定義輸入或輸出和確定輸出電平的高低等);但PINC是不可寫的(引腳電平的高低是外部客觀存在)。 PORTC的另外7個端子不考慮端口的第2功能時,I/O口基本輸入、輸出功能是一樣的。 列表:C口引腳的DDCn作用(n:7,6,…,1,0)DDCnPORTCnI/O上拉注釋00輸入否三態(tài)(高阻)01輸入是外部拉低是PCn引腳會輸出電流10輸出否0輸出11輸出否1輸出 3。C口是一個帶內(nèi)部上拉的8位雙向I/O口,點(diǎn)了3個I/O寄存器地址,分別是PORTC,DDRC,PINC。C口所有引腳都有獨(dú)立可選的上拉,C口的輸出緩沖器可吸收20mA的電流,以直拉驅(qū)動LED顯示,當(dāng)PC0~PC7引腳被用作輸入且被外部拉低時,若內(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 ;取個位BCD碼swapr17 ;半字節(jié)交換andir17,$0f ;取10們BCD碼ldiZH,high(tab*2) ;查個位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。動態(tài)掃描5位數(shù)碼管顯示 上例靜態(tài)顯示1位數(shù)碼需占8位口,要顯示5位則需40位輸出口,這顯然不實用,為節(jié)省輸出口,可采用動態(tài)掃描方式,顯示5位數(shù)碼只需13位輸出口,如下圖 C口作字線,D口低5位作位線,動態(tài)掃描顯示5位數(shù)碼,數(shù)碼管共陰。待顯示的16位二進(jìn)制數(shù)在r17:r16中,將其二轉(zhuǎn)十,5位BCD碼的個,十,百,千,萬分別存于r18,r19,r20,r21,r22中。每隔1ms將1位BCD碼查出7段碼送B口輸出,送相應(yīng)的位線由D口輸出,延時1ms,再顯示下一位。這樣,每隔1ms顯示1位,5ms顯示1遍,反復(fù)調(diào)用掃描顯示子程,每秒可顯示200遍。實驗證明,每少顯示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)動態(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 ;送個位位線outportd,r16movr23,r18 ;將個位的BCD碼送r23rcallcqb ;查7段碼,送B口輸出rcallt1ms ;延時1msldir16,$fd ;送十位位線outportd,r16movr23,r19 ;將十位的BCD碼送r23rcallcqb ;查7段碼,送B口輸出rcallt1ms ;延時1msldir16,$fb ;送百位位線outportd,r16movr23,r20 ;將百位的BCD碼送r23rcallcqb ;查7段碼,送B口輸出rcallt1ms ;延時1msldir16,$f7 ;送千位位線outportd,r16movr23,r21 ;將千位的BCD碼送r23rcallcqb ;查7段碼,送B口輸出rcallt1ms ;延時1msldir16,$ef ;送萬位位線outportd,r16movr23,r22 ;將萬位的BCD碼送r23rcallcqb ;查7段碼,送B口輸出rcallt1ms ;延時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個中斷源,每個中斷源在程序空間都有一個獨(dú)立的中斷向量,所有的中斷事件都有自己的使能位,在使能位置位,且I也置位的情況下,中斷可以發(fā)生。 程序空間的最低位置定義為復(fù)位及中斷向量,處于低地址的中斷具有高的優(yōu)先級,中斷表如下向量號程序地址來源定義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模擬比較器 對中斷的處理,AT90S8535有2個中斷屏蔽控制寄存器:GIMSK――通用中斷屏蔽寄存器;TIMSK――T/C中斷屏蔽寄存器 一個中斷產(chǎn)生后,全局中斷使能位I將被清0,后續(xù)中斷被屏蔽。用戶可以在中斷例程里對I置位,從而開放中斷,執(zhí)行RETI后,I重新置位。 注意:外部電平中斷沒有中斷標(biāo)志位,因此當(dāng)電平變?yōu)榉侵袛嚯娖胶?,中斷條件即終止。 以下為幾個與中斷有關(guān)的I/O寄存器: 通用中斷屏蔽寄存器――GIMSK位76543210$3B($5B)INT1INT0------GIMSK讀/寫R/WR/WRRRRRR 初始化值:$00 位7,INT1,外部中斷1請求使能,當(dāng)INT1和I都為“1”時,外部引腳中斷使能。MCU通用控制寄存器(MCUCR)中的中斷檢測控制位I/O(ISCI1和ISCI0)定義中斷I是上升沿中斷還是下降沿中斷,或都是低電平中斷。即使引腳被定義為輸出,中斷仍可產(chǎn)生。下INT0同。位6,INT0,外部中斷0請求使能,當(dāng)INT0和I都為“1”時,外部引腳中斷使能。位5~0,保留位。通用中斷標(biāo)志寄存器――GIFR位76543210$3A($5A)INTF1INTF0------GIFR讀/寫R/WR/WRRRRRR 初始化值:$00位7,INTF1,外部中斷標(biāo)志1,當(dāng)INTF1引腳有事件觸發(fā)中斷請求時,INTF1置位“1”。如果SREG中的I及GIMSK中的INT1都為“1”,則MCU將跳轉(zhuǎn)到中斷地址#002。中斷例程執(zhí)行后,此標(biāo)志被清除,另外,標(biāo)志也可通過對其寫“1”來清除。下INTF0同。位7,INTF0,外部中斷標(biāo)志0,當(dāng)INTF0引腳有事件觸發(fā)中斷請求時,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時,輸出比較匹配中斷使能。當(dāng)T/C2的比較匹配發(fā)生,或TIFR中的OCF2置位,中斷例程($003)將執(zhí)行。位6――TCIE2:T/C2溢出中斷使能。當(dāng)TOIE2和I都為1時,T/C2溢出中斷使能。當(dāng)T/C2溢出,或TIFR中的TOV2置位,中斷例程($004)將執(zhí)行。位5――TICIE1:T/C1輸入捕捉中斷使能。當(dāng)TICIE1和I都為1時,輸入捕捉中斷使通。當(dāng)T/C1的輸入捕捉事件發(fā)生(ICP),或TIFR中的ICF1置位,中斷例程($005)將執(zhí)行。位4――OCIE1A:T/C1輸出比較A匹配中斷使能。當(dāng)TOIE1A和I都為1時,輸出比較A匹配中斷使能。當(dāng)T/C1的比較A匹配發(fā)生,或TIFR中的OCF1A置位,中斷例程($006)將執(zhí)行。位3――OCIE1B:T/C1輸出比較B匹配中斷使能。當(dāng)TOIE1B和I都為1時,輸出比較B匹配中斷使能。當(dāng)T/C1的比較B匹配發(fā)生,或TIFR中的OCF1B置位,中斷例程($007)將執(zhí)行。位2――TOIE1:T/C1溢出中斷使能。當(dāng)TOIE1和I都為1時,T/C1溢出中斷使能。當(dāng)T/C1溢出,或TIFR中的TOV1置位,中斷例程($008)將執(zhí)行。位1保留位。位0――TOIE0:T/C0溢出中斷使能。當(dāng)TOIE0和I都為1時,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)位會被硬件清0,此外,也可通過寫“1”來清0。MCU控制寄存器――MCUCR位76543210$38($58)-SESM1SM0ISC11ISC10ISC01ISC00MCUCR讀/寫RR/WR/WR/WR/WR/WR/WR/W 初始化值:$00位7――保留位位6――SE:休眠使能。執(zhí)行SLEEP指令時,SE必須置位,才能使MCU進(jìn)入休眠模式。位5,4――SM1,SM0:休眠模式,這2位用于選擇休眠模式,如下表SM1SM0休眠模式00空閑01保留10掉電11省電位3,2――ISC11,ISC10:中斷I檢測控制,位1和位0,選擇INT1中斷的邊沿或電平如下表:ISC11ISC10休眠模式00低電平中斷01保留10下降沿中斷11上升沿中斷注:改變ISC11/ISC10時,先要禁止INT1(清除GIMSK的INT1位);否則可能引發(fā)不必要的中斷。位1,0――ISC01,ISC00:中斷I檢測控制,位1和位0,選擇INT1中斷的邊沿或電平類同ISC11,ISC10。注:ISC01/ISC00時,首先要禁止INT0(清除GIMSK的INT0位);否則可能引發(fā)不必要的中斷。INTn引腳的電平在檢測邊沿之前采樣。如果邊沿中斷使能,則大于1個MCU時鐘的脈沖將觸發(fā)中斷。如果選擇了低電平觸發(fā),則此電平必須保持到當(dāng)前執(zhí)行的指令結(jié)束。九、8535單片機(jī)定時器/計數(shù)器及其應(yīng)用 定時/計數(shù)器常用作帶內(nèi)部時鐘的時基定時器或用作外部引腳上的脈沖計數(shù)器,其中有些還具有輸入捕獲、比較匹配、PWM脈寬調(diào)制輸出等功能。AT90S8535還有一個看門狗定時器(WDT),用于程序的抗干擾。 1。定時器/計數(shù)器0 T/C0為8位加1計數(shù)器,由$00開始計數(shù),計到$FF后再來一時鐘則溢出,計數(shù)器清0.可用作定時和計數(shù)。 用作定時,時鐘來自晶振時鐘CK或其4鐘分頻,由于時鐘頻率準(zhǔn)確,溢出的時間間隔是準(zhǔn)確的; 用作外計數(shù)時,外部引腳T0輸入信號,可選上升或下降沿計數(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時鐘選擇位2,1及0.其時鐘預(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是帶讀/寫訪問的向上計數(shù)器。若TCNT0被寫入,同是時鐘源正被執(zhí)行,則其在寫入操作之后繼續(xù)計數(shù)。它是8位加1計數(shù)器,由$00開始計數(shù),計到$FF后再來一時鐘則溢出,計數(shù)器清0。TCNT0溢出后,定時器/計數(shù)器中斷標(biāo)志存在器(TIFR)中的TOV0位置1。若TIMSK中的TOIE0為1,且SREG中的I位為1,則可產(chǎn)生定時器/計數(shù)器0流出中斷。 T/C0應(yīng)用例程1:作計數(shù)器。如下圖脈沖信號從PB0(T0)引腳輸入,T/C0作計數(shù)器,計數(shù)結(jié)果由PC口以二進(jìn)制從發(fā)光二極管顯示輸出。程序如下:.include“8535def.inc”.org$000rjmpmainmain:ldir16,low(ramend) ;堆棧指針置初值outspl,r16ldir16,high(ramend)outsph,r16ldir16,$07 ;上升沿計數(shù)outtccr0,r16ldir16,0 ;T/C0置初值0outtcnt0,r16ldir16,$ff ;PC口作輸出outddrc,r16 loop:inr16,tcnt0 outportc,r16 rjmploop T/C0應(yīng)用例程2:作定時器。8MHz晶振,1024分頻,128μs計1個數(shù)。T/C0初值為131,每計125個數(shù)(16ms),T/C0溢出1次。其中中斷服務(wù)子程序使PC0改變方向,產(chǎn)生32ms的對稱方波。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的初值,均可改變中斷時間間隔。2。定時器/計數(shù)器1定時器/計數(shù)器1是16位加1計數(shù)器。它可用于定時,也可用于對名部引腳T1脈沖信號計數(shù),還可停止不用,這些與定時器/計數(shù)器0功能一樣,中不過它是16位計數(shù)器,計數(shù)值為$0000~$FFFF,再加1則溢出,且計數(shù)器清0。此外,定時器/計數(shù)器1還具有比較匹配輸出功能,可實現(xiàn)使引腳在事先預(yù)定的時刻發(fā)生跳變或中斷,而不用CPU隨時關(guān)照,以節(jié)省CPU的時間。定時器/計數(shù)器1可用作8位、9位或10位PWM脈沖調(diào)制器。在此模式下,定時器和OCR1A/OCR1B寄存器用于2個無尖峰干擾的中心對稱的PWM。PWM脈沖經(jīng)濾波,可得到模擬電壓信號。改變PWM脈沖的占空比,即可改變模擬電壓的大小。這種PWM脈沖還便于隔離抗干擾,只用1個光耦隔離即可。定時器/計數(shù)器1還具有輸入捕獲功能,由控制寄存器TCCR1B來定義。另外模擬比較器也可觸發(fā)該輸入捕獲。ICP的引腳邏輯如下圖:如果噪音清除器使能,則觸發(fā)信號要進(jìn)行4次采樣。只有當(dāng)4個采樣值都相等時,才會觸發(fā)捕獲標(biāo)志。輸入引腳信號以XTAL的時鐘頻率被采樣。1.定時器/計數(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ù)器1中比較匹配之后的輸出引腳事件。輸出引腳事件影響OC1A,即輸出比較A引腳1。由于這是對I/O口的可替換功能,相應(yīng)的方向控制位必須設(shè)為1,以便對于輸出引腳進(jìn)行控制,控制設(shè)置如下表:(位5,4類同)x=A或BCOM1x1COM1x0說明00定時器/計數(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位時,輸出比較器中斷1必須通過清除TIMSK寄存器中的中斷使通位來禁止,否則在位變換時,會發(fā)生中斷。位3,2――保留位。90系統(tǒng)單片機(jī)的該位為保留位,總讀0位1,0――PWM11,PWM10:脈沖寬度調(diào)制器選擇位,見下PWM模式選擇表:列表。PWM模式選擇PWM11PWM10說明00禁止定時器/計數(shù)器1的PWM操作01定時器/計數(shù)器1為8位PWM10定時器/計數(shù)器1為9位PWM11定時器/計數(shù)器1為10位PWM 2.定時器/計數(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個上升/下降沿處被激活。當(dāng)ICNC1位被置1,4個延續(xù)的采樣成為ICP,即輸入捕獲引腳上的測量值,所有的采樣需為高/低,取決于ICES1位的輸入捕獲觸發(fā)特性。實際的采樣頻率為XTAL時鐘頻率。 位6――ICES1:輸入捕獲1邊沿選擇。 當(dāng)ICES1位被清0/(置1)時,定時器/計數(shù)器1的內(nèi)容被傳輸?shù)捷斎氩东@寄存器ICR1,即在輸入捕獲引腳ICP的下降/(上升)邊沿。位5,4――保留位,總讀0位3――CTC1:在比較匹配上清除定時器/計數(shù)器0。 當(dāng)CTC1被置1時,在比較匹配之后,定時器/計數(shù)器1被復(fù)位到時鐘周期中的$0000. 當(dāng)CTC1被清0時,定時器/計數(shù)器1繼續(xù)計數(shù),直到它被停止、清除、溢出或被改變方向。 在PWM模式下,該位無效。位2,1,0――CS12,CS11,CS10:時鐘選擇1的位。其預(yù)定比例源見下表:CS12CS11CS10說明000停止,T/C1被停止001CK010CK/8011CK/64100CK/256101CK/1024110外部T1腳,下降沿111外部T1腳,上升沿3.定時器/計數(shù)器1――TCNT1H和TCNT1L位15141312111098$2D($4D)MSB--TCNT1H$2C($4C)LSBTCNT1L76543210讀/寫R/WR/WR/WR/WR/WR/WR/WR/W初始化值:$0000這個16位的寄存器包括6位定時器/計數(shù)器1的預(yù)定比例值。當(dāng)確保當(dāng)CPU訪問這些寄存器時,高、低字節(jié)被同時讀寫,使用一個8位的暫存寄存器(TEMP)來完成訪問。TCNT1定時器/計數(shù)器1寫入:當(dāng)CPU向高位字節(jié)TCNT1H寫入時,寫入的數(shù)據(jù)被放入TEMP寄存器中。然后當(dāng)CPU向低字節(jié)TCNT1L寫入時,數(shù)據(jù)的字節(jié)被與TEMP寄存器中的字節(jié)數(shù)據(jù)組合,且全部的16位被同步地身TCNT1定時器/計數(shù)器1寄存器寫入。TCNT1定時器/計數(shù)器1讀?。寒?dāng)CPU讀低位字節(jié)TCNT1L時,TCNT1L低字節(jié)的數(shù)據(jù)被送到CPU,且高字節(jié)TCNT1H的數(shù)據(jù)被放置于TEMP寄存器中;當(dāng)CPU讀高位字節(jié)TCNT1H時,CPU接收TEMP寄存器中的數(shù)據(jù)。4.定時器/計數(shù)器1輸出比較寄存器――OCR1AH和OCR1AL位15141312111098$2B($4B)MSB--OCR1AH$2A($4A)LSBOCR1AL76543210讀/寫R/WR/WR/WR/WR/WR/WR/WR/W初始化值:$00005.定時器/計數(shù)器1輸出比較寄存器――OCR1BH和OCR1BL位15141312111098$29($49)MSB--OCR1BH$28($48)LSBOCR1BL76543210讀/寫R/WR/WR/WR/WR/WR/WR/WR/W初始化值:$0000輸出比較器為一個16位讀/寫寄存器。定時器/計數(shù)器1輸出比較寄存器包括了將要連續(xù)地與定時器/計數(shù)器1相比較的數(shù)據(jù)。比較匹配的操作在定時器/計數(shù)器1的控制和狀態(tài)寄存器中被區(qū)分6.定時器/計數(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上信號的上升或下降沿(根據(jù)輸入捕獲邊沿設(shè)置ICES1)被檢測到時,定時器/計數(shù)器1的當(dāng)前值被傳輸?shù)捷斎氩东@寄存器ICR1;同時,輸入捕獲標(biāo)志ICF1被設(shè)為1.3。定時器/計數(shù)器2T/C2的時鐘源稱為PCK2。若ASSR的AS2位清0,PCK2與系統(tǒng)主時鐘連接;若置位,T/C2將由PC6(TOSC1)異步驅(qū)動,使得T/C2可以作為一個實時時鐘。如果AS2置位,則PC6(TOSC1)和PC7(TOSC2)從C口脫離。引腳上即可外接一個時鐘,也可在PC6(TOSC1)上直接施加時鐘信號。此時鐘頻率必須低于MCU主時鐘的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:比較匹配時清除T/C2。CTC2為1時,比較匹配事件發(fā)生后,TCNT2將復(fù)位為0,若CTC2為0,則T/C2將連續(xù)計數(shù)而受比較匹配的影響。在PWM下,這一位無效。位2,1,0――CS22/21/20:時鐘選擇。T/C2預(yù)分頻選擇如下表:CS22CS21CS20說明000停止001PCK2010PCK2/8011PCK2/32100PCK2/64101PCK2/128110PCK2/256111PCK2/1024T/C2計數(shù)器――TCNT2位76543210$24($44)MSBLSBTCNT2讀/寫R/WR/WR/WR/WR/WR/WR/WR/W初始值$00T/C2是可進(jìn)行讀/寫訪問的8位向上計數(shù)器。只要有時鐘輸入,T/C2就會在寫入值的基礎(chǔ)上向上計數(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è)置為相等,不會引發(fā)比較匹配。匹配發(fā)生后,T/C中斷標(biāo)志寄存器TIFR中的匹配中斷標(biāo)志OCF2置位。4??撮T狗定時器看門狗定時器由片內(nèi)一個獨(dú)立的振蕩器驅(qū)動。在Vcc=5V的條件下,典型振蕩頻率為1MHz,Vcc=3V時,典型振蕩頻率為350KHz。使用看門狗定時器時,要注意選擇看門狗定時器復(fù)位間隔時間小于各分段程序執(zhí)行時間的1/2,以免正常運(yùn)行時看門狗定時器復(fù)位。看門狗定時器控制寄存器――WDTCR位76543210$24($44)---WDTOEWDEWDP2WDP1WDP0WDTCR讀/寫RRRR/WR/WR/WR/WR/W初始值$00位7,6,5――保留位,總讀0位4――WDTOE:看門狗關(guān)斷使能。當(dāng)WDTOE被清除時,該位必須被置1,否則,看門狗將不會被禁止。一旦置位后,硬件將在4個時鐘周期后清除訪位。位3――WDE:看門狗觸發(fā)。若WDE被清為0,看門狗定時器功能被禁止。WDE僅在WDTOE位設(shè)置時被清除。為了禁止被使能的看門狗定時器,必須遵守以下過程:1.在同一個操作中,把WDTOE和WDE寫成1,即使在禁止操作開始前WDE為1,也必須把寫入WDE。2.在隨后4個機(jī)器周期中,把WDE寫為0,這會禁止看門狗。位2,1,0――WDP2/1/0:看門狗定時器預(yù)定比例器2/1/0。此三位決定了當(dāng)看門狗定時器使能時,看門狗定時器的預(yù)定比例。如下表所述:表??撮T狗定時器預(yù)分頻選擇WDP2WDP1WDP0分頻系統(tǒng)/K典型溢出時間/s(Vcc=3v)典型溢出時間/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ù)位之前使能,則看門狗定時器有可能不是從0開始計數(shù)??撮T狗定時器應(yīng)用編程格式如下:: ;初始化wdr ;啟動看門狗定時器,看門狗定時器溢出間隔1.9sldir16,$0foutwdtcr,r16:aa::wdr:wdr:wdrrjmpaa調(diào)試程序時,先不啟動看門狗定時器,程序調(diào)試好后,為了抗干擾,再加上看門狗定時器??撮T狗定時器關(guān)斷步驟如下:ldir16,$1foutwdtcr,r16ldir16,$17outwdtcr,r16十、8535單片機(jī)模擬量輸入接口模/數(shù)轉(zhuǎn)換器特點(diǎn): 10位精度 ±2LSB精確度 0.5LSB集成非線性度 65~260μs轉(zhuǎn)換時間 8通道 自由運(yùn)行模式和單次轉(zhuǎn)換模式 ADC轉(zhuǎn)換結(jié)束中斷 休眠模式噪聲消除AT90S8535具有10位精度的逐次逼近型A/D轉(zhuǎn)換器。ADC與一個8通道的模擬多路轉(zhuǎn)換器相連,這樣就允許A口作為ADC的輸入引腳。ADC包含一個采樣保持器。ADC具有2個模擬供電引腳AVcc和AGND。AGND必須與GND相連,具AVcc與Vcc引腳電壓的差別不能大于±0.3V。AREF為外部參考電壓輸入端,此電壓介于AGND與AVcc之間。操作:ADC可以工作于兩種模式,單次轉(zhuǎn)換及自由運(yùn)行模式。在單次轉(zhuǎn)換模式下,必須啟動每一次置換;在自由運(yùn)行模式下,ADC會連續(xù)采樣并更新ADC數(shù)據(jù)寄存器。ADCSR的ADFR位用于選擇模式。ADC由ADCSR的ADEN位控制全能。全能ADC后,第一次轉(zhuǎn)換將引發(fā)一次啞轉(zhuǎn)換過程,以初始化ADC,然后才真正進(jìn)行A/D轉(zhuǎn)換。對用戶而言,此次轉(zhuǎn)換過程比其他轉(zhuǎn)換過程要多12個ADC時鐘周期。ADSC置位將啟動A/D轉(zhuǎn)換。在轉(zhuǎn)換過程中,ADSC一直操持為高;轉(zhuǎn)換結(jié)束后,ADSC硬件清0。如果在轉(zhuǎn)換過程中通道改變了,ADC首先要完成當(dāng)前的轉(zhuǎn)換,然后通道才會改變。ADC產(chǎn)生10的結(jié)果,ADCH和ADCL。為了保證正確讀取數(shù)據(jù),系統(tǒng)采用了如下保護(hù)邏輯:讀數(shù)據(jù)時,首先要讀ADCL。一旦開始讀ADCL,ADC對數(shù)據(jù)寄存器的訪問就被禁止了。即,如果讀取了ADCL,那么即使在讀ADCH之前,另一次ADC結(jié)束了,2個寄存器的值也不會被新的ADC結(jié)果更新,新轉(zhuǎn)換的數(shù)據(jù)將丟失。當(dāng)讀完ADCH之后,ADC才能繼續(xù)對ADCH和ADCL進(jìn)行訪問。ADC結(jié)束后會置位ADIF。即使發(fā)生如上所述的,由于ADCH未讀取而丟失轉(zhuǎn)換數(shù)據(jù)的情況,ADC結(jié)束中斷仍將觸發(fā)。預(yù)分頻器:ADC有一個預(yù)分頻器,可將系統(tǒng)時鐘調(diào)整到可接受的ADC時鐘(50~200kHz)。過高的頻率將導(dǎo)致采樣精度降低。ADCSR的ADPS0~2用于產(chǎn)生合適的ADC時鐘。一旦ADCSR的ADEN置位,預(yù)分頻器就開始連續(xù)不斷地計數(shù),直到ADEN清0。ADSC的作用是對ADC進(jìn)行初始化。A/D轉(zhuǎn)換在ADC時鐘的上升沿啟動。采樣/保持要花費(fèi)1.5位ADC時鐘。在第13個時鐘ADC轉(zhuǎn)換結(jié)束,數(shù)據(jù)進(jìn)入ADC數(shù)據(jù)寄存器。ADC噪聲抑制功能:ADC具有消除由CPU核引入的噪聲的功能,實現(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)換模式時,這一位必須置1,以啟動每一次轉(zhuǎn)換;而對于自由運(yùn)行模式,則只需在第一次轉(zhuǎn)換時設(shè)置一次。不論設(shè)置動作是在ADEN置位之后,還是同時進(jìn)行,ADC都將進(jìn)行一次啞轉(zhuǎn)換,以初始化ADC。轉(zhuǎn)換過程中ADSC保持為高。實際轉(zhuǎn)換過程結(jié)束后,但在轉(zhuǎn)換結(jié)果進(jìn)入ADC數(shù)據(jù)寄存器之前(差1個ADC時鐘),ADSC變?yōu)榈?。在啞轉(zhuǎn)換過程中,ADSC保持為高,對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掃描多個通道:由于模擬通道的轉(zhuǎn)換總是要延遲到轉(zhuǎn)換結(jié)束,因此,自由運(yùn)行模式可以用來掃描多個通道而不中斷轉(zhuǎn)換器。一般情況下,ADC轉(zhuǎn)換結(jié)束中斷用于修改通道,但需注意,中斷在轉(zhuǎn)換結(jié)果可讀時觸發(fā)。在自由運(yùn)行模式下,一下次轉(zhuǎn)換在中斷觸發(fā)的同時啟動。ADC中斷觸發(fā),即新一次轉(zhuǎn)換開始后,改變ADMUX將不起作用。ADC噪聲消除技術(shù):AT90S8535的內(nèi)外部數(shù)字電路會產(chǎn)生EMI電磁干擾,從而影響模擬測量精度。如果轉(zhuǎn)換精度要求很,則需應(yīng)用如下技術(shù),以減少噪聲:1.AT90S8535的模擬部分及其他模擬器件在PCB上要有獨(dú)立的地線層。模擬地線與數(shù)字地線單點(diǎn)相連。2使模擬信號通路盡量短。要使模擬走線在模擬地上通過,并盡量遠(yuǎn)離高速數(shù)字通路。3.AVcc要通過一個RC網(wǎng)絡(luò)連接Vcc。4利用ADC的噪聲消除技術(shù)減少CPU引入的噪聲。5.如果A口的一些引腳用作數(shù)字輸出口,則在ADC轉(zhuǎn)換過程中不要改變其狀態(tài)。 注:由于AVcc同時也為A口輸出驅(qū)動提供電源,因此,如果A口有輸出引腳,則RC網(wǎng)絡(luò)不要使用。模/數(shù)轉(zhuǎn)換應(yīng)用舉例:測量8535的ACH6和ACH72路模擬電壓信號,電路如下:2路輸入信號經(jīng)RC濾波去除交流分量。6.2V穩(wěn)壓管起保護(hù)作用,高于6.2V的輸入信號被限幅在6.2V之內(nèi)。對負(fù)的輸入信號,穩(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電容濾波,以減少交流分量對ADC的影響。5位數(shù)碼管最左邊顯示測量的路號,右邊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,啟動ADC,自由模式outadcsr,r18 ;64分頻作A/D時鐘rcallt1ms ;延時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 ;動態(tài)掃描子程,見前面例程decr17brnebbinr16,adcl ;讀A/D結(jié)果放入r17:r16中inr17,adchldir18,$07 ;改變ADMUX為第7路outadmux,r18rcallb16td5ldir22,6 ;萬位顯示路號6movr21,r19 ;4位ADC結(jié)果送顯示緩沖區(qū)movr20,r18movr19,r17movr18,r16ldir17,200cc:rcallsmaiodecr17brneccrjmpaa 模擬比較器:模擬比較器對正極PB2引腳(AIN0)和負(fù)極PB3引腳(AIN1)之上的輸入值進(jìn)行比較。當(dāng)電壓值Vpb2>Vpb3,模擬比較器輸出ACO被置位。比較器的輸出可用來觸發(fā)模擬比較器中斷(上升沿、下降沿或電平變換),也可觸發(fā)定時器/計數(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)閉。可在任何時候?qū)ζ渲梦?,以便關(guān)閉,可減少器件功耗(常用于休閑模式下又不需從模擬比較器中斷喚醒的情況)。改變ACD位時,模擬比較器中斷必須通過清空ACSR中的ACIE位來禁止,否則,在該位改變時,會產(chǎn)生中斷。位6――保留位。位5――ACO:模擬比較器輸出。位4――ACI:模擬比較器中斷標(biāo)志位。當(dāng)比較器輸出觸發(fā)中斷時,ACI將置位。中斷方式由ACIS1和ACIS0決定。當(dāng)執(zhí)行相應(yīng)的中斷處理向量時,ACI被硬件清0。另外,ACI也可通過對此位寫邏輯1來清0。注意,如果ACSR的另一些位被SBI或CBI指令修改時,ACI亦被清0.位3――ACIE:模擬比較器中斷使能。當(dāng)ACIE位設(shè)為1,且狀態(tài)寄存器(SREG)中的I位被設(shè)為1時,模擬比較器中斷被觸發(fā)。當(dāng)被清0,中斷被禁止。位2――ACIC:模擬比較器輸入捕獲使能。當(dāng)被置1時,該位觸發(fā)定時器/計數(shù)器1的輸入捕獲功能,由模擬比較器來觸發(fā)。為了使比較器觸發(fā)定時器/計數(shù)器1的輸入捕獲中斷,定時器中斷屏蔽寄存器(TIM-SK)的TICIE1位必須被設(shè)置。位1,0――ACIS1,ACIS0:模擬比較器中斷模式選擇,如下表:ACIS1ACIS0中斷模式ACIS1ACIS0中斷模式00電平變換引發(fā)中斷10ACO下降沿中斷01保留11ACO上升沿中斷注意:改變ACIS1/ACIS0時,要禁止模擬比較器的中斷,否則有可能引發(fā)不必要的中斷。十一、AVR單片機(jī)串行接口及應(yīng)用1、通用串行接口UART90系列單片機(jī)帶有一個全雙工的通用串行異步收發(fā)器(UART),其主要特征:1、波特率發(fā)生器可生成多種波特率;2、在XTAL低率下,仍可產(chǎn)生較高的波特率;3、8位和9位數(shù)據(jù);4、噪聲濾波;5、過速的檢測;6、幀錯誤檢測;7、錯誤起始位的檢測;8、3個獨(dú)立的中斷,即發(fā)送(TX)完成,發(fā)送數(shù)據(jù)寄存器空,接收(RX)完成。數(shù)據(jù)傳輸通過把被傳送的數(shù)據(jù)寫入UART的I/O寄存器UDR初始化。在以下情況下,數(shù)據(jù)從UDR傳送到移位寄存器中: 1、當(dāng)前一個字符的停止位被移出后,新的字符被寫入UDR寄存器,移位寄存器立即再被裝入。 2、當(dāng)前一個字符的停止位被移出前,新的字符被寫入UDR寄存器,移位寄存器在當(dāng)前字符的停止位移出后被裝入。接收器前端的邏輯以16倍波特率對RXD引腳采樣。當(dāng)線路閑置時,一個邏輯0的采樣將被認(rèn)為是起始位的下降沿,并且起始位的探測序列開始。通過清除UCR寄存器中的RXEN位,使接收器被禁止。這意味首PD0可以被用作通用的I/O引腳。當(dāng)RXEN被設(shè)置時,UART接收器被連到PD0引腳而不管方向寄存器的設(shè)置。UARTI/O數(shù)據(jù)寄存器――UDR位76543210$0C($2C)MSBLSBUDR讀/寫R/WR/WR/WR/WR/WR/WR/WR/W初始值$00UDR寄存器是2個物理上分離的寄存器,分享同一個I/O地址。當(dāng)定入寄存器時,UART的發(fā)送數(shù)據(jù)寄存器被寫放;當(dāng)讀UDR時,讀的是UART接收寄存器。UARTI/O狀態(tài)寄存器――USR位76543210$0B($2B)RXCTXCUDREFEOR-―-USR讀/寫RRRRRRRR初始值0b00100000USR寄存器是一個只讀的寄存器,提供UART的狀態(tài)信息。位7――RXC:UART接收完成。當(dāng)收到的字符從接收移位寄存器傳到UDR中時,該位被設(shè)置。不論探測到任何的幀錯誤,該位都被設(shè)置;當(dāng)UCR中的RXCIE位被設(shè)置后,UART接收完成中斷將被執(zhí)行(當(dāng)RXC被設(shè)置),RXC在讀UDR時被清除;當(dāng)使用中斷數(shù)據(jù)接收時,接收完成中斷子程序必須讀UDR,而清除RXC;否則,在中斷完成后,會引起新的中斷。位6――TXC:UART發(fā)送完成。當(dāng)發(fā)送移位寄存器的全部數(shù)據(jù)被移出,且沒有新的數(shù)據(jù)被寫入UDR時,該位被設(shè)置。這個標(biāo)志在半雙工的通信接口中很有用;當(dāng)完成發(fā)送后,立即釋放通信總線,并必須進(jìn)入接收模式;當(dāng)UCR中TXCIE被設(shè)置后,設(shè)置TXC將導(dǎo)致UART發(fā)送完成中斷被執(zhí)行,TXC在執(zhí)行相應(yīng)的中斷微量時,被硬件清除,或者TXC也可以通過在該位寫一個邏輯1而被清除。位5――UDRE:UART數(shù)據(jù)寄存器空。當(dāng)定性UDR的字符被傳送到發(fā)送移位寄存器中時,該位被設(shè)置。設(shè)置該位指示出發(fā)送器準(zhǔn)備新的數(shù)據(jù)發(fā)送;當(dāng)UCR中的UDRIE位被設(shè)置時,UART發(fā)送完成中斷將被執(zhí)行。位4――FE:幀出錯。在幀出錯條件被檢測到時,該位被設(shè)置(如當(dāng)收到數(shù)據(jù)的停止位為0時)。FE在收到數(shù)據(jù)的停止位為1時,被清除。位3――OR:過速(超越出錯)。如果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時,如果全局中斷被使能,在USR中設(shè)置RXC位將導(dǎo)致接收完成中斷被執(zhí)行。位6――TXCIE:TX完成中斷使能。位5――UDRIE:UART數(shù)據(jù)寄存器空中斷使能。位4――RXEN:接收使能。當(dāng)該位被設(shè)置為1時,允許UART接收。當(dāng)接收器被禁止時,TXC,OR及FE無法置位。如果這些位被設(shè)置,在把RXEN關(guān)閉時,不能清除它們。位3――TXEN:發(fā)送

溫馨提示

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

評論

0/150

提交評論