單片機(jī)的編程技術(shù)_第1頁(yè)
單片機(jī)的編程技術(shù)_第2頁(yè)
單片機(jī)的編程技術(shù)_第3頁(yè)
單片機(jī)的編程技術(shù)_第4頁(yè)
單片機(jī)的編程技術(shù)_第5頁(yè)
已閱讀5頁(yè),還剩65頁(yè)未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡(jiǎn)介

單片機(jī)的編程技術(shù)第1頁(yè),課件共70頁(yè),創(chuàng)作于2023年2月

單片機(jī)與一般集成電路的區(qū)別在于可編程應(yīng)用,程序是單片機(jī)應(yīng)用系統(tǒng)的靈魂。

3.1程序設(shè)計(jì)的方法和技巧3.1.1程序設(shè)計(jì)流程

由于匯編語(yǔ)言是面向機(jī)器的語(yǔ)言,因此對(duì)單片機(jī)系統(tǒng)進(jìn)行程序設(shè)計(jì)時(shí)必須考慮硬件資源的配置。當(dāng)硬件系統(tǒng)設(shè)計(jì)完成后,可從以下幾方面進(jìn)行程序設(shè)計(jì):第2頁(yè),課件共70頁(yè),創(chuàng)作于2023年2月1.分析問(wèn)題——針對(duì)現(xiàn)有條件,明確在程序設(shè)計(jì)時(shí)應(yīng)該“做什么”2.確定算法——解決“怎樣做”的問(wèn)題3.繪制程序流程圖——用圖形的方法描繪解決問(wèn)題的思路

(常用的程序流程圖符號(hào)如圖3-1所示)

4.分配內(nèi)存單元——確定程序和數(shù)據(jù)區(qū)的起始地址5.編寫源程序——用指令的形式將程序流程圖實(shí)現(xiàn)出來(lái)6.匯編——用開發(fā)機(jī)或仿真器將源程序轉(zhuǎn)換成機(jī)器碼,便于單片機(jī)識(shí)別7.在線仿真調(diào)試——查錯(cuò)、改錯(cuò),對(duì)程序進(jìn)行優(yōu)化。第3頁(yè),課件共70頁(yè),創(chuàng)作于2023年2月常用的程序流程圖符號(hào)如圖3-1所示。

圖3-1常用的程序流程圖符號(hào)第4頁(yè),課件共70頁(yè),創(chuàng)作于2023年2月3.1.2匯編語(yǔ)言編程技巧

盡量采用模塊化程序設(shè)計(jì)方法;

這種設(shè)計(jì)方法是把一個(gè)完整的程序分成若干個(gè)功能相對(duì)獨(dú)立的、較小的程序模塊,對(duì)各個(gè)程序模塊分別進(jìn)行設(shè)計(jì)、編制程序和調(diào)試,最后把各個(gè)調(diào)試好的程序模塊裝配起來(lái)進(jìn)行聯(lián)調(diào),最終成為一個(gè)有實(shí)用價(jià)值的程序。模塊化程序設(shè)計(jì)的優(yōu)點(diǎn)是:對(duì)單個(gè)程序模塊設(shè)計(jì)和調(diào)試比較方便、容易完成,一個(gè)模塊可以被多個(gè)任務(wù)共用。盡量采用循環(huán)結(jié)構(gòu)和子程序結(jié)構(gòu)

;

采用循環(huán)結(jié)構(gòu)和子程序結(jié)構(gòu),可以使程序的總?cè)萘繙p小,提高程序的效率,節(jié)省內(nèi)存。第5頁(yè),課件共70頁(yè),創(chuàng)作于2023年2月盡量少用無(wú)條件轉(zhuǎn)移指令

;

少用無(wú)條件轉(zhuǎn)移指令,可以保證程序的條理更加清晰,從而減少錯(cuò)誤發(fā)生。充分利用累加器;

累加器是主程序和子程序之間信息傳遞的橋梁,利用累加器傳遞入口參數(shù)或返回參數(shù)比較方便。這時(shí),一般不要把累加器內(nèi)容壓入堆棧。對(duì)于通用子程序要保護(hù)現(xiàn)場(chǎng);

由于子程序的通用性,除了保護(hù)子程序入口參數(shù)的寄存器內(nèi)容外,還要對(duì)子程序中用到的其它寄存器內(nèi)容一并入棧保護(hù)。

對(duì)于中斷處理,還要保護(hù)程序狀態(tài)字

在中斷處理程序中,既要保護(hù)處理程序中用到的寄存器內(nèi)容,還要保護(hù)程序狀態(tài)字PSW。否則,當(dāng)中斷服務(wù)程序執(zhí)行結(jié)束返回主程序時(shí),整個(gè)程序的執(zhí)行可能會(huì)被打亂。第6頁(yè),課件共70頁(yè),創(chuàng)作于2023年2月

80C51單片機(jī)匯編語(yǔ)言的語(yǔ)句行由4個(gè)字段組成,匯編程序能對(duì)這種格式正確地進(jìn)行識(shí)別。這4個(gè)字段的格式為:

[標(biāo)號(hào):]操作碼[操作數(shù)]

[;注釋]

括號(hào)內(nèi)的部分可根據(jù)實(shí)際情況取舍,各字段之間要用分隔符分隔??捎米鞣指舴姆?hào)有冒號(hào)、空格、逗號(hào)、分號(hào)等。如:

MAIN:MOVA,#68H;A←68H3.1.3匯編語(yǔ)言的語(yǔ)句格式第7頁(yè),課件共70頁(yè),創(chuàng)作于2023年2月1.標(biāo)號(hào)

標(biāo)號(hào)是指令的符號(hào)地址。有了標(biāo)號(hào),程序中的其它語(yǔ)句才能很方便地訪問(wèn)該語(yǔ)句。有關(guān)標(biāo)號(hào)的規(guī)定為:標(biāo)號(hào)要由1~8個(gè)ASCII碼字符組成,但必須以字母開

頭,其余字符可以是字母、數(shù)字或其它特定字符。不能使用匯編語(yǔ)言已經(jīng)定義了的符號(hào)作為標(biāo)號(hào),如指令

助記符MOV、偽指令記憶符END以及寄存器的符號(hào)名

