




已閱讀5頁,還剩11頁未讀, 繼續(xù)免費閱讀
版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認(rèn)領(lǐng)
文檔簡介
1什么是單片機!在一塊集成電路芯片上集成微處理器、存儲器I/O接口電路,從而構(gòu)成了單芯片微型計算機。其特點是:體積小、控制功能強,性價比高,其非凡的嵌入式應(yīng)用形態(tài)對于滿足應(yīng)用式需求具有獨特的優(yōu)勢.280C51單片機的基本結(jié)構(gòu),包括CPU系統(tǒng)(1 8位CPU,含布爾處理器2 時鐘電路3 總線控制)、存儲器系統(tǒng)(1 4k字節(jié)的數(shù)據(jù)存儲器(ROM/EPROM/Fash、可外擴至64k)2 128字節(jié)的數(shù)據(jù)存儲器(RAM, 可外擴至64k),3特殊功能寄存器SPR) I/O口等和其他功能單元(四個并行I/O口,2兩個十六位定時/計數(shù)器。3一個全雙工異步并行口(UART),4中斷系統(tǒng)(五個中斷源,兩個優(yōu)先級).3 80C51單片機的復(fù)位操作及其復(fù)位后的狀態(tài) 復(fù)位是使單片機或系統(tǒng)中的其他部件處于某種確定的初始狀態(tài),其工作就是從復(fù)位開始的。復(fù)位操作有兩種基本形式一是上電位,要求接通電源后單片機自動實現(xiàn)復(fù)位操作。二是上電與按鍵均有效的復(fù)位。實際應(yīng)用中如果在單片機斷電后,有可能在較短的時間內(nèi)再次充電可以在R1上并接一個二極管,可以有效地提高此種情況下復(fù)位的可靠性。單片機復(fù)位后的狀態(tài) 單片機的復(fù)位操作時單片機進入初始化狀態(tài)。初始化后,程序計數(shù)器PC=0000H,所以程序從0000h地質(zhì)單元開始執(zhí)行。單片機啟動后,片內(nèi)的ram為隨機值運行中的復(fù)位操作不改變ram的內(nèi)容。復(fù)位后寄存器的狀態(tài)時確定的p0-P3=FFH,SP為07h,sbuf 不定,ip ie 和pcon的有效值為0,其余的特殊功能寄存器狀態(tài)均為00h。 PC = 0000H RAM:隨機值(運行中復(fù)位不改變RAM內(nèi)容) SFR: P0P3=FFH SP=07H IP、IE和PCON:有效位為0 PSW=00H(狀態(tài)確定) 相應(yīng)的意義:P0P3=FFH,相當(dāng)于各口鎖存器已寫入1,此時不但可以使出,也可以輸入。SP=07F堆棧指針指向片內(nèi)RAM的07H單元(入棧的內(nèi)容將寫入08H單元)IP、IE和PCON的有效位為0,個中斷源處于低優(yōu)先級且均被關(guān)斷、串行通信的波特率不加倍。PSW=00H,當(dāng)前工作寄存器為零組。4 80C51單片機的數(shù)據(jù)存儲器配置,包括工作寄存器 區(qū)、位尋址區(qū)等。80C51單片機的數(shù)據(jù)存儲器也分為片內(nèi)、外兩部分。對于基本型的單片機,共有片內(nèi)ram128字節(jié),分為工作寄存器區(qū)、位尋址區(qū)、通用RAM區(qū)三部分,尋址范圍為00H-7FH。對于增強型的單片機,共有256字節(jié),低128字節(jié)地址范圍00H-7FH與基本型相同。對于高128字節(jié)80H-FFH只能采取間接尋址方式訪問(旨在與SFR的訪問相區(qū)別)。片外RAM地址空間為64KB,地址范圍0000H-FFFFH。訪問片外RAM時采用專門的指令MOVX實現(xiàn),這時讀/RD或?qū)?WR信號有效;訪問片內(nèi)RAM時使用MOV指令,無讀寫信號產(chǎn)生。工作寄存器區(qū)(含寄存器組03)寄存器組0:地址00H07H寄存器組1:地址08H0FH寄存器組2:地址10H17H寄存器組3:地址18H1FH。工作寄存器組共32個字節(jié),分四個工作寄存器組,每組占8個單元,分別稱為:R0、R1R7。當(dāng)前工作寄存器組的選擇由特殊功能寄存器中的程序狀態(tài)寄存器psw的rsi、rso來決定。位尋址區(qū)片內(nèi)RAM位尋址區(qū)共16個字節(jié),人們常將程序狀態(tài)寄存器標(biāo)志、位控制變量設(shè)在位尋址區(qū)內(nèi)。對于該區(qū)未用到的單元也可以作為通用RAM使用。通用RAM區(qū) 30H7FH,共80字節(jié) 數(shù)據(jù)緩沖 堆棧 SP指示棧頂 復(fù)位時SP=07H 系統(tǒng)初始化通常重新設(shè)置,RAM內(nèi)容查看 MAIN:MOV R7,#16 MOV A,#00H MOV R0,#30H LOOP:MOV R0,A INC R0 INC A DJNZ R7,LOOP SJMP $ END5 80C51單片機的時鐘,包括其產(chǎn)生、表現(xiàn)。產(chǎn)生:一是內(nèi)部時鐘方式 二是外部時鐘方式。表現(xiàn)。外部 只要在單片機的XTAL1和XTAL2引腳外接晶振即可。晶振CYS的晶振頻率要小于12MHz,典型值為6MHz12MHz或11.0592MHz。80C51的單片機時鐘信號 1個機器周期:12個晶蕩周期(或6個時鐘周期)。指令的執(zhí)行時間稱作指令周期 (單、雙、四周期)晶振信號經(jīng)分頻后形成兩個錯開的信號P1和P2. P1和P2的周期也稱為S中狀態(tài),它是周期的2倍,及一個S狀態(tài)包含兩個晶振周期。晶振信號12分頻后形成機器周期,即一個機器周期包含12個晶蕩周期。指令的執(zhí)行時間稱作指令周期。6 80C51單片機的中斷源、中斷優(yōu)先級以及中斷允許與 優(yōu)先級控制。單片機的中斷源:計算機具有實時處理的能力能對外界發(fā)生的事件進行及時的處理需要靠計算機的中斷系統(tǒng)來實現(xiàn)。中斷的處理過程描述為!CPU在處理某一事件A時,發(fā)生了另一事件B請求CPU迅速去處理(中斷發(fā)生); CPU暫時中斷當(dāng)前的工作,轉(zhuǎn)去處理事件B(中斷響應(yīng)和中斷服務(wù));待CPU將事件B處理完畢后,再回到原來事件A被中斷的地方繼續(xù)處理事件A(中斷返回),這一過程稱為中斷。引起CPU中斷的根源,稱為中斷源。中斷源向CPU提出的中斷請求。CPU暫時中斷原來的事務(wù)A,轉(zhuǎn)去處理事件B。對事件B處理(中斷服務(wù))完畢后,再回到原來被中斷的地方(即斷點),稱為中斷返回。實現(xiàn)上述中斷功能的部件稱為中斷系統(tǒng)(中斷機構(gòu))。能夠向CPU發(fā)出中斷申請的部件稱為中斷源。中斷允許控制:cpu對中斷系統(tǒng)所有中斷以及某個中斷源的開放和屏蔽是由允許寄存器ie控制的。Ie的狀態(tài)可通過程序由軟件設(shè)定。中斷優(yōu)先級控制:80c51單片機有兩個中斷優(yōu)先級,即可實現(xiàn)二級中斷服務(wù)嵌套。每個中斷源的優(yōu)先級都是由中斷優(yōu)先級寄存器ip中的相應(yīng)位來規(guī)定的。80C51單片機的中斷優(yōu)先級有三條原則:CPU同時接收到幾個中斷時,首先響應(yīng)優(yōu)先級別最高的中斷請求。正在進行的中斷過程不能被新的同級或低優(yōu)先級的中斷請求所中斷。正在進行的低優(yōu)先級中斷服務(wù),能被高優(yōu)先級中斷請求所中斷。為了實現(xiàn)上述后兩條原則,中斷系統(tǒng)內(nèi)部設(shè)有兩個用戶不能尋址的優(yōu)先級狀態(tài)觸發(fā)器,其中一個置1,表示正在響應(yīng)高優(yōu)先級的中斷,它將阻斷后來所有的中斷請求;另一個置1,表示正在響應(yīng)低優(yōu)先級中斷,它將阻斷后來所有的低優(yōu)先級中斷請求。中斷響應(yīng)的條件: 無同級或高級中斷正在服務(wù) 有中斷請求信號 相應(yīng)的中斷源已打開,即EA=1,中斷源對應(yīng)中斷允許位也為1。 當(dāng)前的指令周期已經(jīng)結(jié)束 如果當(dāng)前指令為RETI或訪問IE和IP的指令,至少還要再執(zhí)行完一條指令。中斷響應(yīng)時間:自中斷源提出中斷申請,到cpu響應(yīng)中斷,需要經(jīng)歷一定的時間,如果中斷響應(yīng)過程受阻就要增加等待時間,。若同級或高級中斷正在進行需要的附加時間取決于正在執(zhí)行的終端服務(wù)程序的長短,等待的時間不確定;若沒有同級或高級中斷正在進行所需要的附加等待時間在三至五個機器周期。原因:若查詢周期不是在執(zhí)行的指令的最后機器周期附加等待時間不會超過三個機器周期,2 若查詢機器周期恰逢reti或訪問ip、Ie指令,而這類指令之后又跟著mul或div指令,則由此引起的附加等待時間不會超過五個機器周期。中斷響應(yīng)過程:cpu中斷響應(yīng)過程如下:將相應(yīng)優(yōu)先級狀態(tài)觸發(fā)器置1(以阻斷后來的同級或低級的中斷請求)執(zhí)行硬件LCALL指令(pc入棧保護斷點,將相應(yīng)中斷服務(wù)程序入口地址送pc)執(zhí)行中斷服務(wù)程序。中斷返回:中斷服務(wù)的程序的最后一條指令必須是中斷返回指令reti。Reti指令能使cpu結(jié)束中斷服務(wù)的執(zhí)行。其功能是將斷點地址從堆棧彈出送pc,cpu從原斷點繼續(xù)執(zhí)行程序。將相應(yīng)優(yōu)先級狀態(tài)觸發(fā)器清零,恢復(fù)原來工作狀態(tài)。7 80C51單片機的尋址方式。尋址方式有七種:寄存器尋址,直接尋址,寄存器間接尋址,立即尋址,變址尋址,相對尋址和位尋址,8 80C51單片機的數(shù)據(jù)傳送指令,MOV、MOVC、MOVX、PUSH、POP等。數(shù)據(jù)傳送是進行數(shù)據(jù)處理的最基本操作,這類指令一般不影響標(biāo)志寄存器psw的狀體。傳送指令分兩大類,一是采用mov操作符,為一般傳送指令;二是采用非mov操作符,稱為特殊傳送指令。MOV、MOVC、MOVX、PUSH、POP等為特殊傳送指令;讀取rom中常數(shù)表的表項指令movc,讀取片外ram及接口單元數(shù)據(jù)的指令movx,堆棧操作指令push和pop:堆棧是在內(nèi)部ram、中按“先進先出”的規(guī)則組織的一片存儲區(qū),此區(qū)的一端固定,稱為棧底,另一端是活動的稱為棧頂,棧頂?shù)奈恢糜蓷V羔榮p指示。在80c51中,堆棧設(shè)置在片內(nèi)低端的128個單元,且生長方向是向上的。程序匯編的步驟:1. 分析問題針對現(xiàn)有條件,明確程序設(shè)計時應(yīng)該“做什么”2. 確定算法解決“怎樣做”的問題 3. 繪制程序流程圖用圖形的方法描繪解決問題的思路4. 分配內(nèi)存單元確定程序和數(shù)據(jù)區(qū)的起始地址 5. 編寫源程序用指令的形式將程序流程圖實現(xiàn)出來6. 匯編用開發(fā)機或仿真器將源程序轉(zhuǎn)換成機器碼,便于單片機識別7. 在線仿真調(diào)試查錯、改錯,對程序進行優(yōu)化。程序編制的方法與技巧:盡量采用模塊化程序設(shè)計方法;是把一個完整的程序分成若干個功能相對獨立的、較小的程序模塊,對各個程序模塊分別進行設(shè)計、編制程序和調(diào)試,最后把各個調(diào)試好的程序模塊裝配起來進行聯(lián)調(diào),最終成為一個有實用價值的程序。模塊化程序設(shè)計的優(yōu)點是:對單個程序模塊設(shè)計和調(diào)試比較方便、容易完成,一個模塊可以被多個任務(wù)共用。盡量采用循環(huán)結(jié)構(gòu)和子程序結(jié)構(gòu);采用循環(huán)結(jié)構(gòu)和子程序結(jié)構(gòu),可以使程序的總?cè)萘繙p小,提高程序的效率,節(jié)省內(nèi)存。盡量少用無條件轉(zhuǎn)移指令;少用無條件轉(zhuǎn)移指令,可以保證程序的條理更加清晰,從而減少錯誤發(fā)生。充分利用累加器;累加器是主程序和子程序之間信息傳遞的橋梁,利用累加器傳遞入口參數(shù)或返回參數(shù)比較方便。這時,一般不要把累加器內(nèi)容壓入堆棧。對于通用子程序要保護現(xiàn)場;由于子程序的通用性,除了保護子程序入口參數(shù)的寄存器內(nèi)容外,還要對子程序中用到的其它寄存器內(nèi)容一并入棧保護。對于中斷處理,還要保護程序狀態(tài)字在中斷處理程序中,既要保護處理程序中用到的寄存器內(nèi)容,還要保護程序狀態(tài)字PSW。否則,當(dāng)中斷服務(wù)程序執(zhí)行結(jié)束返回主程序時,整個程序的執(zhí)行可能會被打亂。匯編語言的語句格式:80C51單片機匯編語言的語句行由4個字段組成,匯編程序能對這種格式正確地進行識別。這4個字段的格式為:標(biāo)號: 操作碼操作數(shù) ;注釋括號內(nèi)的部分可根據(jù)實際情況取舍,各字段之間要用分隔符分隔??捎米鞣指舴姆栍忻疤枴⒖崭?、逗號、分號等。1、標(biāo)號標(biāo)號是指令的符號地址。有了標(biāo)號,程序中的其它語句才能很方便地訪問該語句。有關(guān)標(biāo)號的規(guī)定為:標(biāo)號要由18個ASCII碼字符組成,但必須以字母開頭,其余字符可以是字母、數(shù)字或其它特定字符。不能使用匯編語言已經(jīng)定義了的符號作為標(biāo)號,如指令助記符MOV、偽指令記憶符END以及寄存器的符號名稱R1等。標(biāo)號后邊必須跟冒號。同一標(biāo)號在一個程序中只能定義一次,不能重復(fù)定義。2、操作碼 操作碼用于規(guī)語句執(zhí)行的操作。它用指令助記符或偽指令助記符表示,是匯編語句中唯一不能空缺的部分。3、操作數(shù)操作數(shù)用于給指令的操作提供數(shù)據(jù)或地址。在一條語句中,可能沒有操作數(shù),可能只有1個操作數(shù),還可能同時包含23個操作數(shù)。各操作數(shù)之間要以逗號分隔。操作數(shù)一般以下面幾種形式出現(xiàn):常數(shù)工作寄存器名特殊功能寄存器名標(biāo)號名符號“$”,表示程序計數(shù)器PC的當(dāng)前值。如:SJMP $ 表達式4注釋注釋不屬于語句的功能部分,它只是對語句的解釋說明,只要用“;”開頭,就表明以下為注釋內(nèi)容。使用注釋可使程序文件的編制顯得更加清楚,便于編程人員的閱讀和維護。注釋的長度不限,一行不夠可以換行接著書寫,但換行后仍要以“;”開頭。源程序的編輯和匯編由于通用微型計算機的普及,現(xiàn)在單片機應(yīng)用系統(tǒng)的程序設(shè)計都借助于通用微型計算機。全過程可概括為“機器編輯交叉匯編串行傳送”三個部驟,基本程序結(jié)構(gòu):程序結(jié)構(gòu)通常分為三種形式:順序結(jié)構(gòu)、分支結(jié)構(gòu)、循環(huán)結(jié)構(gòu)。順序程序 順序程序是最簡單的程序結(jié)構(gòu),它既無分支,又無循環(huán),在執(zhí)行時單片機是按程序中指令的順序逐條進行的。分支程序 分支結(jié)構(gòu)可以分成單分支、雙分支和多分支幾種情況。分支程序在單片機系統(tǒng)中應(yīng)用較多,在編程時有許多技巧,設(shè)計要點如下:(1)先建立可供條件轉(zhuǎn)移指令測試的條件。(2)選用合適的條件轉(zhuǎn)移指令。(3)在轉(zhuǎn)移的目的地址處設(shè)定標(biāo)號。循環(huán)程序 按某種控制規(guī)律重復(fù)執(zhí)行的程序稱為循環(huán)程序。循環(huán)程序 有先執(zhí)行后判斷和先判斷后執(zhí)行兩種基本結(jié)構(gòu)。1.循環(huán)初值(初始化)規(guī)定循環(huán)體中各控制變量的初始狀態(tài)。2.循環(huán)處理(循環(huán)體)這是循環(huán)程序需要重復(fù)執(zhí)行的部分。對這部分編程的時候要注意兩個問題:指令要具有通用性,程序要便于修改。程序盡可能簡化。3.循環(huán)修改 循環(huán)程序每執(zhí)行一次,都要對數(shù)據(jù)的地址指針、循環(huán)次數(shù)等作一次修改,這就是循環(huán)修改。4.循環(huán)控制 根據(jù)循環(huán)結(jié)束條件,判斷循環(huán)是否結(jié)束。常用作循環(huán)控制的變量是循環(huán)次數(shù)。例1 設(shè)內(nèi)部RAM中(50H)=40H,(40H)=10H,P1口作輸入口,(P1)=0ABH,問程序執(zhí)行后各存儲器中的數(shù)據(jù)是什么?MOV R0,#50H;立即數(shù)50H送R0中,(R0)=50HMOV A,R0;R0間接尋址,將50H單元內(nèi)容送A,(A)=40HMOV R1,A;A送R1,(R1)=40HMOV B,R1;R1間接尋址,將40H單元內(nèi)容送B,(B)=10HMOV R1,P1;將P1內(nèi)容送40H單元,(40H)=0ABHMOV P2,P1;將P1內(nèi)容送P2 ,(P2)=0ABH執(zhí)行結(jié)果:(R0)=50H,(A)=40H,(R1)=40H(B)=10H,(P1)=0ABH,(40H)=0ABH(P2)=0ABH例把片外RAM的36H單元中的數(shù)據(jù)送到片外RAM的1200H單元。分析(36H)(1200H)程序如下:MOV R1,#36HMOVX A ,R1MOV DPTR,#1200HMOVX DPTR, A例設(shè)(60H)=X,(70H)=Y,試用堆棧指令實現(xiàn)60H和70H單元內(nèi)容的互換。MOV SP,#50H ;設(shè)棧底PUSH 60H ;51H(60H),X壓入51H單元PUSH 70H ;52H(70H),Y壓入52H單元POP 60H ;60H(52H),Y彈出進入60H單元POP 70H ;70H(51H),X彈出進入70H單元例若(A)=84H,(30H)=8DH,執(zhí)行指令A(yù)DD A,30H 之后,即:(A)=11H,(CY)=1,(AC)=1,(OV)=1(D7有進位,D6無進位),(P)=0?!纠咳簦ˋ)0110 1001B,表示的BCD碼為BCD (69)(R2)0101 1000B,表示的BCD碼為BCD (58) ,執(zhí)行指令:ADD A,R2DA A(A)0010 0111B,即BCD (27) 且(CY)1,即正確的結(jié)果為:127例若(A)0101 0110B,表示的BCD碼為(56)BCD,(R2)0110 0111B,表示的BCD碼為(67)BCD,(CY)0。執(zhí)行以下指令:ADD A,R2DA A由于(A)0010 0011B,即,且(CY)1,結(jié)果為BCD數(shù)123例若(A)=C9H,(R2)=54H,(CY)=1,執(zhí)行指令SUBB A,R2即:(A)=74H,(CY)=0,(AC)=1,(OV)=1(位6有借位,位7無借位),(P)=0。例若(A)=50H,(B)=A0H,執(zhí)行指令MUL AB 之后,(A)=00H,(B)=32H,(OV)=1,(CY)=0。例若(A)=FBH(251),(B)=12H(18),執(zhí)行指令DIV AB 之后,(A)=0DH,(B)=11H,(OV)=0,(CY)=0。例若(A)=C3H,(R0)=AAH,執(zhí)行指令A(yù)NL A,R0 之后,(A)=82H例若(A)=C3H,(R0)=55H,執(zhí)行指令ORL A,R0 之后,(A)=D7H例若(A)=C3H,(R0)=55H,執(zhí)行指令ORL A,R0 之后,(A)=D7H例若(A)=A5H,執(zhí)行指令CLR A 之后,(A)=00H。例8 編程實現(xiàn)將P1口低4位的值存入30H單元,屏蔽高4位。MOV A,P1ANL A,#0FHMOV 30H,A例編程實現(xiàn)將P1口低4位的值保持不變,而高4位置1。結(jié)果存入30H單元。MOV A,P1ORL A,#0F0HMOV 30H,A例編程實現(xiàn)將P1口的高4位取反,而低4位保持不變,結(jié)果存入40H單元。MOV A,P1XRL A,#0F0HMOV 40H,A例:若(A)= BDH = 1011 1101B,(CY)0。執(zhí)行指令RLC A后,(CY)=1,(A)= 01111010B = 7AH,(CY)1。結(jié)果為:17AH(378)2BDH(189)例有一段程序如下:MOV 23H,#0AHCLR ALOOPX:ADD A,23HDJNZ 23H,LOOPXSJMP $該程序執(zhí)行后:(A)=10+9+8+7+6+5+4+3+2+1=37H例若(CY)=1,(P3)=1100 0101B,(P1)=00110101B。執(zhí)行以下指令:MOV P1.3,CMOV C,P3.3MOV P1.2,C結(jié)果為:(CY)=0,P3的內(nèi)容未變,P1的內(nèi)容變?yōu)?0111001B。例若(P1)=1001 1101B。執(zhí)行指令CLR P1.3后,結(jié)果為:( P1 )=1001 0101B。例若(P1)=1001 1100B。執(zhí)行指令SETB P1.0 后,(P1)1001 1101B。例若(P1)=1001 1100B,(CY)1。執(zhí)行指令A(yù)NL C, P1.0 后,結(jié)果為:P1 內(nèi)容不變,而(CY)0。11、若(R1)=30H,(A)=40H,(30H)=60H,(40H)=08H。試分析執(zhí)行下列程序段后上述各單元內(nèi)容的變化。MOV A,R1MOV R1,40HMOV 40H,AMOV R1,#7FH答:(R1)=7FH(A)=60H(30H)=08H(40H)=60H12、若(A)=E8H,(R0)=40H,(R1)=20H,(R4)=3AH,(40H)=2CH,(20)=0FH,試寫出下列各指令獨立執(zhí)行后有關(guān)寄存器和存儲單元的內(nèi)容?若該指令影響標(biāo)志位,試指出CY、AC、和OV的值。(1)MOV A,R0(2)ANL 40H,#0FH(3)ADD A,R4(4)SWAP A(5)DEC R1(6)XCHD A,R1答:(1)(A)=2CH(2)(40H)=0CH(3)(A)=22H,(CY)=1,(AC)=1,(OV)=0(4)(A)=8EH(5)(20H)=0EH,P=1(6)(A)=EFH,(20)=08H把BLOCK單元開始存放的10個無符號數(shù)進行求和,并將結(jié)果存入SUM單元.的編程:LEN EQU 10SUM EQU 21HBLOCK EQU 22HCLR AMOV R7,LENMOV R0,BLOCKLOOP:ADD A,R0INC R0DJNZ R7,LOOPMOV SUM,AEND。例2 數(shù)據(jù)傳送將地址為2000H、2001H、2002H的片外數(shù)據(jù)存儲單元內(nèi)容分別傳送到2002H、2003H和2004H單元中。ORG 0000HAJMP 0100H ;轉(zhuǎn)到主程序起始地址ORG 0100HMOV DPTR, #2002H ;最后一個數(shù)據(jù)的起始地址MOVX A,DPTR ;2002H單元的數(shù)據(jù)送AMOV DPTR, #2004H ;最后一個數(shù)據(jù)的目的地址MOVX DPTR,A ;2002H單元的數(shù)據(jù)送2004H單元MOV DPTR, #2001H ;中間數(shù)據(jù)的起始地址MOVX A,DPTR ;2001H單元的數(shù)據(jù)送AMOV DPTR, #2003H ;中間數(shù)據(jù)的目的地址MOVX DPTR,A ;2001H單元的數(shù)據(jù)送2003H單元MOV DPTR, #2000H ;第一個數(shù)據(jù)的起始地址MOVX A,DPTR ;2000H單元的數(shù)據(jù)送AMOV DPTR, #2002H ;第一個數(shù)據(jù)的目的地址MOVX DPTR,A ;2000H單元的數(shù)據(jù)送2002H單元SJMP $END例3 查表程序 有一變量存放在片內(nèi)RAM的20H單元,其取值范圍為:00H05H。要求編制一段程序,根據(jù)變量值求其平方值,并存入片內(nèi)RAM的21H單元。程序如下:#2000H DPTR(20H) A(A+DPTR) AA 21H開始結(jié)束ORG 1000HSTART:MOV DPTR,#2000HMOV A,20HMOVC A,A+DPTRMOV 21H,ASJMP $ORG 2000HTABLE:DB 00,01,04,09,16,25END。例4已知30H單元存有8位二進制數(shù)的BCD碼,請將其轉(zhuǎn)換為共陰顯示的字形碼,然后從P1 口輸出。設(shè)這些字形碼存放在標(biāo)號為TABLE 的存儲單元。ORG 0000HAJMP MAIN ;轉(zhuǎn)到主程序起始地址ORG 0100HMAIN:MOV DPTR, #TABLE ;字形碼表首地址送DPTRMOV A,30H ;取數(shù)MOVC A,A+DPTR ;查表取值送AMOV P1, A ;字形碼送P1SJMP $TABLE:DB 3FH,06H,5BH,4FH,66H;04共陰字形碼DB 6DH,7DH,07H,7FH,6FH;59共陰字形碼END雙字節(jié)無符號數(shù)加法。設(shè)被加數(shù)存放在內(nèi)部RAM的51H、50H單元,加數(shù)存放在內(nèi)部RAM的61H、60H單元,相加的結(jié)果存放在內(nèi)部RAM的51H、50H單元,進位存放在位尋址區(qū)的00H位中。程序段如下:MOV R0,50H ;被加數(shù)的低字節(jié)地址MOV R1,60H ;加數(shù)的低字節(jié)地址MOV A,R0 ;取被加數(shù)低字節(jié)ADD A,R1 ;加上加數(shù)低字節(jié)MOV R0,A ;保存低字節(jié)相加結(jié)果INC R0 ;指向被加數(shù)高字節(jié)INC R1 ;指向加數(shù)高字節(jié)MOV A,R0 ;取被加數(shù)高字節(jié)ADDC A,R1 ;加上加數(shù)高字節(jié)(帶進位加)MOV R0,A ;存高字節(jié)相加結(jié)果MOV 00H,C ;保存進位。例6 求單字節(jié)有符號數(shù)的二進制補碼。設(shè)有一個單字節(jié)二進制數(shù)存于A中。例7: 已知內(nèi)RAM30H單元存有一個ASCII碼,試對其進行判斷,如果是“$”(24H),將其存入40H,否則存入31H單元。程序如下:ORG 0000HAJMP MAINORG 0100HMAIN:MOV A,30HCJNE A,#24H,DY31 ; 不是“$”,轉(zhuǎn)去ZY31MOV 40H,A ;是“$”,存入40H單元AJMP END0DY31:MOV 31H,A ; 不是$,存入31H單元END0:SJMP $END例8 設(shè)變量x 以補碼的形式存放在片內(nèi)RAM的30H單元,變量y 與x 的關(guān)系是:當(dāng)x 大于0時,y =x;當(dāng)x =0時,y =20H;當(dāng)x 小于0時,y =x+5。編制程序,根據(jù)x 的大小求y并送回原單元。程序段如下:START:MOV A,30HJZ NEXTANL A,#80H ;判斷符號位JZ LPMOV A,#05HADD A,30HMOV 30H,ASJMP LPNEXT:MOV 30H,#20HLP:SJMP $例9 編程實現(xiàn)以下數(shù)據(jù)傳送功能:將BUF為起始地址的50個數(shù)取反后,傳送到以DATA為起始地址的內(nèi)存單元中。程序如下:START:MOV R0,#SBUF ;數(shù)據(jù)的源地址MOV R1,#DATA ;數(shù)據(jù)的目的地址MOV R7,#50 ;循環(huán)次數(shù)LOOP:MOV A,R0 ; 源地址中數(shù)據(jù)送ACPL A ;取反MOV R1 , A ;取反后的數(shù)據(jù)送目的地址INC R0 ;源地址加1,準(zhǔn)備取下一個數(shù)INC R1 ;目的地址加1,準(zhǔn)備接收下一個數(shù)DJNZ R7 ,LOOP ;循環(huán)結(jié)束?未結(jié)束重新取數(shù)RET例10 50ms延時程序。若晶振頻率為12MHz,則一個機器周期為1s。執(zhí)行一條DJNZ指令需要2個機器周期,即2s。采用循環(huán)計數(shù)法實現(xiàn)延時,循環(huán)次數(shù)可以通過計算獲得,并選擇先執(zhí)行后判斷的循環(huán)結(jié)構(gòu)。程序段如下:DEL:MOV R7,#200 ;1 sDEL1:MOV R6,#123 ;1 sNOP ;1 sDEL2:DJNZ R6,DEL2 ;2s,計(2123)sDJNZ R7,DEL1 ;2s,RET共計(21232 2)200+1 s,即50.001ms例11 無符號數(shù)排序程序。在片內(nèi)RAM中,起始地址為30H的8個單元中存放有8個無符號數(shù)。試對這些無符號數(shù)進行升序排序 數(shù)據(jù)排序常用的方法是冒泡排序法。設(shè)R7為比較次數(shù)計數(shù)器,初始值為07H,位地址00H為數(shù)據(jù)互換標(biāo)志位。START:CLR 00H ;互換標(biāo)志清0MOV R7,#07H ;各次冒泡比較次數(shù)MOV R0,#30H ;數(shù)據(jù)區(qū)首址LOOP:MOV A,R0 ;取前數(shù)MOV 2BH,A ;暫存INC R0MOV 2AH,R0 ;取后數(shù)CLR CSUBB A,R0 ;前數(shù)減后數(shù)JC NEXT ; 前數(shù)小于后數(shù),不互換MOV R0,2BHDEC R0MOV R0,2AH ;兩數(shù)交換INC R0 ;準(zhǔn)備下一次比較SETB 00H ;置互換標(biāo)志NEXT:DJNZ R7,LOOP ;進行下一次比較JB 00H,START ;進行下一輪冒泡SJMP $例將內(nèi)部RAM中起始地址為data的數(shù)據(jù)串傳送到外部RAM中起始地址為buffer的存儲區(qū)域內(nèi),直到發(fā)現(xiàn)$ 字符停止傳送。程序段如下:MOV R0,#dataMOV DPTR,#bufferLOOP0:MOV A,R0CJNE A,#24H,LOOP1 ;判斷是否為 $ 字符SJMP LOOP2 ;是 $ 字符,轉(zhuǎn)結(jié)束LOOP1:MOVX DPTR,A ;不是 $ 字符,執(zhí)行傳送INC R0INC DPTRSJMP LOOP0 ;傳送下一數(shù)據(jù)LOOP2: 例編寫程序,實現(xiàn)c=a2+b2 。設(shè)a,b,c分別存于內(nèi)部RAM的30H,31H,32H三個單元中。程序段如下:START:MOV A,30H ;取aACALL SQR ;調(diào)用查平方表MOV R1,A ;a2 暫存于R1中MOV A,31H ;取bACALL SQR ;調(diào)用查平方表ADD A,R1 ;a2+b2 存于A中MOV 32H,A ;存結(jié)果SJMP $SQR :MOV DPTR,#TAB ;子程序MOVC A,A+DPTR ;RETTAB :DB 0,1,4,9,16 ,25,36,49,64,81例將R0和R1指向的內(nèi)部RAM 中兩個3字節(jié)無符號整數(shù)相加,結(jié)果送到由R0指向的內(nèi)部RAM中。入口時,R0和R1分別指向加數(shù)和被加數(shù)的低位字節(jié);出口時,R0指向結(jié)果的高位字節(jié)。低字節(jié)在高地址,高字節(jié)在低地址。實現(xiàn)程序:NADD:MOV R7,#3 ;三字節(jié)加法CLR C ;NADD1:MOV A,R0 ;取加數(shù)低字節(jié)ADDC A,R1 ;被加數(shù)低字節(jié)加AMOV R0,A ;DEC R0DEC R1DJNZ R7,NADD1INC R0RET例把內(nèi)部RAM中20H單元中的1個字節(jié)十六進制數(shù)轉(zhuǎn)換為2位ASCII碼,存放在R0指示的兩個單元中。MAIN:MOV A,20H ;SWAP APUSH ACC ;參數(shù)入棧ACALL HEASCPOP ACCMOV R0,A ;存高位十六進制數(shù)轉(zhuǎn)換結(jié)果INC R0 ;修改指針PUSH 20H ;參數(shù)入棧ACALL HEASCPOP ACCMOV R0,A ;存低位十六進制數(shù)轉(zhuǎn)換結(jié)果SJMP $HEASC:MOV R1,SP ;借用R1為堆棧指針DEC R1DEC R1 ;R1指向被轉(zhuǎn)換數(shù)據(jù)XCH A,R1 ;取被轉(zhuǎn)換數(shù)據(jù)ANL A,#0FH ;取一位十六進制數(shù)ADD A,#2 ; 所加值為MOVC與DB間字節(jié)數(shù)MOVC A,A+PC ;查表XCH A,R1 ;1字節(jié)指令,存結(jié)果于堆棧RET ;1字節(jié)指令A(yù)SCTAB:DB 30H,31H,32H,33H,34H,35H,36H,37H DB 38H,39H,41H,42H,43H,44H,45H,46H例多字節(jié)無符號數(shù)的加法。設(shè)兩個N字節(jié)的無符號數(shù)分別存放在內(nèi)部RAM中以DATA1和DATA2開始的單元中。相加后的結(jié)果要求存放在DATA2數(shù)據(jù)區(qū)。MOV R0,#DATA1 ;MOV R1,#DATA2 ;MOV R7,#N ; 置字節(jié)數(shù)CLR C ;LOOP:MOV A,R0 ;ADDC A,R1 ;求和MOV R1,A ;存結(jié)果INC R0 ;修改指針I(yè)NC R1 ;DJNZ R7, LOOP ;例多字節(jié)無符號數(shù)的減法。設(shè)兩個N字節(jié)的無符號數(shù)分別存放在內(nèi)部RAM中以DATA1和DATA2開始的單元中。相減后的結(jié)果要求存放在DATA2數(shù)據(jù)區(qū)。MOV R0,#DATA1 ;MOV R1,#DATA2 ;MOV R7,#N ;置字節(jié)數(shù)CLR C ;LOOP:MOV A,R0 ;SUBB A,R1 ;求差MOV R1,A ;存結(jié)果INC R0 ;修改指針I(yè)NC R1 ;DJNZ R7, LOOP ;例將1位十六進制數(shù)轉(zhuǎn)換成相應(yīng)的ASCII碼。設(shè)十六進制數(shù)存放在R0中,轉(zhuǎn)換后的ASCII 碼存放于R2中。實現(xiàn)程序如下:HASC:MOV A,R0 ;取4位二進制數(shù)ANL A,#0FH ;屏蔽掉高4位PUSH ACC ;4位二進制數(shù)入棧CLR C ;清進(借)位位SUBB A,#0AH ;用借位位的狀態(tài)判斷該數(shù)在09還是AF之間POP ACC ;彈出原4位二進制數(shù)JC LOOP ;借位位為1,跳轉(zhuǎn)至LOOPADD A,#07H ;借位位為0,該數(shù)在AF之間,加37HLOOP:ADD A,#30H ;該數(shù)在09之間,加30HMOV R2,A ;ASCII碼存于R2RET例將多位十六進制數(shù)轉(zhuǎn)換成ASCII碼。設(shè)地址指針R0指向十六進制數(shù)低位,R2中存放字節(jié)數(shù),轉(zhuǎn)換后地址指針R0指向十六進制數(shù)的高位。R1指向要存放的ASCII碼的高位地址。實現(xiàn)程序如下:HTASC:MOV A,R0 ;取低4位二進制數(shù)ANL A,#0FH ;ADD A,#15 ;偏移量修正MOVC A,A+PC ;查表MOV R1,A ;存ASCII碼INC R1 ;MOV A ,R0 ;取十六進制高4位SWAP AANL A,#0FH ;ADD A,#06H ;偏移值修正MOVC A,A+PC ;MOV R1,AINC R0 ;指向下一單元INC R1 ;DJNZ R2,HTASC ;字節(jié)數(shù)存于R2RETASCTAB:DB 30H,31H,32H,33H,34H,35H,36H,37H DB 38H,39H,41H,42H,43H,44H,45H,46H例雙字節(jié)二進制數(shù)轉(zhuǎn)換成BCD碼。設(shè)(R2R3)為雙字節(jié)二進制數(shù),(R4R5R6)為轉(zhuǎn)換完的壓縮型BCD碼。DCDTH:CLR A ;MOV R4,A ;R4清0MOV R5,A ;R5清0MOV R6,A ;R6清0MOV R7,#16 ;計數(shù)初值LOOP:CLR C ;MOV A,R3 ;RLC A ;MOV R3,A ;R3左移一位并送回MOV
溫馨提示
- 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)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 殘疾人職業(yè)培訓(xùn)與實習(xí)聘用合同模板
- 文化創(chuàng)意產(chǎn)業(yè)版權(quán)合作合同協(xié)議
- 特色餐廳加盟管理合同
- 怎樣看待創(chuàng)業(yè)活動方案
- 總公司安排世界杯活動方案
- 恒大物業(yè)公司活動方案
- 情侶植樹活動方案
- 情感課程活動方案
- 情緒技巧活動方案
- 惠農(nóng)促銷活動方案
- 信息安全培訓(xùn)《釣魚郵件防范技巧》
- 2025至2030中國燙印箔行業(yè)發(fā)展趨勢分析與未來投資戰(zhàn)略咨詢研究報告
- 部編版高一語文必修上冊教案計劃
- 臨時工請假管理制度
- 小學(xué)用電安全課件
- 2025年北京市高考英語試卷真題(含答案解析)
- 2025年中國浮萍項目投資可行性研究報告
- 商洛學(xué)院《大學(xué)學(xué)術(shù)綜合英語》2023-2024學(xué)年第二學(xué)期期末試卷
- 2025年高考英語全國二卷聽力試題答案詳解講解(課件)
- 高級采氣工理論練習(xí)卷附答案
- 國開電大【管理英語3單元自測1-8答案】+【管理英語4形考任務(wù)單元自測1-8答案】
評論
0/150
提交評論