單片機(jī)接口及其技術(shù)復(fù)習(xí)要點(diǎn).docx_第1頁
單片機(jī)接口及其技術(shù)復(fù)習(xí)要點(diǎn).docx_第2頁
單片機(jī)接口及其技術(shù)復(fù)習(xí)要點(diǎn).docx_第3頁
單片機(jī)接口及其技術(shù)復(fù)習(xí)要點(diǎn).docx_第4頁
單片機(jī)接口及其技術(shù)復(fù)習(xí)要點(diǎn).docx_第5頁
已閱讀5頁,還剩11頁未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡介

1什么是單片機(jī)!在一塊集成電路芯片上集成微處理器、存儲器I/O接口電路,從而構(gòu)成了單芯片微型計(jì)算機(jī)。其特點(diǎn)是:體積小、控制功能強(qiáng),性價(jià)比高,其非凡的嵌入式應(yīng)用形態(tài)對于滿足應(yīng)用式需求具有獨(dú)特的優(yōu)勢.280C51單片機(jī)的基本結(jié)構(gòu),包括CPU系統(tǒng)(1 8位CPU,含布爾處理器2 時(shí)鐘電路3 總線控制)、存儲器系統(tǒng)(1 4k字節(jié)的數(shù)據(jù)存儲器(ROM/EPROM/Fash、可外擴(kuò)至64k)2 128字節(jié)的數(shù)據(jù)存儲器(RAM, 可外擴(kuò)至64k),3特殊功能寄存器SPR) I/O口等和其他功能單元(四個(gè)并行I/O口,2兩個(gè)十六位定時(shí)/計(jì)數(shù)器。3一個(gè)全雙工異步并行口(UART),4中斷系統(tǒng)(五個(gè)中斷源,兩個(gè)優(yōu)先級).3 80C51單片機(jī)的復(fù)位操作及其復(fù)位后的狀態(tài) 復(fù)位是使單片機(jī)或系統(tǒng)中的其他部件處于某種確定的初始狀態(tài),其工作就是從復(fù)位開始的。復(fù)位操作有兩種基本形式一是上電位,要求接通電源后單片機(jī)自動實(shí)現(xiàn)復(fù)位操作。二是上電與按鍵均有效的復(fù)位。實(shí)際應(yīng)用中如果在單片機(jī)斷電后,有可能在較短的時(shí)間內(nèi)再次充電可以在R1上并接一個(gè)二極管,可以有效地提高此種情況下復(fù)位的可靠性。單片機(jī)復(fù)位后的狀態(tài) 單片機(jī)的復(fù)位操作時(shí)單片機(jī)進(jìn)入初始化狀態(tài)。初始化后,程序計(jì)數(shù)器PC=0000H,所以程序從0000h地質(zhì)單元開始執(zhí)行。單片機(jī)啟動后,片內(nèi)的ram為隨機(jī)值運(yùn)行中的復(fù)位操作不改變r(jià)am的內(nèi)容。復(fù)位后寄存器的狀態(tài)時(shí)確定的p0-P3=FFH,SP為07h,sbuf 不定,ip ie 和pcon的有效值為0,其余的特殊功能寄存器狀態(tài)均為00h。 PC = 0000H RAM:隨機(jī)值(運(yùn)行中復(fù)位不改變RAM內(nèi)容) SFR: P0P3=FFH SP=07H IP、IE和PCON:有效位為0 PSW=00H(狀態(tài)確定) 相應(yīng)的意義:P0P3=FFH,相當(dāng)于各口鎖存器已寫入1,此時(shí)不但可以使出,也可以輸入。SP=07F堆棧指針指向片內(nèi)RAM的07H單元(入棧的內(nèi)容將寫入08H單元)IP、IE和PCON的有效位為0,個(gè)中斷源處于低優(yōu)先級且均被關(guān)斷、串行通信的波特率不加倍。PSW=00H,當(dāng)前工作寄存器為零組。4 80C51單片機(jī)的數(shù)據(jù)存儲器配置,包括工作寄存器 區(qū)、位尋址區(qū)等。80C51單片機(jī)的數(shù)據(jù)存儲器也分為片內(nèi)、外兩部分。對于基本型的單片機(jī),共有片內(nèi)ram128字節(jié),分為工作寄存器區(qū)、位尋址區(qū)、通用RAM區(qū)三部分,尋址范圍為00H-7FH。對于增強(qiáng)型的單片機(jī),共有256字節(jié),低128字節(jié)地址范圍00H-7FH與基本型相同。對于高128字節(jié)80H-FFH只能采取間接尋址方式訪問(旨在與SFR的訪問相區(qū)別)。片外RAM地址空間為64KB,地址范圍0000H-FFFFH。訪問片外RAM時(shí)采用專門的指令MOVX實(shí)現(xiàn),這時(shí)讀/RD或?qū)?WR信號有效;訪問片內(nèi)RAM時(shí)使用MOV指令,無讀寫信號產(chǎn)生。工作寄存器區(qū)(含寄存器組03)寄存器組0:地址00H07H寄存器組1:地址08H0FH寄存器組2:地址10H17H寄存器組3:地址18H1FH。工作寄存器組共32個(gè)字節(jié),分四個(gè)工作寄存器組,每組占8個(gè)單元,分別稱為:R0、R1R7。當(dāng)前工作寄存器組的選擇由特殊功能寄存器中的程序狀態(tài)寄存器psw的rsi、rso來決定。位尋址區(qū)片內(nèi)RAM位尋址區(qū)共16個(gè)字節(jié),人們常將程序狀態(tài)寄存器標(biāo)志、位控制變量設(shè)在位尋址區(qū)內(nèi)。對于該區(qū)未用到的單元也可以作為通用RAM使用。通用RAM區(qū) 30H7FH,共80字節(jié) 數(shù)據(jù)緩沖 堆棧 SP指示棧頂 復(fù)位時(shí)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單片機(jī)的時(shí)鐘,包括其產(chǎn)生、表現(xiàn)。產(chǎn)生:一是內(nèi)部時(shí)鐘方式 二是外部時(shí)鐘方式。表現(xiàn)。外部 只要在單片機(jī)的XTAL1和XTAL2引腳外接晶振即可。晶振CYS的晶振頻率要小于12MHz,典型值為6MHz12MHz或11.0592MHz。80C51的單片機(jī)時(shí)鐘信號 1個(gè)機(jī)器周期:12個(gè)晶蕩周期(或6個(gè)時(shí)鐘周期)。指令的執(zhí)行時(shí)間稱作指令周期 (單、雙、四周期)晶振信號經(jīng)分頻后形成兩個(gè)錯(cuò)開的信號P1和P2. P1和P2的周期也稱為S中狀態(tài),它是周期的2倍,及一個(gè)S狀態(tài)包含兩個(gè)晶振周期。晶振信號12分頻后形成機(jī)器周期,即一個(gè)機(jī)器周期包含12個(gè)晶蕩周期。指令的執(zhí)行時(shí)間稱作指令周期。6 80C51單片機(jī)的中斷源、中斷優(yōu)先級以及中斷允許與 優(yōu)先級控制。單片機(jī)的中斷源:計(jì)算機(jī)具有實(shí)時(shí)處理的能力能對外界發(fā)生的事件進(jìn)行及時(shí)的處理需要靠計(jì)算機(jī)的中斷系統(tǒng)來實(shí)現(xiàn)。中斷的處理過程描述為!CPU在處理某一事件A時(shí),發(fā)生了另一事件B請求CPU迅速去處理(中斷發(fā)生); CPU暫時(shí)中斷當(dāng)前的工作,轉(zhuǎn)去處理事件B(中斷響應(yīng)和中斷服務(wù));待CPU將事件B處理完畢后,再回到原來事件A被中斷的地方繼續(xù)處理事件A(中斷返回),這一過程稱為中斷。引起CPU中斷的根源,稱為中斷源。中斷源向CPU提出的中斷請求。CPU暫時(shí)中斷原來的事務(wù)A,轉(zhuǎn)去處理事件B。對事件B處理(中斷服務(wù))完畢后,再回到原來被中斷的地方(即斷點(diǎn)),稱為中斷返回。實(shí)現(xiàn)上述中斷功能的部件稱為中斷系統(tǒng)(中斷機(jī)構(gòu))。能夠向CPU發(fā)出中斷申請的部件稱為中斷源。中斷允許控制:cpu對中斷系統(tǒng)所有中斷以及某個(gè)中斷源的開放和屏蔽是由允許寄存器ie控制的。Ie的狀態(tài)可通過程序由軟件設(shè)定。中斷優(yōu)先級控制:80c51單片機(jī)有兩個(gè)中斷優(yōu)先級,即可實(shí)現(xiàn)二級中斷服務(wù)嵌套。每個(gè)中斷源的優(yōu)先級都是由中斷優(yōu)先級寄存器ip中的相應(yīng)位來規(guī)定的。80C51單片機(jī)的中斷優(yōu)先級有三條原則:CPU同時(shí)接收到幾個(gè)中斷時(shí),首先響應(yīng)優(yōu)先級別最高的中斷請求。正在進(jìn)行的中斷過程不能被新的同級或低優(yōu)先級的中斷請求所中斷。正在進(jìn)行的低優(yōu)先級中斷服務(wù),能被高優(yōu)先級中斷請求所中斷。為了實(shí)現(xiàn)上述后兩條原則,中斷系統(tǒng)內(nèi)部設(shè)有兩個(gè)用戶不能尋址的優(yōu)先級狀態(tài)觸發(fā)器,其中一個(gè)置1,表示正在響應(yīng)高優(yōu)先級的中斷,它將阻斷后來所有的中斷請求;另一個(gè)置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)時(shí)間:自中斷源提出中斷申請,到cpu響應(yīng)中斷,需要經(jīng)歷一定的時(shí)間,如果中斷響應(yīng)過程受阻就要增加等待時(shí)間,。若同級或高級中斷正在進(jìn)行需要的附加時(shí)間取決于正在執(zhí)行的終端服務(wù)程序的長短,等待的時(shí)間不確定;若沒有同級或高級中斷正在進(jìn)行所需要的附加等待時(shí)間在三至五個(gè)機(jī)器周期。原因:若查詢周期不是在執(zhí)行的指令的最后機(jī)器周期附加等待時(shí)間不會超過三個(gè)機(jī)器周期,2 若查詢機(jī)器周期恰逢reti或訪問ip、Ie指令,而這類指令之后又跟著mul或div指令,則由此引起的附加等待時(shí)間不會超過五個(gè)機(jī)器周期。中斷響應(yīng)過程:cpu中斷響應(yīng)過程如下:將相應(yīng)優(yōu)先級狀態(tài)觸發(fā)器置1(以阻斷后來的同級或低級的中斷請求)執(zhí)行硬件LCALL指令(pc入棧保護(hù)斷點(diǎn),將相應(yīng)中斷服務(wù)程序入口地址送pc)執(zhí)行中斷服務(wù)程序。中斷返回:中斷服務(wù)的程序的最后一條指令必須是中斷返回指令reti。Reti指令能使cpu結(jié)束中斷服務(wù)的執(zhí)行。其功能是將斷點(diǎn)地址從堆棧彈出送pc,cpu從原斷點(diǎn)繼續(xù)執(zhí)行程序。將相應(yīng)優(yōu)先級狀態(tài)觸發(fā)器清零,恢復(fù)原來工作狀態(tài)。7 80C51單片機(jī)的尋址方式。尋址方式有七種:寄存器尋址,直接尋址,寄存器間接尋址,立即尋址,變址尋址,相對尋址和位尋址,8 80C51單片機(jī)的數(shù)據(jù)傳送指令,MOV、MOVC、MOVX、PUSH、POP等。數(shù)據(jù)傳送是進(jìn)行數(shù)據(jù)處理的最基本操作,這類指令一般不影響標(biāo)志寄存器psw的狀體。傳送指令分兩大類,一是采用mov操作符,為一般傳送指令;二是采用非mov操作符,稱為特殊傳送指令。MOV、MOVC、MOVX、PUSH、POP等為特殊傳送指令;讀取rom中常數(shù)表的表項(xiàng)指令movc,讀取片外ram及接口單元數(shù)據(jù)的指令movx,堆棧操作指令push和pop:堆棧是在內(nèi)部ram、中按“先進(jìn)先出”的規(guī)則組織的一片存儲區(qū),此區(qū)的一端固定,稱為棧底,另一端是活動的稱為棧頂,棧頂?shù)奈恢糜蓷V羔榮p指示。在80c51中,堆棧設(shè)置在片內(nèi)低端的128個(gè)單元,且生長方向是向上的。程序匯編的步驟:1. 分析問題針對現(xiàn)有條件,明確程序設(shè)計(jì)時(shí)應(yīng)該“做什么”2. 確定算法解決“怎樣做”的問題 3. 繪制程序流程圖用圖形的方法描繪解決問題的思路4. 分配內(nèi)存單元確定程序和數(shù)據(jù)區(qū)的起始地址 5. 編寫源程序用指令的形式將程序流程圖實(shí)現(xiàn)出來6. 匯編用開發(fā)機(jī)或仿真器將源程序轉(zhuǎn)換成機(jī)器碼,便于單片機(jī)識別7. 在線仿真調(diào)試查錯(cuò)、改錯(cuò),對程序進(jìn)行優(yōu)化。程序編制的方法與技巧:盡量采用模塊化程序設(shè)計(jì)方法;是把一個(gè)完整的程序分成若干個(gè)功能相對獨(dú)立的、較小的程序模塊,對各個(gè)程序模塊分別進(jìn)行設(shè)計(jì)、編制程序和調(diào)試,最后把各個(gè)調(diào)試好的程序模塊裝配起來進(jìn)行聯(lián)調(diào),最終成為一個(gè)有實(shí)用價(jià)值的程序。模塊化程序設(shè)計(jì)的優(yōu)點(diǎn)是:對單個(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)存。盡量少用無條件轉(zhuǎn)移指令;少用無條件轉(zhuǎn)移指令,可以保證程序的條理更加清晰,從而減少錯(cuò)誤發(fā)生。充分利用累加器;累加器是主程序和子程序之間信息傳遞的橋梁,利用累加器傳遞入口參數(shù)或返回參數(shù)比較方便。這時(shí),一般不要把累加器內(nèi)容壓入堆棧。對于通用子程序要保護(hù)現(xiàn)場;由于子程序的通用性,除了保護(hù)子程序入口參數(shù)的寄存器內(nèi)容外,還要對子程序中用到的其它寄存器內(nèi)容一并入棧保護(hù)。對于中斷處理,還要保護(hù)程序狀態(tài)字在中斷處理程序中,既要保護(hù)處理程序中用到的寄存器內(nèi)容,還要保護(hù)程序狀態(tài)字PSW。否則,當(dāng)中斷服務(wù)程序執(zhí)行結(jié)束返回主程序時(shí),整個(gè)程序的執(zhí)行可能會被打亂。匯編語言的語句格式:80C51單片機(jī)匯編語言的語句行由4個(gè)字段組成,匯編程序能對這種格式正確地進(jìn)行識別。這4個(gè)字段的格式為:標(biāo)號: 操作碼操作數(shù) ;注釋括號內(nèi)的部分可根據(jù)實(shí)際情況取舍,各字段之間要用分隔符分隔??捎米鞣指舴姆栍忻疤?、空格、逗號、分號等。1、標(biāo)號標(biāo)號是指令的符號地址。有了標(biāo)號,程序中的其它語句才能很方便地訪問該語句。有關(guān)標(biāo)號的規(guī)定為:標(biāo)號要由18個(gè)ASCII碼字符組成,但必須以字母開頭,其余字符可以是字母、數(shù)字或其它特定字符。不能使用匯編語言已經(jīng)定義了的符號作為標(biāo)號,如指令助記符MOV、偽指令記憶符END以及寄存器的符號名稱R1等。標(biāo)號后邊必須跟冒號。同一標(biāo)號在一個(gè)程序中只能定義一次,不能重復(fù)定義。2、操作碼 操作碼用于規(guī)語句執(zhí)行的操作。它用指令助記符或偽指令助記符表示,是匯編語句中唯一不能空缺的部分。3、操作數(shù)操作數(shù)用于給指令的操作提供數(shù)據(jù)或地址。在一條語句中,可能沒有操作數(shù),可能只有1個(gè)操作數(shù),還可能同時(shí)包含23個(gè)操作數(shù)。各操作數(shù)之間要以逗號分隔。操作數(shù)一般以下面幾種形式出現(xiàn):常數(shù)工作寄存器名特殊功能寄存器名標(biāo)號名符號“$”,表示程序計(jì)數(shù)器PC的當(dāng)前值。如:SJMP $ 表達(dá)式4注釋注釋不屬于語句的功能部分,它只是對語句的解釋說明,只要用“;”開頭,就表明以下為注釋內(nèi)容。使用注釋可使程序文件的編制顯得更加清楚,便于編程人員的閱讀和維護(hù)。注釋的長度不限,一行不夠可以換行接著書寫,但換行后仍要以“;”開頭。源程序的編輯和匯編由于通用微型計(jì)算機(jī)的普及,現(xiàn)在單片機(jī)應(yīng)用系統(tǒng)的程序設(shè)計(jì)都借助于通用微型計(jì)算機(jī)。全過程可概括為“機(jī)器編輯交叉匯編串行傳送”三個(gè)部驟,基本程序結(jié)構(gòu):程序結(jié)構(gòu)通常分為三種形式:順序結(jié)構(gòu)、分支結(jié)構(gòu)、循環(huán)結(jié)構(gòu)。順序程序 順序程序是最簡單的程序結(jié)構(gòu),它既無分支,又無循環(huán),在執(zhí)行時(shí)單片機(jī)是按程序中指令的順序逐條進(jìn)行的。分支程序 分支結(jié)構(gòu)可以分成單分支、雙分支和多分支幾種情況。分支程序在單片機(jī)系統(tǒng)中應(yīng)用較多,在編程時(shí)有許多技巧,設(shè)計(jì)要點(diǎn)如下:(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í)行的部分。對這部分編程的時(shí)候要注意兩個(gè)問題:指令要具有通用性,程序要便于修改。程序盡可能簡化。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,試用堆棧指令實(shí)現(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彈出進(jìn)入60H單元POP 70H ;70H(51H),X彈出進(jìn)入70H單元例若(A)=84H,(30H)=8DH,執(zhí)行指令A(yù)DD A,30H 之后,即:(A)=11H,(CY)=1,(AC)=1,(OV)=1(D7有進(jìn)位,D6無進(jìn)位),(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 編程實(shí)現(xiàn)將P1口低4位的值存入30H單元,屏蔽高4位。MOV A,P1ANL A,#0FHMOV 30H,A例編程實(shí)現(xiàn)將P1口低4位的值保持不變,而高4位置1。結(jié)果存入30H單元。MOV A,P1ORL A,#0F0HMOV 30H,A例編程實(shí)現(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,試寫出下列各指令獨(dú)立執(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個(gè)無符號數(shù)進(jìn)行求和,并將結(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 ;最后一個(gè)數(shù)據(jù)的起始地址MOVX A,DPTR ;2002H單元的數(shù)據(jù)送AMOV DPTR, #2004H ;最后一個(gè)數(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 ;第一個(gè)數(shù)據(jù)的起始地址MOVX A,DPTR ;2000H單元的數(shù)據(jù)送AMOV DPTR, #2002H ;第一個(gè)數(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位二進(jìn)制數(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單元,進(jìn)位存放在位尋址區(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é)(帶進(jìn)位加)MOV R0,A ;存高字節(jié)相加結(jié)果MOV 00H,C ;保存進(jìn)位。例6 求單字節(jié)有符號數(shù)的二進(jìn)制補(bǔ)碼。設(shè)有一個(gè)單字節(jié)二進(jìn)制數(shù)存于A中。例7: 已知內(nèi)RAM30H單元存有一個(gè)ASCII碼,試對其進(jìn)行判斷,如果是“$”(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 以補(bǔ)碼的形式存放在片內(nèi)RAM的30H單元,變量y 與x 的關(guān)系是:當(dāng)x 大于0時(shí),y =x;當(dāng)x =0時(shí),y =20H;當(dāng)x 小于0時(shí),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 編程實(shí)現(xiàn)以下數(shù)據(jù)傳送功能:將BUF為起始地址的50個(gè)數(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)備取下一個(gè)數(shù)INC R1 ;目的地址加1,準(zhǔn)備接收下一個(gè)數(shù)DJNZ R7 ,LOOP ;循環(huán)結(jié)束?未結(jié)束重新取數(shù)RET例10 50ms延時(shí)程序。若晶振頻率為12MHz,則一個(gè)機(jī)器周期為1s。執(zhí)行一條DJNZ指令需要2個(gè)機(jī)器周期,即2s。采用循環(huán)計(jì)數(shù)法實(shí)現(xiàn)延時(shí),循環(huán)次數(shù)可以通過計(jì)算獲得,并選擇先執(zhí)行后判斷的循環(huán)結(jié)構(gòu)。程序段如下:DEL:MOV R7,#200 ;1 sDEL1:MOV R6,#123 ;1 sNOP ;1 sDEL2:DJNZ R6,DEL2 ;2s,計(jì)(2123)sDJNZ R7,DEL1 ;2s,RET共計(jì)(21232 2)200+1 s,即50.001ms例11 無符號數(shù)排序程序。在片內(nèi)RAM中,起始地址為30H的8個(gè)單元中存放有8個(gè)無符號數(shù)。試對這些無符號數(shù)進(jìn)行升序排序 數(shù)據(jù)排序常用的方法是冒泡排序法。設(shè)R7為比較次數(shù)計(jì)數(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 ;進(jìn)行下一次比較JB 00H,START ;進(jìn)行下一輪冒泡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: 例編寫程序,實(shí)現(xiàn)c=a2+b2 。設(shè)a,b,c分別存于內(nèi)部RAM的30H,31H,32H三個(gè)單元中。程序段如下: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 中兩個(gè)3字節(jié)無符號整數(shù)相加,結(jié)果送到由R0指向的內(nèi)部RAM中。入口時(shí),R0和R1分別指向加數(shù)和被加數(shù)的低位字節(jié);出口時(shí),R0指向結(jié)果的高位字節(jié)。低字節(jié)在高地址,高字節(jié)在低地址。實(shí)現(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個(gè)字節(jié)十六進(jìn)制數(shù)轉(zhuǎn)換為2位ASCII碼,存放在R0指示的兩個(gè)單元中。MAIN:MOV A,20H ;SWAP APUSH ACC ;參數(shù)入棧ACALL HEASCPOP ACCMOV R0,A ;存高位十六進(jìn)制數(shù)轉(zhuǎn)換結(jié)果INC R0 ;修改指針PUSH 20H ;參數(shù)入棧ACALL HEASCPOP ACCMOV R0,A ;存低位十六進(jìn)制數(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 ;取一位十六進(jìn)制數(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è)兩個(gè)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è)兩個(gè)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位十六進(jìn)制數(shù)轉(zhuǎn)換成相應(yīng)的ASCII碼。設(shè)十六進(jìn)制數(shù)存放在R0中,轉(zhuǎn)換后的ASCII 碼存放于R2中。實(shí)現(xiàn)程序如下:HASC:MOV A,R0 ;取4位二進(jìn)制數(shù)ANL A,#0FH ;屏蔽掉高4位PUSH ACC ;4位二進(jìn)制數(shù)入棧CLR C ;清進(jìn)(借)位位SUBB A,#0AH ;用借位位的狀態(tài)判斷該數(shù)在09還是AF之間POP ACC ;彈出原4位二進(jìn)制數(shù)JC LOOP ;借位位為1,跳轉(zhuǎn)至LOOPADD A,#07H ;借位位為0,該數(shù)在AF之間,加37HLOOP:ADD A,#30H ;該數(shù)在09之間,加30HMOV R2,A ;ASCII碼存于R2RET例將多位十六進(jìn)制數(shù)轉(zhuǎn)換成ASCII碼。設(shè)地址指針R0指向十六進(jìn)制數(shù)低位,R2中存放字節(jié)數(shù),轉(zhuǎn)換后地址指針R0指向十六進(jìn)制數(shù)的高位。R1指向要存放的ASCII碼的高位地址。實(shí)現(xiàn)程序如下:HTASC:MOV A,R0 ;取低4位二進(jìn)制數(shù)ANL A,#0FH ;ADD A,#15 ;偏移量修正MOVC A,A+PC ;查表MOV R1,A ;存ASCII碼INC R1 ;MOV A ,R0 ;取十六進(jìn)制高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é)二進(jìn)制數(shù)轉(zhuǎn)換成BCD碼。設(shè)(R2R3)為雙字節(jié)二進(jìn)制數(shù),(R4R5R6)為轉(zhuǎn)換完的壓縮型BCD碼。DCDTH:CLR A ;MOV R4,A ;R4清0MOV R5,A ;R5清0MOV R6,A ;R6清0MOV R7,#16 ;計(jì)數(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)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

最新文檔

評論

0/150

提交評論