稱R1等。標(biāo)號(hào)后邊必須跟冒號(hào)。同一標(biāo)號(hào)在一個(gè)程序中只能定義一次,不能重復(fù)定義。第8頁(yè),課件共70頁(yè),創(chuàng)作于2023年2月2.操作碼

操作碼用于規(guī)定語(yǔ)句執(zhí)行的操作。它用指令助記符或偽指令助記符表示,是匯編語(yǔ)句中唯一不能空缺的部分。3.操作數(shù)

操作數(shù)用于給指令的操作提供數(shù)據(jù)或地址。在一條語(yǔ)句中,可能沒有操作數(shù),也可能只有1個(gè)操作數(shù),還可能同時(shí)包含2~3個(gè)操作數(shù)。各操作數(shù)之間要以逗號(hào)分隔。操作數(shù)一般以下面幾種形式出現(xiàn):常數(shù)工作寄存器名特殊功能寄存器名第9頁(yè),課件共70頁(yè),創(chuàng)作于2023年2月

標(biāo)號(hào)名符號(hào)“$”,表示程序計(jì)數(shù)器PC的當(dāng)前值。如:

SJMP$表達(dá)式4.注釋

注釋不屬于語(yǔ)句的功能部分,它只是對(duì)語(yǔ)句的解釋說(shuō)明,只要用“;”開頭,就表明以下為注釋內(nèi)容。使用注釋可使程序文件的編制顯得更加清楚,便于編程人員的閱讀和維護(hù)。注釋的長(zhǎng)度不限,一行不夠可以換行接著書寫,但換行后仍要以“;”開頭。第10頁(yè),課件共70頁(yè),創(chuàng)作于2023年2月

用戶根據(jù)系統(tǒng)要求用匯編語(yǔ)言或高級(jí)語(yǔ)言編好的程序,叫源程序。3.2.1源程序的編輯和匯編

由于通用微型計(jì)算機(jī)的普及,現(xiàn)在單片機(jī)應(yīng)用系統(tǒng)的程序設(shè)計(jì)都借助于通用微型計(jì)算機(jī)。全過(guò)程可概括為“機(jī)器編輯→交叉匯編→串行傳送”三個(gè)部驟,如圖3-2所示。

3.2源程序的編制第11頁(yè),課件共70頁(yè),創(chuàng)作于2023年2月1.編輯

將源程序輸入計(jì)算機(jī)并進(jìn)行修改的過(guò)程就是編輯。編輯工作一般在通用微型計(jì)算機(jī)上利用各種編輯軟件完成,故又稱其為機(jī)器編輯。編輯完成后,生成一個(gè)由匯編指令和偽指令共同組成的ASCII碼文件,其擴(kuò)展名為“.ASM”。圖3-2單片機(jī)匯編語(yǔ)言程序的生成過(guò)程

第12頁(yè),課件共70頁(yè),創(chuàng)作于2023年2月

計(jì)算機(jī)只能識(shí)別機(jī)器語(yǔ)言,但程序編制人員通常以匯編語(yǔ)言或高級(jí)語(yǔ)言編制源程序。這樣,要讓計(jì)算機(jī)能聽從程序編制人員的指揮,就必須要將匯編語(yǔ)言或高級(jí)語(yǔ)言轉(zhuǎn)換成機(jī)器語(yǔ)言,供計(jì)算機(jī)識(shí)別,這個(gè)過(guò)程稱為匯編(或編譯)。

匯編工作常由匯編軟件來(lái)完成。匯編軟件通常具有指令的錯(cuò)誤識(shí)別與提示能力,為編程者迅速查找源程序中的錯(cuò)誤提供了方便。在匯編過(guò)程中,我們只能發(fā)現(xiàn)源程序中的語(yǔ)法錯(cuò)誤和一般性的邏輯錯(cuò)誤,但不能檢查程序結(jié)構(gòu)上的錯(cuò)誤。如果有錯(cuò)誤,匯編軟件會(huì)報(bào)告,指出錯(cuò)誤位置及錯(cuò)誤類型。程序錯(cuò)誤被糾正后,要重新進(jìn)行編譯調(diào)試,直至程序匯編無(wú)誤為止?,F(xiàn)在常用的匯編方法是交叉匯編,即用PC機(jī)中的匯編程序去匯編80C51單片機(jī)中的源程序。匯編后生成的機(jī)器碼稱為目標(biāo)程序,擴(kuò)展名為“.OBJ”。該目標(biāo)程序可通過(guò)PC機(jī)的串行通信接口直接傳送到開發(fā)系統(tǒng)的RAM中。

2.匯編第13頁(yè),課件共70頁(yè),創(chuàng)作于2023年2月

在前面的課題與實(shí)訓(xùn)環(huán)節(jié)中用到的ORG和END命令就是典型的偽指令,它們是為下一步的匯編工作提供起始地址和結(jié)束地址的。

我們知道,匯編語(yǔ)言程序的機(jī)器匯編是由計(jì)算機(jī)自動(dòng)完成的,因此在源程序中應(yīng)該有向匯編程序發(fā)出的命令。

這種在源程序中出現(xiàn),通知匯編程序應(yīng)該如何完成匯編工作的指令,就是偽指令。

下面介紹80C51單片機(jī)常用的偽指令。

3.2.2偽指令第14頁(yè),課件共70頁(yè),創(chuàng)作于2023年2月1.ORG(Origin)匯編起始命令格式為:ORG16位地址或標(biāo)號(hào)該命令總是出現(xiàn)在源程序的開始位置。用來(lái)規(guī)定目標(biāo)程序(即此命令后面的程序或數(shù)據(jù)塊)的起始地址。ORG后面通常是16位地址,也可以是已定義的標(biāo)號(hào)地址或表達(dá)式。如ORG1000H。在程序中如果不用ORG規(guī)定起始地址,則匯編得到的目標(biāo)程序?qū)?000H開始存放。在一個(gè)源程序中,ORG指令可以多次使用,但要求地址值要由小到大依序排列,且不能出現(xiàn)空間上的重疊。2.END匯編結(jié)束命令格式為:END

