版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、第三單元 片內(nèi)存儲(chǔ)器與數(shù)據(jù)傳送指令本單元學(xué)習(xí)要點(diǎn)1. 89C52單片機(jī)中的存儲(chǔ)器結(jié)構(gòu)和種類?主要作用?2. 數(shù)據(jù)傳送中的來(lái)源與目的存儲(chǔ)器,哪些是合法的數(shù)據(jù)傳送指令?3. 位傳送指令的特點(diǎn)。4. 數(shù)據(jù)傳送指令的尋址方式。3.1 片內(nèi)存儲(chǔ)器組織結(jié)構(gòu)3.1.1 存儲(chǔ)器類型在圖1-2所示的89C52內(nèi)部的基本結(jié)構(gòu)中,有兩塊存儲(chǔ)器:RAM和快閃存儲(chǔ)器(FLASH)。RAM是Random-access Memory的縮寫,意為隨機(jī)讀寫存儲(chǔ)器,說(shuō)白了,就是順便什么時(shí)候都可以對(duì)其進(jìn)行讀或?qū)懖僮?,但RAM中的內(nèi)容在掉電(關(guān)機(jī))后就不復(fù)存在,也即開機(jī)后RAM中的內(nèi)容是隨機(jī)的,因而這一類存儲(chǔ)器又被稱為易失性存儲(chǔ)器,
2、這類存儲(chǔ)器主要用于存儲(chǔ)數(shù)據(jù)。與此相對(duì)的是ROM(Read Only Memory,只讀存儲(chǔ)器),這類存儲(chǔ)器只能采用特殊的方法或特殊的工具才能把數(shù)據(jù)寫進(jìn)去,如采用燒錄器等裝置。一般說(shuō)來(lái),單片機(jī)本身不能對(duì)片內(nèi)的ROM進(jìn)行寫入。又由于ROM是非易失性的存儲(chǔ)器,即在關(guān)閉電源之后已寫入的數(shù)據(jù)不會(huì)丟失,所以,在單片機(jī)中ROM經(jīng)常作為程序存儲(chǔ)器。常見的ROM種類有4種:PROM(Programmable Read-Only Memory 可編程序的只讀存儲(chǔ)器):這是一種最先出現(xiàn)的ROM,它只能寫入一次,不允許修改或再次寫入。這一類ROM目前仍在應(yīng)用,主要用于已成熟的較大批量生產(chǎn)的產(chǎn)品中的單片機(jī)。EPROM(
3、Erasable Programmable Read Only Memory,可擦可編程只讀存儲(chǔ)器):這是一種可以多次寫入、用紫外線擦除的ROM,主要用于小批量生產(chǎn)的單片機(jī)應(yīng)用系統(tǒng)或研發(fā)單片機(jī)應(yīng)用產(chǎn)品時(shí)采用。早年INTEL公司生產(chǎn)的87C51片內(nèi)就是采用EPROM。自從EEPROM(Electrically Erasable Programmable Read Only Memory,電可擦可編程只讀存儲(chǔ)器)和FLASH MEMORY(快速存儲(chǔ)器或閃存)出現(xiàn)后,EPROM就漸漸消逝了。EEPROM:類似EPROM,但它不用紫外線擦除,而只要用電就可擦除。但其寫入和擦除的速度較慢。目前仍然有應(yīng)用
4、。FLASH MEMORY:與EEPROM類似,但其讀寫的速度要快得多,密度(集成度)也要高,自從它出現(xiàn)后迅速取代EPROM和EEPROM在單片機(jī)中廣泛應(yīng)用。AT89C52片內(nèi)就是采用8 KB(千字節(jié))的FLASH MEMORY作為程序存儲(chǔ)器。3.1.2 存儲(chǔ)器組織80C52的存儲(chǔ)器組織有幾個(gè)不同的存儲(chǔ)空間,如圖3-1所示。每個(gè)存儲(chǔ)空間都是具有連續(xù)的字節(jié)地址空間,其地址都是從0開始至最大存儲(chǔ)范圍的字節(jié)地址,即他們的地址是全部重疊的。他們之間是利用指令的尋址方式不同而區(qū)別開來(lái)。FFFFH0000H(XCODE)外部程序存儲(chǔ)器FFFFH0000H(XDATA)外部數(shù)據(jù)存儲(chǔ)器FFH特殊寄存器7FH(
5、SFR)7FH片內(nèi)RAM00HFFH片內(nèi)RAM7FH(IDATA)1FFFH片內(nèi)ROM0000H(ICODE)片內(nèi)存儲(chǔ)器圖3-1 80C52的存儲(chǔ)器組織右邊的虛線框內(nèi)89C52的程序存儲(chǔ)器區(qū),左邊的虛線框內(nèi)89C52的數(shù)據(jù)存儲(chǔ)器區(qū)。而點(diǎn)劃線框內(nèi)是89C52片內(nèi)的存儲(chǔ)器,點(diǎn)劃線框外是片外的存儲(chǔ)器。1程序存儲(chǔ)器(CODE)區(qū)89C52的程序存儲(chǔ)器區(qū)又分為片內(nèi)和片外兩個(gè)區(qū)。AT89C52的片內(nèi)程序存儲(chǔ)器區(qū)(ICODE)是快閃存儲(chǔ)器,可以多次擦寫,特別適合于開發(fā)程序量不大的新產(chǎn)品或?qū)W習(xí)用。AT89C52的片內(nèi)快閃存儲(chǔ)器有8K字節(jié)。AT89C52的片外程序存儲(chǔ)器區(qū)(XCODE)有16位尋址空間(即16位
6、地址線),可達(dá)64K。代碼段是只讀的,當(dāng)要對(duì)外接存儲(chǔ)器件如EPROM進(jìn)行尋址時(shí),單片機(jī)會(huì)產(chǎn)生一個(gè)信號(hào)。但這并不意味著片外程序存儲(chǔ)器區(qū)一定要用一個(gè)EPROM。目前一般使用EEPROM作為外接存儲(chǔ)器,可以被外圍器件或8051進(jìn)行改寫,這使系統(tǒng)更新更加容易,新的軟件可以下載到EEPROM中,而不用拆下它,然后裝入一個(gè)新的EEPROM。另外,帶電池的SRAMs也可用來(lái)代替EPROM,他可以像EEPROM一樣進(jìn)行程序的更新,并且沒(méi)有像EEPROM那樣讀寫次數(shù)的限制,但是當(dāng)電源耗盡時(shí),存儲(chǔ)在SRAMs中的程序也隨之丟失。使用SRAMs來(lái)代替EPROM時(shí)允許快速下載新程序到目標(biāo)系統(tǒng)中,這避免了編程/調(diào)試/擦
7、寫這樣一個(gè)循環(huán)過(guò)程,不再需要使用昂貴的在線仿真器。本書配套的實(shí)驗(yàn)板就是采用SRAMs作為系統(tǒng)的程序存儲(chǔ)器,在調(diào)試完成后再把調(diào)試好的代碼(程序)寫入片內(nèi)閃存中。2數(shù)據(jù)存儲(chǔ)器(DATA)區(qū)89C52的數(shù)據(jù)存儲(chǔ)器(DATA)區(qū)包括片內(nèi)前128字節(jié)的內(nèi)部RAM和外部64K字節(jié)的RAM(XDATA)兩部分。片內(nèi)前128字節(jié)主要是作為數(shù)據(jù)段稱為DATA區(qū),指令用一個(gè)或兩個(gè)周期來(lái)訪問(wèn)數(shù)據(jù)段訪問(wèn)DATA區(qū),比訪問(wèn)XDATA區(qū)要快,因?yàn)樗捎弥苯訉ぶ贩绞剑L問(wèn)XDATA須采用間接尋址,必須先初始化DPTR。通常我們把使用比較頻繁的變量或局部變量存儲(chǔ)在DATA段中,但是必須節(jié)省使用DATA段,因?yàn)樗目臻g畢竟有
8、限。在數(shù)據(jù)段中也可通過(guò)R0和R1采用間接尋址訪問(wèn),R0和R1被作為數(shù)據(jù)區(qū)的指針,將要讀或?qū)懙淖止?jié)的地址放入R0或R1中,根據(jù)源操作數(shù)和目的操作數(shù)的不同執(zhí)行指令需要一個(gè)或兩個(gè)周期。7CH工作寄存器0組工作寄存器2組工作寄存器3組工作寄存器1組00H08H01H02H03H04H05H06H07H21H09H0BH0CH0DH0EH0FH10H0AH18H12H13H14H15H16H17H19H1BH1CH1DH1EH1FH20H1AH11H31H28H23H24H25H26H27H29H2BH2CH2DH2EH2FH30H2AH22H7DH7EH7FH(DATA)片內(nèi)數(shù)據(jù)存儲(chǔ)器R1R2R3R4
9、R5R6R7R0R1R2R3R4R5R6R7R0R1R2R3R4R5R6R7R0R1R2R3R4R5R6R7R0可位尋址區(qū)片內(nèi)前128字節(jié)的DATA區(qū)又可以分為圖3-2所示的幾個(gè)區(qū)域。其中:工作寄存器組:地址從00H1FH,每8個(gè)單元為1組,共有4個(gè)組。00H07H為第零組(0組),08H0FH為第一組(1組),18H1FH為第三組(3組)。單片機(jī)復(fù)位時(shí)默認(rèn)第零組為當(dāng)前工作寄存器組,即讀、寫R0時(shí)是從00H單元進(jìn)行讀、寫操作,讀、寫R1時(shí)是從01H單元進(jìn)行讀、寫操作,讀、寫R7時(shí)是從07H單元進(jìn)行讀、寫操作。通過(guò)PSW(程序狀態(tài)寄存器)中的RS0、RS1位可以設(shè)置當(dāng)前工作寄存器組。表3-1給出
10、了當(dāng)前工作寄存器組與RS0、RS1的關(guān)系。比如,執(zhí)行了以下兩條指令:SETB RS0 ; 置位RS0SETB RS1 ; 置位RS1則把第三組設(shè)置為當(dāng)前工作寄存器組,如果這時(shí)執(zhí)行MOV R7, #3AH ; 送立即數(shù)3AH到R7則把立即數(shù)3AH寫入到1FH單元中。可位尋址區(qū):地址從20H2FH共16個(gè)單元中的每一位都可以直接尋址,即可以對(duì)這些單元中的某一位進(jìn)行讀、寫操作而不會(huì)影響該單元中的其他位,也可以把這些單元中的某一位作為標(biāo)志,用指令對(duì)其進(jìn)行判斷。這些位都有自己的位地址,如圖3-3所示。指令:SETB 00H ; 置位20H單元的第0位是把位地址00H(字節(jié)地址20H單元的第0位)置為1。
11、而CLR 77H ; 清除2EH單元的第7位則是把位地址77H(字節(jié)地址20H單元的第7位)清除為0。0DH0CH0BH07H02H03H01H00H06H05H04H0AH09H08H0EH0FH17H1FH77H7FH71H7CH1EH13H21H20H23H2DH2EH2FH22H1DH1CH1BH12H11H10H16H15H14H1AH19H18H7DH7BH72H73H70H76H75H74H7AH79H78H7EH字節(jié)地址位地址圖3-3 可位尋址區(qū)圖3-2 片內(nèi)數(shù)據(jù)存儲(chǔ)器 表3-1 當(dāng)前工作寄存器組與RS1、RS0的關(guān)系當(dāng)前工作寄存器組RS1RS00組(00H07H)000組(0
12、8H0FH)010組(10H17H)100組(18H1FH)113特殊功能寄存器中斷系統(tǒng)和外部功能控制寄存器位于從地址80H開始的內(nèi)部RAM中。這些寄存器被稱做特殊功能寄存器(Special Function Registers,簡(jiǎn)稱SFR),其中很多寄存器都可位尋址(可通過(guò)名字進(jìn)行引用)。例如,要對(duì)中斷使能寄存器中的EA位進(jìn)行尋址,可使用EA、或IE.7、或0AFH來(lái)訪問(wèn)。SFRs控制定時(shí)/計(jì)數(shù)器、串行口、中斷源及中斷優(yōu)先級(jí)等,這些寄存器的尋址方式和DATA中的其它字節(jié)和位一樣。SFR的分布如圖3-4所示。字節(jié)地址字節(jié)地址SFR名稱復(fù)位后的值(x表示不確定)灰色背景表示位可尋址圖3-4 SF
13、R的分布4IDATA 區(qū)8052有附加的128字節(jié)的內(nèi)部RAM,位于從80H開始的地址空間中,被稱為IDATA。因?yàn)镮DATA 區(qū)的地址和SFRs 的地址是重疊的,通過(guò)區(qū)分所訪問(wèn)的存儲(chǔ)區(qū)來(lái)解決地址重疊問(wèn)題。SFRs只能通過(guò)直接尋址來(lái)訪問(wèn),而IDATA區(qū)只能通過(guò)間接尋址來(lái)訪問(wèn)。例如:MOV 82H, #0FH; 寫入立即數(shù)#0FH到DPL與MOV DPL, #0FH; 寫入立即數(shù)#0FH到DPL作用完全一樣,都是寫入立即數(shù)#0FH到DPL。而MOV R0, #82H; 寫入立即數(shù)#82H到R0MOV R0, #0FH; 寫入立即數(shù)#0FH到83H是寫入立即數(shù)#0FH到IDATA中的82H單元。5
14、XDATA 區(qū)89C52的最后一個(gè)存儲(chǔ)空間為64K,和片外CODE 區(qū)一樣采用16位地址尋址,稱作外部數(shù)據(jù)區(qū),簡(jiǎn)稱XDATA區(qū)。這個(gè)區(qū)通常包括一些RAM,如SRAM,或一些需要通過(guò)總線接口的外圍器件。對(duì)XDATA的讀寫操作需要至少兩個(gè)指令周期,只能使用DPTR、R0或R1間接尋址。如MOV DPTR, #Addr; 寫入地址立即數(shù)#Addr到DPTRMOVX DPTR, A; 把累加器A中的數(shù)據(jù)寫入DPTR所指向的XDATA單元或MOV P2, #HIGH_Addr; 寫入地址高位立即數(shù)#Addr到P2MOV R1, #LOW_Addr; 寫入地址低位立即數(shù)#Addr到R1MOVX R1, A
15、; 把A中的數(shù)據(jù)寫入P2和R1所指向的XDATA單元 這兩組指令都是完成把A中的數(shù)據(jù)寫入XDATA單元。而MOV DPTR, #Addr; 寫入地址立即數(shù)#Addr到DPTRMOVX A, DPTR; 把DPTR所指向的XDATA單元中的數(shù)據(jù)讀到A或MOV P2, #HIGH_Addr; 寫入地址高位立即數(shù)#Addr到P2MOV R1, #LOW_Addr; 寫入地址低位立即數(shù)#Addr到R1MOVX A, R1; 把P2和R1所指向的XDATA單元中的數(shù)據(jù)讀到A 則把XDATA單元中的數(shù)據(jù)讀到A中。3.2 數(shù)據(jù)傳送指令數(shù)據(jù)傳送指令是單片機(jī)編程中用的最多的指令。前面介紹了89C52的存儲(chǔ)器分布
16、,自然地就應(yīng)該有這些存儲(chǔ)器(區(qū))之間的數(shù)據(jù)傳送指令,但是,由于89C52的存儲(chǔ)器區(qū)之間地址有重疊,因而必須用不同的尋址方式和操作數(shù)來(lái)區(qū)別所傳送數(shù)據(jù)的“來(lái)源”和“目的”。這部分內(nèi)容對(duì)初學(xué)者來(lái)說(shuō)是最難記憶的。為了方便讀者快速、準(zhǔn)確地掌握8051的數(shù)據(jù)傳送指令,一方面給出表3-2和圖3-5來(lái)說(shuō)明傳送指令與數(shù)據(jù)的“來(lái)源”和“目的”之間的關(guān)系,并在下面加以詳細(xì)地說(shuō)明,另一方面,在下一小節(jié)給出了數(shù)據(jù)傳送的實(shí)驗(yàn),務(wù)必請(qǐng)讀者按照示例和本章的習(xí)題要求盡量多做實(shí)驗(yàn)。表3-2 傳送指令及其與數(shù)據(jù)的“來(lái)源”和“目的”之間的關(guān)系 目的源立即地址(SFR和低128字節(jié)RAM)工作寄存器(Rn)累加器片外數(shù)據(jù)存儲(chǔ)器(XDA
17、TA)片內(nèi)高128字節(jié)RAM(IDATA)立即數(shù)(#data)MOV direct,#dataMOV DPTR,#datal6MOV Rn,#dataMOV A,#dataMOV Ri,#data程序存儲(chǔ)器(CODE)MOVC A,A+DPTRMOVC A,A+PC立即地址(SFR和低128字節(jié)RAM)MOV direct2,direct1MOV Rn,directMOV A,directMOV Ri,direct工作寄存器(Rn)MOV direct,RnMOV A, Rn累加器MOV direct,AMOV Rn,AMOVX Ri,AMOVX DPTR,AMOV Ri,A 片外數(shù)據(jù)存儲(chǔ)器(
18、XDATA)MOVX A,DPTR MOVX A,Ri片內(nèi)高128字節(jié)RAM(IDATA)MOV direct, RiMOV A,Ri 寄存器C1直接數(shù)據(jù)Data累加器A寄存器間接R1,R0寄存器DPTR立即數(shù)#Data寄存器間接SP寄存器R7R0直接數(shù)據(jù)Data116圖3-5 傳送指令與數(shù)據(jù)的“來(lái)源”和“目的”之間的關(guān)系有關(guān)傳送指令說(shuō)明如下1. 位傳送指令MOV C,bit和MOV bit,C沒(méi)有在表中列出。這兩條指令是把一位數(shù)據(jù)在C(進(jìn)位位、位于程序狀態(tài)寄存器PSW的第7位,作為布爾操作的累加器)中與直接位地址(即所有位可尋址的存儲(chǔ)器中的位)之間進(jìn)行操作。如MOV C, 00H; 把00H
19、(字節(jié)地址20H中的第0位)中的內(nèi)容送C MOV P3.2, C; 把C中的內(nèi)容送P3.2(P3口的第2位)MOV TR0, C; 把C中的內(nèi)容送TR0(定時(shí)/計(jì)數(shù)器T0的啟動(dòng)位)都是位傳送指令。位地址都可以看成直接地址,但它們之間不能直接傳送數(shù)據(jù),只能通過(guò)C來(lái)傳送,如MOV P3.2, 00H是非法的,要實(shí)現(xiàn)00H到P3.2的數(shù)據(jù)傳送,只能MOV C, 00H; 把00H(字節(jié)地址20H中的第0位)中的內(nèi)容送C MOV P3.2, C; 把C中的內(nèi)容送P3.2(P3口的第2位)而MOV P3.2, #01H也是非法的,位數(shù)據(jù)傳送指令中沒(méi)有立即數(shù)作為源地址的指令,只能SETB P3.2, ;
20、把 P3.2(P3口的第2位)置位CLR P3.2, ; 把 P3.2(P3口的第2位)清零位可尋址存儲(chǔ)器中的位可用兩種方式來(lái)尋址:MOV 22H.5, C; 把C中的內(nèi)容送字節(jié)地址22H中的第5位MOV 15H, C; 把C中的內(nèi)容送字節(jié)地址22H中的第5位位可尋址SFR中的位既可用上述兩種方式來(lái)尋址:MOV P3.2, C; 把C中的內(nèi)容送P3.2(P3口的第2位)MOV 0B0H.2, C; 把C中的內(nèi)容送P3.2(P3口的第2位)也可用該位所特有的名稱來(lái)尋址:MOV PSW.6, C; 把C中的內(nèi)容送PSW.6(通用標(biāo)志F0)MOV 0D0H.6, C; 把C中的內(nèi)容送PSW.6(通用
21、標(biāo)志F0)MOV F0, C; 把C中的內(nèi)容送PSW.6(通用標(biāo)志F0)都是把C中的數(shù)據(jù)送到PSW.6(通用標(biāo)志F0)。2. 片內(nèi)RAM高128字節(jié)是IDATA,地址從80HFFH,與特殊寄存器(SFR)的地址完全重疊,對(duì)他們的訪問(wèn)完全由尋址方式來(lái)區(qū)別(在上一小節(jié)介紹IDATA已舉例說(shuō)明)。IDATA采用Ri(i0,1)來(lái)間址,而SFR既可用其名稱來(lái)尋址,也可用其地址作為立即地址來(lái)尋址。3. 片內(nèi)RAM低128字節(jié)(DATA)實(shí)際上也是IDATA,其地址從00H7FH。但這些存儲(chǔ)器單元既可以立即地址尋址,也能用Ri間接尋址。而處于該區(qū)域的工作寄存器還可作為寄存器尋址。表中有唯一的一條16位數(shù)傳
22、送指令:MOV DPTR,#datal6。該指令用于對(duì)數(shù)據(jù)指針DPTR賦值。4. 立即數(shù)和XCODE只能作為源操作數(shù)(即數(shù)據(jù)源地址)。5. XCODE只能作為源操作數(shù)向累加器A傳送數(shù)據(jù),有兩條指令:MOVC A,A+DPTR; 把A和DPTR的和所指向的XCODE單元中的數(shù)讀到AMOVC A,A+PC; 把A和PC(程序計(jì)數(shù)器)的和所指向的XCODE; 單元中的數(shù)讀到A注意指令中采用“MOVC”作為助記符,說(shuō)明是從程序存儲(chǔ)器(CODE)中讀取數(shù)據(jù)。而從XDATA中讀取數(shù)據(jù)的指令為:MOVX A,DPTR ; 把DPTR所指向的XDATA單元中的數(shù)讀到AMOVX A,Ri; 把P2(高8位地址)
23、和Ri(低8位地址)所指向的; XDATA單元中的數(shù)讀到A指令中采用“MOVX”作為助記符,說(shuō)明是從外部數(shù)據(jù)存儲(chǔ)器(XDATA)中讀取數(shù)據(jù)。同樣,寫到XDATA的指令為MOVX DPTR,A ; 把A中的數(shù)寫到DPTR所指向的XDATA單元MOVX Ri,A; 把A中的數(shù)寫到P2(高8位地址)和Ri(低8位地址)所指; 向的XDATA單元只有XDATA只能與累加器互相傳送數(shù)據(jù)。6. 立即數(shù)、立即地址和累加器(ACC)作為數(shù)據(jù)源地址,是“O型供血者”,他們有最多的接收數(shù)據(jù)的目的地。而外部數(shù)據(jù)存儲(chǔ)器(XDATA)最“內(nèi)向”,它只與ACC互傳數(shù)據(jù)。7. ACC又是最大的數(shù)據(jù)接收者,這就意味著ACC處
24、于單片機(jī)核心部位,編程是用得最多的地方。8. 除ACC外,工作寄存器是交換數(shù)據(jù)最為方便、最為頻繁的存儲(chǔ)器。它們具有的尋址方式最多:MOV R6, #0FH; 寫入立即數(shù)#0FH到R6(06H單元)與MOV 06H, #0FH; 寫入立即數(shù)#0FH到R6(06H單元)與MOV R0, #06H; 寫入立即數(shù)#06H到R0MOV R0, #0FH; 寫入立即數(shù)#0FH到R0所指向的單元(06H)都是把數(shù)據(jù)寫到06H單元。3.3 數(shù)據(jù)傳送指令說(shuō)明1. 寄存器內(nèi)容送累加器格式:MOV A,Rn11101rrrE8HEFH代碼:操作:(A)(Rn),n=07說(shuō)明:Rn在內(nèi)部數(shù)據(jù)存貯器中的地址由當(dāng)前的工作
25、寄存器區(qū)選擇位RS1、RS0確定,可以是00H07H、08H0FH、1017或18H1FH。以后指令中對(duì)Rn不再重復(fù)說(shuō)明。2. 累加器內(nèi)容送寄存器格式:MOV Rn,A11101rrrF8HFFH代碼:操作:(Rn)(A), n=07說(shuō)明:目的操作數(shù)采用寄存器尋址方式。3. 內(nèi)部RAM內(nèi)容送累加器格式:MOV A, Ri1110011rF6HE7H代碼: 操作:(A)(Ri), i=0,1說(shuō)明:Ri在內(nèi)部數(shù)據(jù)存貯器中的地址由當(dāng)前工作寄存器區(qū)選擇位RS1、RS0確定,分別為01H,02H,08H,09H,10H,11H和18H,19H。以后的指令中對(duì)Ri不再重復(fù)解釋。該指令可以訪問(wèn)整個(gè)內(nèi)部RAM
26、空間(0255單元)。4. 累加器內(nèi)容送內(nèi)部RAM格式:MOV Ri ,A1111011i代碼:F6HE7H 操作: (Ri)(A), i=0,15. 立即數(shù)送累加器01110100格式:MOV A,data代碼:74H 立即數(shù)操作:(A)data說(shuō)明:代碼的第二字節(jié)為立即數(shù),它與指令的操作碼一起放在程序存貯器中,執(zhí)行該指令時(shí),與操作碼一起取到CPU中。6. 內(nèi)部RAM或?qū)S眉拇嫫鲀?nèi)容送累加器11100101格式:MOV A,direct代碼:E5H 直接地址操作:(A)(direct)說(shuō)明:代碼的第二字節(jié)為直接地址,可以指向?qū)S眉拇嫫骷皟?nèi)部RAM(0127單元)。它與指令一起放在程序存貯器中
27、,執(zhí)行該指令時(shí),與操作碼一起取到CPU,經(jīng)地址譯碼訪問(wèn)指定單元。以后指令中對(duì)直接地址direct不再作解釋。. 累加器內(nèi)容送內(nèi)部RAM或?qū)S眉拇嫫鞲袷剑篗OV direct,A11110101代碼:F5H 直接地址操作:(direct)(A)8. 立即數(shù)送寄存器格式:MOV Rn, #data01111rrr代碼:78H7FH立即數(shù)操作:(Rn) # data,n=079. 立即數(shù)送內(nèi)部格式:MOV Ri, # data1110011i代碼: 76H77H立即數(shù)操作:(Ri) # data,i=0,110. 立即數(shù)送內(nèi)部RAM或?qū)S眉拇嫫鞲袷剑篗OV direct,#data11100101代
28、碼: 75H直接地址立即數(shù)操作:(direct) # data說(shuō)明:這是一條3字節(jié)指令,代碼的第二字節(jié)為直接地址,第3字節(jié)為立即數(shù),在執(zhí)行該指令時(shí),它們與指令的操作碼一起從程序存貯器取入CPU。11. 寄存器內(nèi)容送內(nèi)部RAM或?qū)S眉拇嫫鞲袷剑篗OV direct,Rn10001rrr代碼: 88H8FH直接地址操作:(direct)(Rn),n=0712. 內(nèi)部RAM或?qū)S眉拇嫫鲀?nèi)容送寄存器10101rrr格式:MOV:Rn, direct代碼: A8HAFH直接地址操作:(Rn)(direct),n=0713. 內(nèi)部RAM內(nèi)容送內(nèi)部RAM或?qū)S眉拇嫫?000011i格式:MOV direct
29、, Rn代碼: 86H87H 直接地址操作:(direct)(Rn),i=0,114. 內(nèi)部RAM或?qū)S眉拇嫫鲀?nèi)容送內(nèi)部RAM格式:MOV Ri, direct直接地址1000011i代碼: A6HA7H操作:(Ri)(direct),i=0,115. 內(nèi)部RAM和專用寄存器之間的直接傳送格式:MOV direct, direct直接地址(源)10000101代碼: 85H直接地址(目的)操作:(direct)(direct),n=07說(shuō)明:這是一條3字節(jié)指令,代碼的第二、三字節(jié)分別為源操作數(shù)和目的絕對(duì)地址。指令的功能很強(qiáng),它能實(shí)現(xiàn)內(nèi)部RAM之間、專用寄存器之間或?qū)S眉拇嫫髋c內(nèi)部RAM之間的直
30、接數(shù)據(jù)傳送。而執(zhí)行時(shí)間為2個(gè)機(jī)器周期。16. 16位立即數(shù)送數(shù)據(jù)指針格式:MOV DPTR, data16立即數(shù)高位10010000代碼: 90H立即數(shù)低位操作:(DPH)data 15 data 8(DPH)data 7 data 0說(shuō)明:這是整個(gè)指令系統(tǒng)中唯一的一條16位數(shù)據(jù)的傳送指令,用來(lái)設(shè)置地址指針。17. 外部數(shù)據(jù)存貯器內(nèi)容送累加器1110011i格式:MOVX A, Ri代碼: E2HE3H操作:(A)(Ri),i=0,1說(shuō)明:指令執(zhí)行時(shí),在P3.7引腳上出現(xiàn)有效信號(hào),用作外部數(shù)據(jù)存貯器的讀選通信號(hào)。P0口上分時(shí)輸出由Ri指定的8位地址信息及輸入該單元的內(nèi)容。18. 累加器內(nèi)容送外
31、部數(shù)據(jù)存貯器格式:MOVX Ri ,A1111001i代碼: F2HF3H操作:(Ri)(A),i=0,1說(shuō)明:指令執(zhí)行時(shí),在P3.6引腳上出現(xiàn)有效信號(hào),用作外部數(shù)據(jù)存貯器的寫選通信號(hào)。P0口上分時(shí)輸出由Ri指定的8位地址信息及輸出到該單元的數(shù)據(jù)。以上兩條與外部數(shù)據(jù)存貯器傳送數(shù)據(jù)的指令可以訪問(wèn)256字節(jié)的存貯空間。19. 累加器內(nèi)容送外部數(shù)據(jù)存貯器格式:MOVX DPTR, A11110000代碼: F0H操作:(DPTR)(A)說(shuō)明:指令執(zhí)行時(shí),P3.6經(jīng)腳上輸出有效信號(hào),用作外部數(shù)據(jù)存貯器的寫選通信號(hào)。DPTR所包含的16位地址信息由P0(低8位)和P2(高8位)輸出,累加器的內(nèi)容由P0輸
32、出,P0口作分時(shí)復(fù)用的總線。20. 外部數(shù)據(jù)存貯器內(nèi)容送累加器格式:MOVX A , DPTR 11100000代碼: E0H說(shuō)明:指令執(zhí)行時(shí),P3.7引腳上輸出有效信號(hào),有作外部數(shù)據(jù)存貯器的讀選通信號(hào)。DPTR所包含的16位地址信息由P0(低8位)和(高8位)輸出,選中單元的數(shù)據(jù)由P0輸入到累加器,P0口作分時(shí)復(fù)用的總線。以上兩條與外部數(shù)據(jù)存貯器間的數(shù)據(jù)傳送指令可以訪問(wèn)64KB字節(jié)的存貯空間。21. 數(shù)據(jù)存貯器內(nèi)容送累加器10010011格式:MOVC A,ADPT代碼: 93H 說(shuō)明:指令首先執(zhí)行16位無(wú)符號(hào)數(shù)的加法操作,獲得基址與變址之和,低8位相加產(chǎn)生進(jìn)位時(shí),直接加到高位,并不影響標(biāo)志
33、。22. 程序存貯器內(nèi)容送累加器格式:MOVC A,APC10000011代碼: 83H 說(shuō)明:指令首先將PC修正到下一條指令的地址上,然后執(zhí)行16位無(wú)符號(hào)數(shù)的加法操作,獲得基址與變址之和,低8位相加產(chǎn)生進(jìn)位時(shí),直接加到高位,并不影響標(biāo)志。以上兩條MOVC是64KB存貯空間內(nèi)的查表指令,實(shí)現(xiàn)程序存貯器到累加器的代碼或常數(shù)傳送,每次傳送一個(gè)字節(jié)。源操作數(shù)采用基址加變址尋址方法,基址寄存器分別為16位的DPTR或程序計(jì)數(shù)器PC,變址寄存器為累加器。23. 寄存器內(nèi)容與累加器內(nèi)容交換11001rrr格式:XCH A,Rn代碼: C8HCFH操作:(A) (Rn),n=0724. 內(nèi)部RAM內(nèi)容與累加
34、器內(nèi)容交換1100011i格式:XCH A,Ri代碼: C6HC7H操作:(A) (Ri), i=0,125. 內(nèi)部RAM或?qū)S眉拇嫫鲀?nèi)容與累加器內(nèi)容交換11000101格式:XCH A,direct代碼: C5H直接地址操作:(A) (direct) 26. 內(nèi)部RAM低4位內(nèi)容與累加器低4位內(nèi)容交換格式:XCHD A,Ri1101011i代碼: C6HD7H操作:(A30) (Ri30),i=0,1 27. 累加器低4位與高4位交換11000100格式:SWAP A代碼: C4H操作:(A30) (A74) 28. 棧頂內(nèi)容送內(nèi)部RAM或?qū)S眉拇嫫鞲袷剑篜OP direct直接地址1101
35、0000代碼: D0H 操作:(direct) (SP) (SP) (SP)1說(shuō)明:POP為堆棧操作指令,由棧針SP所尋址的內(nèi)部RAM單元的內(nèi)容傳送到指令中直接尋址的一個(gè)單元中去。然后,棧針減1。一般而言,執(zhí)行此指令不影響標(biāo)志,若目標(biāo)操作數(shù)為PSW,則有可能使一些標(biāo)志改變。這也是通過(guò)指令強(qiáng)行修改標(biāo)志的一種方法。29. 內(nèi)部RAM或?qū)S眉拇嫫鲀?nèi)容送棧頂11000000格式:PUSH direct代碼: C0H直接地址操作:(SP) (SP)1 (SP) direct說(shuō)明:PUSH也是堆棧操作指令,它把指令中直接尋址的一個(gè)字節(jié)壓入到當(dāng)前棧針加1的單元中去。指令不影響標(biāo)志。3.4 若干數(shù)據(jù)傳送實(shí)驗(yàn)下
36、面通過(guò)幾個(gè)數(shù)據(jù)傳送實(shí)驗(yàn)來(lái)熟悉和掌握數(shù)據(jù)傳送指令及其應(yīng)用。實(shí)驗(yàn)3-1:外部數(shù)據(jù)塊搬移(256字節(jié))把處于程序存儲(chǔ)器(XCODE)中從Data_TAB開始的256個(gè)字節(jié)數(shù)據(jù)傳送到外部數(shù)據(jù)存儲(chǔ)器從B000H開始的256個(gè)單元中去。ORG 8000H; 實(shí)驗(yàn)板開始執(zhí)行的第一條指令所處的地址LJMP MAIN; 跳轉(zhuǎn)到主程序ORG 8030H; 主程序開始的地址;避開中斷入口地址MAIN:MOV DPTR, #Data_TAB; 使DPTR指向XCODE中的Data_TAB開始的256個(gè)字節(jié)數(shù)據(jù)MOV P2, #0B0H; 使P2口指向XDATA中的目的地址高8位MOV R0, #00H; 使R0口指向
37、XDATA中的目的地址低8位起始地址MOVEDATA:MOV A, #00H; 清除累加器,以便下一條指令能準(zhǔn)確指向XCODE中的數(shù)據(jù)MOVC A, A+DPTR; 從XCODE中讀取數(shù)據(jù),請(qǐng)注意指令形式MOVX R0, A; 把數(shù)據(jù)寫到XDATA中INC DPTR; 修改源數(shù)據(jù)指針I(yè)NC R0; 修改目的數(shù)據(jù)指針CJNE R0, #00H, MOVEDATA; 沒(méi)有送完256個(gè)數(shù)據(jù),跳轉(zhuǎn)到MOVEDATA繼續(xù)送數(shù)HALT:LJMP HALT; 送完256個(gè)數(shù)據(jù),在此死循環(huán),實(shí)際程序中應(yīng)為后續(xù)操作;+以下為XCODE中的數(shù)據(jù)表+; 用以分隔程序,使程序清晰易懂Data_TAB: ; 常數(shù)或數(shù)據(jù)
38、表格前用標(biāo)號(hào)表示其起始地址DB 0, 1, 2, 3, 4, 5, 6, 7; 立即數(shù)可以用十進(jìn)制數(shù)表示,也可以用十六進(jìn)制數(shù)表示, 后者有后綴“H”DB 8, 9, 0AH, 0BH, 0CH, 0DH, 0EH, 0FH; 十六進(jìn)制數(shù)中最高位數(shù)為AF時(shí),前面要補(bǔ)數(shù)字“0”DB 10H, 11H, 12H, 13H, 14H, 15H, 16H, 17H; 十六進(jìn)制數(shù)中最高位數(shù)為AF時(shí),前面要補(bǔ)數(shù)字“0”DB 18H, 19H, 1AH, 1BH, 1CH, 1DH, 1EH, 1FH; 每行起始用偽指令“DB”定義數(shù)據(jù),“DB”表示數(shù)據(jù)字節(jié)DB 0F8H, 0F9H, 0FAH, 0FBH,
39、 0FCH, 0FDH, 0FEH, 0FFH; 每個(gè)數(shù)據(jù)字節(jié)之間用英文逗號(hào)分隔;+ +表格結(jié)束+; 用以分隔程序,使程序清晰易懂END; 程序結(jié)束,編譯程序不理會(huì)END以后的內(nèi)容該實(shí)驗(yàn)的目的是重溫開發(fā)環(huán)境的使用、匯編程序的格式和熟悉、掌握XCODE、XDATA和累加器之間轉(zhuǎn)送數(shù)據(jù)指令。實(shí)驗(yàn)3-2:外部數(shù)據(jù)塊搬移(65280>數(shù)據(jù)字節(jié)數(shù)>256)把處于外部數(shù)據(jù)存儲(chǔ)器從Data_BLOCK開始的NUMB(65280>NUMB>256)個(gè)字節(jié)數(shù)據(jù)傳送到串口數(shù)據(jù)緩沖器(SBUF)中去。ORG 8000H; 實(shí)驗(yàn)板開始執(zhí)行的第一條指令所處的地址LJMP MAIN; 跳轉(zhuǎn)到主程序
40、ORG 8030H; 主程序開始的地址;避開中斷入口地址MAIN:MOV DPTR, #Data_BLOCK; 使DPTR指向XDATA中的Data_BLOCK開始數(shù)據(jù)塊MOV R0, #NUMB_LOW; #NUMB_LOW為#NUMB的低位字節(jié)放到作為低位字節(jié)計(jì)數(shù)器的R0中MOV R1, #NUMB_HIGH+1; #NUMB_HIGH為#NUMB的高位字節(jié)加1放到作為高位字節(jié)計(jì)數(shù)器的R1中MOVEDATA:MOVX A, DPTR; 從XDATA中讀取數(shù)據(jù),請(qǐng)注意指令形式MOV SBUF, A; 把數(shù)據(jù)寫到SBUF中INC DPTR; 修改源數(shù)據(jù)指針DJNZ R0, MOVEDATA;
41、沒(méi)有送完NUMB個(gè)數(shù)據(jù),跳轉(zhuǎn)到MOVEDATA繼續(xù)送數(shù)DJNZ R1, MOVEDATA; HALT:LJMP HALT; 送完NUMB個(gè)數(shù)據(jù),在此死循環(huán),實(shí)際程序中應(yīng)為后續(xù)操作;=; 用以分隔程序,使程序清晰易懂END; 程序結(jié)束,編譯程序不理會(huì)END以后的內(nèi)容請(qǐng)自行給定地址(Data_BLOCK)和數(shù)據(jù)字節(jié)數(shù)(NUMB)并完成該實(shí)驗(yàn)。注意充分利用集成開發(fā)環(huán)境中的各項(xiàng)工具和窗口觀察每條指令運(yùn)行的結(jié)果。注意:實(shí)驗(yàn)板中Data_BLOCK地址應(yīng)該在B000H以上,8000HAFFFH和FFF0HFFFFH的部分?jǐn)?shù)據(jù)存儲(chǔ)器被實(shí)驗(yàn)版的監(jiān)控程序和用戶程序占用。實(shí)驗(yàn)3-3:外部數(shù)據(jù)塊搬移(65536&g
42、t;數(shù)據(jù)字節(jié)數(shù)>1)把處于外部數(shù)據(jù)存儲(chǔ)器(XDATA)中從Data_TAB1開始的NUMB個(gè)字節(jié)數(shù)據(jù)傳送到外部數(shù)據(jù)存儲(chǔ)器從Data_TAB2開始的NUMB個(gè)單元中去。ORG 8000H; 實(shí)驗(yàn)板開始執(zhí)行的第一條指令所處的地址LJMP MAIN; 跳轉(zhuǎn)到主程序ORG 8030H; 主程序開始的地址;避開中斷入口地址MAIN:MOV DPTR, # Data_TAB1; 使DPTR指向XDATA中的Data_TAB1開始的數(shù)據(jù)塊MOV R0, # Data_TAB2_LOW; # Data_TAB2的低位字節(jié)放到R0中MOV P2, # Data_TAB2_HIGH; # Data_TAB2
43、的高位字節(jié)放到P2中MOV R2, #0; R2作為送數(shù)個(gè)數(shù)計(jì)數(shù)器的低位字節(jié)計(jì)數(shù)器MOV R3, #0; R3作為送數(shù)個(gè)數(shù)計(jì)數(shù)器的高位字節(jié)計(jì)數(shù)器MOVEDATA:MOVX A, DPTR; 從XDATA中的Data_TAB1開始的數(shù)據(jù)塊讀取數(shù)據(jù)MOVX R0, A; 把數(shù)據(jù)寫到XDATA中的Data_TAB2開始的數(shù)據(jù)塊中INC DPTR; 修改源地址指針I(yè)NC R0; 修改目的地址指針低位字節(jié)CJNE R0, #0, MOVEDATA1; 目的地址指針低位字節(jié)是否有進(jìn)位INC P2; 目的地址指針低位字節(jié)有進(jìn)位,高位字節(jié)加1MOVEDATA1:INC R2; 修改已傳送數(shù)據(jù)個(gè)數(shù)計(jì)數(shù)指針低位字
44、節(jié)CJNE R2, #0, MOVEDATA2; 已傳送數(shù)據(jù)個(gè)數(shù)計(jì)數(shù)指針低位字節(jié)是否有進(jìn)位INC P3; 已傳送數(shù)據(jù)個(gè)數(shù)計(jì)數(shù)指針低位字節(jié)有進(jìn)位,高位字節(jié)加1MOVEDATA2:CJNE R2, #NUMB_LOW, MOVEDATA; 比較已傳送數(shù)據(jù)個(gè)數(shù)計(jì)數(shù)指針低位字節(jié),不等則繼續(xù)送數(shù)CJNE R3, #NUMB_HIGH, MOVEDATA; 低位字節(jié)相等,比較高位字節(jié),不等則繼續(xù)送數(shù)HALT:LJMP HALT; 送完數(shù)據(jù)塊搬移,在此死循環(huán),實(shí)際程序中應(yīng)為后續(xù)操作;=; 用以分隔程序,使程序清晰易懂END; 程序結(jié)束,編譯程序不理會(huì)END以后的內(nèi)容注意:實(shí)驗(yàn)板中Data_TAB2地址應(yīng)該在
45、B000H以上,8000HAFFFH和FFF0HFFFFH的部分?jǐn)?shù)據(jù)存儲(chǔ)器被實(shí)驗(yàn)版的監(jiān)控程序和用戶程序占用。實(shí)驗(yàn)3-4:清除外部數(shù)據(jù)存儲(chǔ)器(0000H7FFFH)清除外部數(shù)據(jù)存儲(chǔ)器(XDATA)中從9000H到FEFFH的所有單元。ORG 8000H; 實(shí)驗(yàn)板開始執(zhí)行的第一條指令所處的地址LJMP MAIN; 跳轉(zhuǎn)到主程序ORG 8030H; 主程序開始的地址;避開中斷入口地址MAIN:MOV DPTR, #9000H; 使DPTR指向XDATA中的起始地址9000HMOV A, #0; 清除累加器CLR_RAM:MOVX DPTR, A; 清除DPTR所指向的XDATA單元(即寫入數(shù)據(jù)00H
46、)INC DPTR; 修改地址指針MOV R0, DPH; 把地址指針的高位字節(jié)送到R0中進(jìn)行判斷CJNE R0, #0FFH, CLR_RAM; 完成清除XDATA?HALT:LJMP HALT; 完成清除XDATA,在此死循環(huán),實(shí)際程序中應(yīng)為后續(xù)操作;=; 用以分隔程序,使程序清晰易懂END; 程序結(jié)束,編譯程序不理會(huì)END以后的內(nèi)容實(shí)驗(yàn)3-5:清除片內(nèi)數(shù)據(jù)存儲(chǔ)器(DATA+IDATA)清除片內(nèi)數(shù)據(jù)存儲(chǔ)器(DATA+IDATA),即片內(nèi)從00H至FFH所有單元。(由于實(shí)驗(yàn)板的監(jiān)控程序暫用了IDATA中高十幾個(gè)字節(jié)的地址,直接在實(shí)驗(yàn)板上調(diào)試該實(shí)驗(yàn)程序會(huì)導(dǎo)致死機(jī),請(qǐng)采用軟件調(diào)試方式做該實(shí)驗(yàn)。)ORG 8000H; 實(shí)驗(yàn)板開始執(zhí)行的第一條指令所處的地址LJMP MAIN; 跳轉(zhuǎn)到主程序ORG 8030H; 主程序開始的地址;
溫馨提示
- 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ù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
- 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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025版航空航天器零部件制造與維修合同3篇
- 超市節(jié)假日促銷活動(dòng)策劃與實(shí)施考核試卷
- 汽車尾燈課程設(shè)計(jì)論文
- 酒類銷售渠道拓展與電商運(yùn)營(yíng)考核試卷
- 二零二五年養(yǎng)殖保險(xiǎn)合作框架協(xié)議書3篇
- 2025年度白酒企業(yè)社會(huì)責(zé)任報(bào)告編制與發(fā)布合同2篇
- 二零二五年保健品線上商城入駐及銷售合同2篇
- 2025版國(guó)際會(huì)展中心開業(yè)慶典展覽展示服務(wù)合同2篇
- 2025版食堂承包經(jīng)營(yíng)服務(wù)合同范本3篇
- 二零二五年度中介服務(wù)二手住宅交易合同6篇
- 模擬電子技術(shù)課件(完整版)
- 注塑領(lǐng)班作業(yè)指導(dǎo)書
- 廣東省異地就醫(yī)備案登記表
- 光纜布線工程施工組織設(shè)計(jì)方案
- 食堂日??己嗽u(píng)分表(后勤)
- 高頻淬火設(shè)備安全操作規(guī)程
- 閘閥的操作力矩參考表
- 環(huán)氧樹脂參考配方大全
- 花木綠化養(yǎng)護(hù)考核評(píng)分表
- #2鍋爐爐膛內(nèi)腳手架搭設(shè)及拆除施工方案
- 110KV變電站工程創(chuàng)優(yōu)監(jiān)理實(shí)施細(xì)則
評(píng)論
0/150
提交評(píng)論