該命令用于中止源程序的匯編工作。END是匯編語(yǔ)言源程序的結(jié)束標(biāo)志,因此在整個(gè)源程序中只能有一條END指令,且位于程序的最后。如果END命令出現(xiàn)在源程序中間,對(duì)其后面的源程序,計(jì)算機(jī)將不予匯編。第15頁(yè),課件共70頁(yè),創(chuàng)作于2023年2月3.EQU(Equate)等值命令格式為:

標(biāo)號(hào)名EQU表達(dá)式該命令用來(lái)給標(biāo)號(hào)賦值。賦值以后,其標(biāo)號(hào)值在整個(gè)程序中有效。例如:

DATEQU30H4.DB(DefineByte)定義字節(jié)命令格式為:

[標(biāo)號(hào):]DB字節(jié)數(shù)據(jù)表該命令用于從標(biāo)號(hào)指定的地址開始,連續(xù)存放字節(jié)數(shù)據(jù)表,常與查表指令MOVC配合使用。其中字節(jié)數(shù)據(jù)表可以是一個(gè)或多個(gè)字節(jié)數(shù)據(jù)、字符串或表達(dá)式。例如:

DB“hello”第16頁(yè),課件共70頁(yè),創(chuàng)作于2023年2月5.DW(DefineWord)定義字命令格式為:

[標(biāo)號(hào):]DW字?jǐn)?shù)據(jù)表該命令用于從標(biāo)號(hào)指定的地址開始,連續(xù)存放16位字?jǐn)?shù)據(jù)表。該數(shù)據(jù)表在程序存儲(chǔ)器中存放的格式為:高8位存放在低地址單元,低8位存放在高地址單元。例如:ORG1000HTABLE:DW1234H,66H……匯編后,(1000H)=12H,(1001H)=34H,(1002H)=00H,(1003H)=66H。DB和DW定義的數(shù)據(jù)表,數(shù)的個(gè)數(shù)不能超過(guò)80個(gè)。如遇數(shù)目較多時(shí),可以使用多個(gè)定義命令。在80C51程序設(shè)計(jì)中,常用DB來(lái)定義數(shù)據(jù),DW來(lái)定義地址。

第17頁(yè),課件共70頁(yè),創(chuàng)作于2023年2月6.BIT定義位命令格式為:標(biāo)號(hào)名BIT位地址該命令用來(lái)將位地址賦值給指定的標(biāo)號(hào)名。例如:KAIGUANBITP1.0將P1.0的位地址賦值給標(biāo)號(hào)KAIGUAN,在后面編程時(shí)就可以用KAIGUAN來(lái)代替P1.0。7.DS(DefineStorage)定義空間命令格式為:

[標(biāo)號(hào):]DS表達(dá)式該命令用于從指定單元開始,預(yù)留一定數(shù)目的字節(jié)單元作存儲(chǔ)區(qū),供程序運(yùn)行使用。第18頁(yè),課件共70頁(yè),創(chuàng)作于2023年2月

程序結(jié)構(gòu)通常分為三種形式:順序結(jié)構(gòu)、分支結(jié)構(gòu)、循環(huán)結(jié)構(gòu)。形式如圖3-3所示。

圖3-3三種程序結(jié)構(gòu)3.3基本程序結(jié)構(gòu)第19頁(yè),課件共70頁(yè),創(chuàng)作于2023年2月

順序程序是最簡(jiǎn)單的程序結(jié)構(gòu),它既無(wú)分支,又無(wú)循環(huán),在執(zhí)行時(shí)單片機(jī)是按程序中指令的順序逐條進(jìn)行的。

編程注意事項(xiàng):

正確選擇程序存放的地址:通常主程序起始地址在0100H之后,但由于80C51單片機(jī)上電后從0000H開始執(zhí)行,所以必須在0000H設(shè)一條轉(zhuǎn)移指令,轉(zhuǎn)至主程序首址。

要注意檢查所用指令是否合法,在沒有把握的情況下,最好查一下指令表。如,下面的指令是非法的:

MOVX2002H,2000H

為使程序運(yùn)行結(jié)束時(shí)不至于跑飛,可在程序最后加一條暫停指令,如:SJMP$。

3.3.1順序程序第20頁(yè),課件共70頁(yè),創(chuàng)作于2023年2月例1將地址為2000H、2001H、2002H的片外數(shù)據(jù)存儲(chǔ)單元的內(nèi)容分別傳送到2002H、2003H和2004H單元中去。

ORG0000HAJMP0100H;轉(zhuǎn)到主程序起始地址

ORG0100HMOVDPTR,#2002H;最后一個(gè)數(shù)據(jù)的起始地址

MOVXA,@DPTR;2002H單元的數(shù)據(jù)送AMOVDPTR,#2004H;最后一個(gè)數(shù)據(jù)的目的地址

MOVX@DPTR,A;2002H單元的數(shù)據(jù)送2004H單元

MOVDPTR,#2001H;中間數(shù)據(jù)的起始地址第21頁(yè),課件共70頁(yè),創(chuàng)作于2023年2月

MOVXA,@DPTR;2001H單元的數(shù)據(jù)送AMOVDPTR,#2003H;中間數(shù)據(jù)的目的地址

MOVX@DPTR,A;2001H單元的數(shù)據(jù)送2003H單元

MOVDPTR,#2000H;第一個(gè)數(shù)據(jù)的起始地址

MOVXA,@DPTR;2000H單元的數(shù)據(jù)送AMOVDPTR,#2002H;第一個(gè)數(shù)據(jù)的目的地址

MOVX@DPTR,A;2000H單元的數(shù)據(jù)送2002H單元

SJMP$END<想一想>還可以怎樣修改?

第22頁(yè),課件共70頁(yè),創(chuàng)作于2023年2月

例2已知30H單元存有8位二進(jìn)制數(shù)的BCD碼,請(qǐng)將其轉(zhuǎn)換為共陰顯示的字形碼,然后從P1口輸出。設(shè)這些字形碼存放在標(biāo)號(hào)為TABLE的存儲(chǔ)單元。程序如下:

ORG0000HAJMPMAIN;轉(zhuǎn)到主程序起始地址

ORG0100HMAIN:MOVDPTR,#TABLE;字形碼表首地址送DPTRMOVA,30H;取數(shù)

MOVCA,@A+DPTR;查表取值送AMOVP1,A;字形碼送P1SJMP$TABLE:DB3FH,06H,5BH,4FH,66H;0~4共陰字形碼

DB6DH,7DH,07H,7FH,6FH;5~9共陰字形碼

END2.查表程序第23頁(yè),課件共70頁(yè),創(chuàng)作于2023年2月

通常情況下,程序是順序執(zhí)行的,但我們也可以根據(jù)需要,在程序中安排一些控制轉(zhuǎn)移指令,改變程序的執(zhí)行方向,這就是分支程序。分支程序可以分為單分支和多分支等情況。

單分支程序結(jié)構(gòu)如圖3-3(b)所示。

當(dāng)條件滿足時(shí)順序執(zhí)行程序段A,否則執(zhí)

行程序段B。

多分支結(jié)構(gòu)如圖3-4所示。先將分支

按序號(hào)排列,然后按照分支的值來(lái)實(shí)現(xiàn)

多分支選擇。

圖3-4多分支結(jié)構(gòu)3.3.2 分支程序第24頁(yè),課件共70頁(yè),創(chuàng)作于2023年2月

分支程序在單片機(jī)系統(tǒng)中應(yīng)用較多,在編程時(shí)有許多技巧,設(shè)計(jì)要點(diǎn)如下:

(1)先建立可供條件轉(zhuǎn)移指令測(cè)試的條件。

(2)選用合適的條件轉(zhuǎn)移指令。

(3)在轉(zhuǎn)移的目的地址處設(shè)定標(biāo)號(hào)。

第25頁(yè),課件共70頁(yè),創(chuàng)作于2023年2月

3已知內(nèi)RAM30H單元存有一個(gè)ASCII碼,試對(duì)其進(jìn)行判斷,如果是“$”(24H),將其存入40H,否則存入31H單元。

程序如下:

ORG0000H

AJMPMAIN

ORG0100H

MAIN:MOVA,30H

CJNEA,#24H,DY31;不是“$”,轉(zhuǎn)去ZY31

MOV40H,A;是“$”,存入40H單元

AJMPEND0

DY31:MOV31H,A;不是$,存入31H單元

END0:SJMP$

END1.單分支程序第26頁(yè),課件共70頁(yè),創(chuàng)作于2023年2月(1) 位操作程序

例4已知某信號(hào)燈電路如圖3-5,試編程實(shí)現(xiàn)如下功能:

⑴S0單獨(dú)按下,紅燈亮,其余燈滅;

⑵S1單獨(dú)按下,綠燈亮,其余燈滅;

⑶S0、S1均按下,紅、綠、黃燈全亮;

⑷都不按下黃燈亮。

圖3-5某信號(hào)燈電路參考程序如下:

ORG0000HLJMPSTARTORG0100HSTART:ORLP1,#11000111B;P1.6、P1.7設(shè)為輸入,紅綠黃燈滅2.多分支程序第27頁(yè),課件共70頁(yè),創(chuàng)作于2023年2月

SS0:JBP1.7,SS1;S0未按,轉(zhuǎn)判S1JBP1.6,RED;S0按下,S1未按,轉(zhuǎn)紅燈亮

DL:CLRP1.2;紅燈亮

CLRP1.1;綠燈亮

CLRP1.0;黃燈亮

SJMPSS0;重新檢測(cè)

SS1:JBP1.6,YELLOW;S0未按,S1未按,轉(zhuǎn)黃燈亮GREEN:CLRP1.1;綠燈亮

SETBP1.2;紅燈滅

SETBP1.0;黃燈滅

SJMPSS0RED:CLRP1.2;紅燈亮

SETBP1.1;綠燈滅

SETBP1.0;黃燈滅

SJMPSS0

第28頁(yè),課件共70頁(yè),創(chuàng)作于2023年2月YELLOW:CLRP1.0;黃燈亮

SETBP1.2;紅燈滅

SETBP1.1;綠燈滅

SJMPSS0END說(shuō)明:該程序只是說(shuō)明位操作指令在分支程序中的應(yīng)用方法,如果真要實(shí)現(xiàn)信號(hào)燈的點(diǎn)亮,還要在每段燈亮滅指令后加一段延時(shí)程序。第29頁(yè),課件共70頁(yè),創(chuàng)作于2023年2月

例5有一巡回檢測(cè)報(bào)警裝置,需對(duì)16路輸入信號(hào)進(jìn)行控制,每路設(shè)有一個(gè)報(bào)警上限值(等于或超出此值即報(bào)警,置報(bào)警標(biāo)志F0),設(shè)16路輸入信號(hào)存放在以50H為首地址的內(nèi)RAM中,16路報(bào)警上限值存在以2000H為首地址的ROM中,試編制該程序。

程序如下:

START:MOVDPTR,#2000H;置16路報(bào)警上限值首地址

MOVR0,#50H;置16路輸入信號(hào)數(shù)據(jù)區(qū)首地址

MOVR7,#0;置16路輸入信號(hào)的序號(hào)0LOOP:

MOVR1,@R0;檢測(cè)信號(hào)存R1MOVA,R7;讀輸入信號(hào)序號(hào)

MOVCA,@A+DPTR;查找該序號(hào)對(duì)應(yīng)的報(bào)警上限值

CJNEA,R1,NEXT;與對(duì)應(yīng)的輸入信號(hào)比較

AJMPALAM;輸入信號(hào)等于報(bào)警上限值,轉(zhuǎn)報(bào)警(1)字節(jié)操作程序第30頁(yè),課件共70頁(yè),創(chuàng)作于2023年2月NEXT:JCALAM;輸入信號(hào)超出報(bào)警上限值,轉(zhuǎn)報(bào)警

INCR0;輸入信號(hào)小于報(bào)警上限值,指向下一路輸入信號(hào)

INCR7;指向下一路輸入信號(hào)序號(hào)

CJNER7,#16,LOOP;看16路是否全查完?未完繼續(xù)

CLRF0;16路全查完,清報(bào)警標(biāo)志

AJMP$;暫停ALAM:SETBF0;置報(bào)警標(biāo)志

RET第31頁(yè),課件共70頁(yè),創(chuàng)作于2023年2月3.3.3循環(huán)程序

1.循環(huán)結(jié)構(gòu)在程序設(shè)計(jì)時(shí),常常遇到需要反復(fù)執(zhí)行的某種操作,這時(shí)可編寫一個(gè)程序段重復(fù)執(zhí)行,這就是循環(huán)。循環(huán)程序一般包括4部分,如圖3-6所示。對(duì)這4部分的含義,我們以例題的形式加以說(shuō)明。

例6編程實(shí)現(xiàn)以下數(shù)據(jù)傳送功能:將BUF為起始地址的50個(gè)數(shù)取反后,傳送到以DATA為起始地址的內(nèi)存單元中。

第32頁(yè),課件共70頁(yè),創(chuàng)作于2023年2月分析:如果采用順序結(jié)構(gòu)編寫,程序會(huì)很麻煩,要執(zhí)行50次從源地址中取數(shù)的MOV指令,50次數(shù)據(jù)取反的CPL指令,50次向目的地址送數(shù)的MOV指令。經(jīng)過(guò)觀察,我們發(fā)現(xiàn),可以把順序結(jié)構(gòu)中重復(fù)執(zhí)行的部分提取出來(lái),編成一個(gè)獨(dú)立的小程序段(即循環(huán)體部分),然后對(duì)這個(gè)小程序段重復(fù)執(zhí)行50次(循環(huán)次數(shù)),這就構(gòu)成了循環(huán)。圖3-6循環(huán)結(jié)構(gòu)第33頁(yè),課件共70頁(yè),創(chuàng)作于2023年2月

1.初始化

規(guī)定循環(huán)體中各控制變量的初始狀態(tài)。

2.循環(huán)體

這是循環(huán)程序需要重復(fù)執(zhí)行的部分。對(duì)這部分編程的時(shí)候要注意兩個(gè)問(wèn)題:指令要具有通用性,程序要便于修改。程序盡可能簡(jiǎn)化。第34頁(yè),課件共70頁(yè),創(chuàng)作于2023年2月

(3)循環(huán)修改

循環(huán)程序每執(zhí)行一次,都要對(duì)數(shù)據(jù)的地址指針、循環(huán)次數(shù)等作一次修改,這就是循環(huán)修改。

(4)循環(huán)控制

根據(jù)循環(huán)結(jié)束條件,判斷循環(huán)是否結(jié)束。常用作循環(huán)控制的變量是循環(huán)次數(shù)。第35頁(yè),課件共70頁(yè),創(chuàng)作于2023年2月參考程序如下:

START:MOVR0,#SBUF;數(shù)據(jù)的源地址

MOVR1,#DATA;數(shù)據(jù)的目的地址

MOVR7,#50;循環(huán)次數(shù)

LOOP:MOVA,@R0;源地址中數(shù)據(jù)送ACPLA;取反

MOV@R1,A;取反后的數(shù)據(jù)送目的地址

INCR0;源地址加1,準(zhǔn)備取下一個(gè)數(shù)

INCR1;目的地址加1,準(zhǔn)備接收下一個(gè)數(shù)

DJNZR7,LOOP;循環(huán)結(jié)束?未結(jié)束重新取數(shù)

RET

循環(huán)程序按結(jié)構(gòu)分,有單重循環(huán)與多重循環(huán)。在多重循環(huán)中,只允許外重循環(huán)嵌套內(nèi)重循環(huán);不允許循環(huán)相互交叉,也不允許從循環(huán)程序的外部跳入循環(huán)程序的內(nèi)部。

第36頁(yè),課件共70頁(yè),創(chuàng)作于2023年2月

2.循環(huán)結(jié)構(gòu)的典型應(yīng)用——定時(shí)

在單片機(jī)控制系統(tǒng)中,常有定時(shí)的需要,如定時(shí)中斷、定時(shí)檢測(cè)、定時(shí)掃描等。定時(shí)功能可以使用定時(shí)/計(jì)數(shù)器實(shí)現(xiàn),但更多的是使用定時(shí)程序完成。定時(shí)程序是典型的循環(huán)程序,它通過(guò)執(zhí)行一個(gè)具有固定延時(shí)時(shí)間的循環(huán)體來(lái)實(shí)現(xiàn)時(shí)間的推移,因此,又常把定時(shí)程序叫做延時(shí)程序。定時(shí)程序的延時(shí)時(shí)間不受器件的限制,只要選擇好循環(huán)初值,就可以實(shí)現(xiàn)幾秒、幾分、乃至幾年的時(shí)間延遲。

第37頁(yè),課件共70頁(yè),創(chuàng)作于2023年2月(1)單循環(huán)延時(shí)單循環(huán)延時(shí)是最簡(jiǎn)單的定時(shí)程序。如:

DELAY:MOVR7,#TIME;TIME是循環(huán)程序控制變

;量,可以取任意值

LOOP:NOPNOPNOPDJNZR7,LOOP

其中的NOP是空操作指令,它不做任何操作,只是消磨時(shí)間。該程序段的延時(shí)時(shí)間可以這樣計(jì)算:NOP指令的機(jī)器周期是1,DJNZ指令的機(jī)器周期是2,因此循環(huán)一次共需5個(gè)機(jī)器周期。如果單片機(jī)的晶振頻率采用12MHz,則一個(gè)機(jī)器周期是1μs,因此循環(huán)一次的延遲時(shí)間是5μs。第38頁(yè),課件共70頁(yè),創(chuàng)作于2023年2月

延時(shí)程序中總的延時(shí)時(shí)間為5×TIME(μs),根據(jù)程序的需要,TIME可以任意取值(不超過(guò)8位二進(jìn)制的表示范圍)。因此該程序的最長(zhǎng)延時(shí)時(shí)間是(TIME=0時(shí))

5×256=1280(μs)

(2)較長(zhǎng)時(shí)間的延時(shí)

單循環(huán)延時(shí)的延遲時(shí)間較短,為了延長(zhǎng)定時(shí)時(shí)間,可以采用多重循環(huán)的方法。

例7編寫延時(shí)1s子程序,要求:晶振采用12MHz,用三重循環(huán)編寫。

分析:用12MHz晶振,機(jī)器周期是1μs,程序如下:

DELAY:MOVR7,#20;1μsD1:MOVR6,#200;1μsD2:MOVR5,#123;1μs

第39頁(yè),課件共70頁(yè),創(chuàng)作于2023年2月

NOP;1μsDJNZR5,$;2μs,共(2×123)μsDJNZR6,D2;2μs,共〔(2×123+2+2)

×200〕μs,即50msDJNZR7,D1;2μs,共〔(2×123+2+2)

×200+2+1〕×20+2=1000062μs≈1sRET;2μs

在該程序中,改變不同的寄存器初值,可以實(shí)現(xiàn)不同的定時(shí)要求。

(3)以一個(gè)基本的延時(shí)程序滿足不同的定時(shí)要求

如果系統(tǒng)中有多個(gè)定時(shí)需要,我們可以先設(shè)計(jì)一個(gè)基本的延時(shí)程序,通過(guò)對(duì)這個(gè)基本延時(shí)程序的調(diào)用,實(shí)現(xiàn)所需的不同定時(shí)。如將例7延時(shí)1秒的DELAY作為基本的延時(shí)程序,則實(shí)現(xiàn)5秒、10秒的調(diào)用情況如下:第40頁(yè),課件共70頁(yè),創(chuàng)作于2023年2月

MOVR0,#5;5sLOOP1:ACALLDELAY;1sDJNZR0,LOOP1……MOVR0,#10;10sLOOP2:ACALLDELAY;1sDJNZR0,LOOP2……

例8已知某單片機(jī)溫控系統(tǒng)每隔50ms測(cè)一次溫度,測(cè)得的8位溫度值存在特殊功能寄存器SBUF中,請(qǐng)編程求其1s的平均值,并存于60H中。(設(shè)1s采樣溫度總和不超過(guò)255)程序如下:

AVR1S:MOVR2,#0;溫度初值為0MOVR4,#20;平均次數(shù)為20第41頁(yè),課件共70頁(yè),創(chuàng)作于2023年2月

LOOP:MOVA,SBUF;讀溫度值

ADDA,R2;溫度求和

MOVR2,A;回存

LCALLDELAY50;延時(shí)50ms,延時(shí)子程序略

DJNZR4,LOOP;20次采樣完否?未完繼續(xù)

MOVA,R2;和存入AMOVB,#20;除數(shù)存入BDIVAB;求均值

MOV60H,ARET

請(qǐng)嘗試編寫延時(shí)50ms子程序。第42頁(yè),課件共70頁(yè),創(chuàng)作于2023年2月3.4程序設(shè)計(jì)實(shí)例3.4.1數(shù)據(jù)極值查找程序

極值查找就是在指定的數(shù)據(jù)區(qū)中挑出最大值或最小值。

例9從內(nèi)部RAM30H單元開始存有8個(gè)無(wú)符號(hào)8位二進(jìn)制數(shù),請(qǐng)編程查找到最大值,并將其存放于40H單元。

分析:假定在比較過(guò)程中,用A存放大數(shù),與之逐個(gè)比較的另一個(gè)數(shù)存放在2AH單元。流程圖見圖3-7。圖3-7最大值查找程序流程圖第43頁(yè),課件共70頁(yè),創(chuàng)作于2023年2月

程序如下:

MOVR1,#30H;數(shù)據(jù)區(qū)首址

MOVR5,#08H;數(shù)據(jù)區(qū)長(zhǎng)度

MOVA,@R1;讀第一個(gè)數(shù)

DECR5;修改數(shù)據(jù)長(zhǎng)度

LOOP:INCR1MOV2AH,@R1;讀下一個(gè)數(shù)

CJNEA,2AH,BJ;數(shù)值比較

AJMPLOOP1BJ:JNCLOOP1;A值大,轉(zhuǎn)移

MOVA,@R1;大數(shù)送ALOOP1:DJNZR5,LOOP;繼續(xù)

MOV40H,A;最大值送40HSJMP$第44頁(yè),課件共70頁(yè),創(chuàng)作于2023年2月

3.4.2數(shù)碼轉(zhuǎn)換程序

數(shù)碼轉(zhuǎn)換通常采用子程序調(diào)用的方法進(jìn)行,即由子程序完成具體的轉(zhuǎn)換功能,而由主程序組織數(shù)據(jù)和安排結(jié)果。例10在內(nèi)部RAM的SHU16單元存有兩位十六進(jìn)制數(shù),請(qǐng)將其轉(zhuǎn)換成ASCII碼,并存放于ASCL(低位的ASCII碼)和ASCH(高位的ASCII碼)兩單元。

主程序如下:

MAIN:MOVSP,#5FH;設(shè)堆棧指針

PUSHSHU16;16進(jìn)制數(shù)進(jìn)棧

ACALLASC16;調(diào)轉(zhuǎn)換子程序

POPASCL;第一位轉(zhuǎn)換結(jié)果送ASCLMOVA,SHU16;再取原16進(jìn)制數(shù)

SWAPA;高低半字節(jié)交換

PUSHACC;交換后的16進(jìn)制數(shù)進(jìn)棧

ACALLASC16;轉(zhuǎn)換

POPASCH;第二位轉(zhuǎn)換結(jié)果送ASCHSJMP$第45頁(yè),課件共70頁(yè),創(chuàng)作于2023年2月

子程序如下:

ASC16:DECSP;跳過(guò)斷點(diǎn)保護(hù)內(nèi)容PCDECSPPOPACC;彈出轉(zhuǎn)換數(shù)據(jù)

ANLA,#0FH;屏蔽高位

ADDA,#7;修改變址寄存器指針

MOVCA,@A+PC;查表

PUSHACC;2字節(jié),查表結(jié)果進(jìn)棧

INCSP;2字節(jié),修改斷點(diǎn)指針回到斷點(diǎn)保護(hù)內(nèi)容

INCSP;2字節(jié),

RET;1字節(jié),

ASCTAB:DB'012345678';ASCII碼表

DB'9ABCDEF'END第46頁(yè),課件共70頁(yè),創(chuàng)作于2023年2月

這是一個(gè)很典型的程序,在閱讀時(shí)應(yīng)注意這樣兩個(gè)問(wèn)題:

(1)該程序強(qiáng)化了堆棧的使用,這對(duì)于大家加深理解堆棧的概念十分有利。在程序中用到了兩種使用堆棧的方法:

用堆棧傳遞數(shù)據(jù)。使要轉(zhuǎn)換的16進(jìn)制數(shù)在主程序中進(jìn)棧(PUSHSHU16)而在子程序中出棧(POPACC),最后再通過(guò)堆棧把轉(zhuǎn)換結(jié)果返回主程序(POPASCL)。低位轉(zhuǎn)換其堆棧的變化見圖3-8;系統(tǒng)在調(diào)用子程序時(shí)自動(dòng)完成的PC入棧操作。由于要轉(zhuǎn)換的16進(jìn)制數(shù)是在主程序中先于斷點(diǎn)值PC

(ACALLASC16下一條指令的地址)入棧,這樣在子程序中要取出轉(zhuǎn)換數(shù)據(jù),就得修改堆棧指針SP,以指向該數(shù)據(jù)。第47頁(yè),課件共70頁(yè),創(chuàng)作于2023年2月

(2)在ASCII碼表中,是以字符串的形式列出的16進(jìn)制數(shù),但在匯編的過(guò)程中,寫入存儲(chǔ)單元的是該字符串的ASCII碼形式。圖3-8數(shù)碼轉(zhuǎn)換程序的堆棧變化圖第48頁(yè),課件共70頁(yè),創(chuàng)作于2023年2月3.4.3課題與實(shí)訓(xùn)4程序設(shè)計(jì)一.實(shí)訓(xùn)目的

1.熟悉匯編語(yǔ)言的基本格式、偽指令的使用方法。

2.學(xué)習(xí)單片機(jī)應(yīng)用程序的設(shè)計(jì)方法。二.課題要求

1.將60H~69H單元存放的10個(gè)無(wú)符號(hào)數(shù)按照從小到大的順序重新排列。

2.選擇課后思考題與習(xí)題的部分程序運(yùn)行并調(diào)試出來(lái)。三.背景知識(shí)

可采用冒泡排序法。冒泡排序法把一批數(shù)據(jù)想象成縱向排列,采用自下而上的方法比較相鄰兩個(gè)數(shù)據(jù),如果這兩個(gè)數(shù)據(jù)的大小順序符合要求,則保持原樣,否則交換它們的位置。這樣比較一輪后,最小的數(shù)據(jù)就像氣泡一樣浮到最頂上,故稱冒泡排序法。第49頁(yè),課件共70頁(yè),創(chuàng)作于2023年2月

實(shí)際編程設(shè)計(jì)時(shí),每一輪操作都從數(shù)據(jù)區(qū)的首地址開始,向末端推進(jìn)。一般來(lái)講,N個(gè)數(shù)據(jù)要進(jìn)行N-1輪次比較和交換排序。表3-1表示了60H~65H單元存儲(chǔ)數(shù)據(jù)的冒泡排序的執(zhí)行過(guò)程。表3-1冒泡排序過(guò)程說(shuō)明第50頁(yè),課件共70頁(yè),創(chuàng)作于2023年2月

假定60H~65H單元存儲(chǔ)的原始數(shù)據(jù)為無(wú)序數(shù)列,從最上面開始進(jìn)行相鄰兩個(gè)數(shù)據(jù)的比較,大的數(shù)據(jù)放上面,小的數(shù)據(jù)放下面。第一輪操作,6個(gè)數(shù)據(jù)進(jìn)行6-1=5次比較,最大數(shù)據(jù)58“沉淀”到最下面(65H單元)。第二輪操作58不參加,5個(gè)數(shù)據(jù)需比較6-2=4次,5個(gè)數(shù)據(jù)中的最大值36“沉淀”到64H單元。對(duì)于本例,經(jīng)過(guò)三輪操作就可以完成排序。采用冒泡排序法,一般應(yīng)設(shè)立一個(gè)標(biāo)志位,在每輪開始時(shí)將標(biāo)志位清0,在操作過(guò)程中出現(xiàn)位置交換,標(biāo)志位置1,每輪結(jié)束時(shí)若標(biāo)志位為0,則說(shuō)明數(shù)據(jù)已經(jīng)有序,可以提前結(jié)束排序,從而提高了效率。第51頁(yè),課件共70頁(yè),創(chuàng)作于2023年2月圖3-9冒泡排序流程圖

四.程序流程圖第52頁(yè),課件共70頁(yè),創(chuàng)作于2023年2月3.4.4課題與實(shí)訓(xùn)5交通燈的設(shè)計(jì)

一.實(shí)訓(xùn)目的

1.進(jìn)一步熟悉單片機(jī)I/O接口的線路連接。

2.學(xué)習(xí)順序控制程序的編程技術(shù)。

二.課題要求

用仿真器的P1口控制4只雙色LED燈,來(lái)模擬十字路口交通燈的工作方式,本次實(shí)訓(xùn)交通燈變化規(guī)律如下:假設(shè)一個(gè)十字路口是東西南北走向。初始狀態(tài)為東西南北均紅燈。停頓1秒后轉(zhuǎn)狀態(tài)S1(南北綠燈,東西紅燈)。延時(shí)20秒,轉(zhuǎn)S2(南北綠燈閃3次變黃燈,東西紅燈)。再轉(zhuǎn)S3(東西綠燈,南北紅燈)。延時(shí)20秒,轉(zhuǎn)S4(東西綠燈閃3次變黃燈,南北紅燈)。最后跳轉(zhuǎn)至S1循環(huán)。第53頁(yè),課件共70頁(yè),創(chuàng)作于2023年2月

三.背景知識(shí)

雙色LED燈有三只引腳,工作時(shí),中間引腳接地,另外兩支引腳單獨(dú)接高電平時(shí),一種亮紅光,一種亮綠光,兩只引腳同時(shí)接高電平時(shí),亮黃光。在本次實(shí)訓(xùn)線路中,P1.0~P1.3接雙色LED的綠燈引腳,當(dāng)P1.0~P1.3輸出1時(shí),相應(yīng)燈亮綠光,P1.4~P1.7接雙色LED的紅燈引腳,當(dāng)P1.4~P1.7輸出1時(shí),相應(yīng)燈亮紅光,如果P1.0和P1.4同時(shí)為1,則RG南亮黃光,其余道理與此相同。四.硬件電路

(見圖3-10

)

圖3-10交通燈電路第54頁(yè),課件共70頁(yè),創(chuàng)作于2023年2月ORG0000H LJMPSTART ORG0100H START:MOVSP,#60HMOVA,#0F0H;初始狀態(tài)(紅燈) MOVP1,A MOVR2,#10;延時(shí)1秒

LCALLDELAYS1:MOVA,#69H;南北綠燈,東西紅燈

MOVP1,A MOVR2,#200;延時(shí)20秒

LCALLDELAYS2:MOVR3,#03H;南北綠燈閃3次變黃燈,東西紅燈

GLIS:MOVA,#69H

五.軟件設(shè)計(jì)第55頁(yè),課件共70頁(yè),創(chuàng)作于2023年2月

MOVP1,A MOVR2,#03H LCALLDELAY MOVA,#60H MOVP1,A MOVR2,#03H LCALLDELAY DJNZR3,GLIS MOVA,#0F9H MOVP1,A MOVR2,#10;延時(shí)1秒

LCALLDELAYS3:MOVA,#96H;南北紅燈,東西綠燈

MOVP1,A MOVR2,#200;延時(shí)20秒

LCALLDELAY第56頁(yè),課件共70頁(yè),創(chuàng)作于2023年2月

S4:MOVR3,#03H;東西綠燈閃3次變黃燈,南北紅燈GLIS1:MOVA,#96H MOVP1,A MOVR2,#03H LCALLDELAY MOVA,#90H MOVP1,A MOVR2,#03H LCALLDELAY DJNZR3,GLIS1 MOVA,#0F6H MOVP1,A MOVR2,#10;延時(shí)1秒

LCALLDELAY LJMPS1第57頁(yè),課件共70頁(yè),創(chuàng)作于2023年2月DELAY:MOVR1,#200;延時(shí)程序

D1:MOVR0,#248;延時(shí)100毫秒

DJNZR0,$DJNZR1,D1DJNZR2,DELAYRETEND

六.總結(jié)與思考

本實(shí)訓(xùn)電路只是用單片機(jī)模擬交通燈的管理,真正的交通燈還要考慮到燈的驅(qū)動(dòng)等實(shí)際問(wèn)題。

想一想,如果采用建表方式,程序該如何設(shè)計(jì)?第58頁(yè),課件共70頁(yè),創(chuàng)作于2023年2月3.4.5課題與實(shí)訓(xùn)6以循環(huán)方式實(shí)現(xiàn)流水燈

一.實(shí)訓(xùn)目的

1.進(jìn)一步熟悉單片機(jī)I/O接口的線路連接。

2.學(xué)習(xí)循環(huán)程序的編程技術(shù)。二.課題要求

用單片機(jī)的P1口控制8只LED燈,作P1.0→P1.1→P1.2→P1.3→P1.4→P1.5→P1.6→P1.7的依次單燈點(diǎn)亮,間隔0.2秒,接下來(lái)8只LED燈全滅1次,間隔0.2秒;然后作P1.7→P1.6→P1.5→P1.4→P1.3→P1.2→P1.1→P1.0的依次單燈點(diǎn)亮,間隔0.2秒,接下來(lái)8只LED燈全滅1次,間隔0.2秒,再?gòu)拈_始狀態(tài)循環(huán),8只LED燈即呈現(xiàn)出流水燈的狀態(tài)。第59頁(yè),課件共70頁(yè),創(chuàng)作于2023年2月

三.背景知識(shí)

循環(huán)程序用于需要多次反復(fù)執(zhí)行的相同操作,因此在編制程序時(shí),首先應(yīng)該確定的就是有哪些相同的操作可由循環(huán)部分實(shí)現(xiàn)。在該實(shí)訓(xùn)中,我們用數(shù)據(jù)傳送指令向P1.0→P1.7一次送數(shù),所以對(duì)送出數(shù)據(jù)的處理過(guò)程就是相同的;延時(shí)時(shí)間都是0.2秒,這也是相同的,這兩部分都可以用循環(huán)來(lái)實(shí)現(xiàn)。

在編制具體的循環(huán)程序時(shí),要設(shè)置一個(gè)存放循環(huán)次數(shù)的寄存器,通常選用R2~R7中的任何一個(gè)來(lái)實(shí)現(xiàn)(R0和R1常用于寄存器間接尋址。當(dāng)然,程序中如果不采用間接尋址方式,R0和R1也可用來(lái)存放循環(huán)次數(shù))。程序每循環(huán)一次,循環(huán)次數(shù)寄存器內(nèi)容要減1,當(dāng)該寄存器內(nèi)容減到0時(shí),表示循環(huán)結(jié)束,這兩個(gè)過(guò)程可用DJNZ指令實(shí)現(xiàn)。第60頁(yè),課件共70頁(yè),創(chuàng)作于2023年2月

四.硬件電路圖3-11流水燈電路第61頁(yè),課件共70頁(yè),創(chuàng)作于2023年2月

參考程序如下:

ORG0000HSTART:MOV

A,#0FFH;設(shè)初值

MOV

R0,#8;移動(dòng)八次

CLR

C;將CY清0LOOP1:RLC

A;帶進(jìn)位位循環(huán)左移

MOV

P1,A;送P1口,P1.0燈亮

ACALL

DELAY;調(diào)延時(shí)

DJNZR0,

LOOP1;判斷是否左移8次

MOV

A,#0FFH;夠八次,燈全滅

MOV

P1,AACALL

DELAYMOV

A,#0FFH;設(shè)初值

MOV

R0,#8;移動(dòng)八次

CLR

C;將CY清0五.軟件設(shè)計(jì)第62頁(yè),課件共70頁(yè),創(chuàng)作于2023年2月

LOOP2:RRC

A;帶進(jìn)位位循環(huán)右移

MOV

P1,A;送P1口,P1.7燈亮

ACALL

DELAYDJNZ

R0,LOOP2;判斷是否右移8次

MOV

A,#0FFH;夠八次,燈全滅

MOV

P1,AACALL

DELAYAJMP

START;重新開始

DELAY:MOV

R5,#4;延時(shí)0.2秒

D1:MOV

R6,#200D2:MOV

R7,#123NOPDJNZ

R7,$DJNZ

R6,D2

第63頁(yè),課件共70頁(yè),創(chuàng)作于2023年2月

DJNZ

R5,

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫(kù)網(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)論