計(jì)算機(jī)接口技術(shù)課件 第三章 MCS-51單片機(jī)匯編語(yǔ)言與程序設(shè)計(jì)基礎(chǔ)_第1頁(yè)
計(jì)算機(jī)接口技術(shù)課件 第三章 MCS-51單片機(jī)匯編語(yǔ)言與程序設(shè)計(jì)基礎(chǔ)_第2頁(yè)
計(jì)算機(jī)接口技術(shù)課件 第三章 MCS-51單片機(jī)匯編語(yǔ)言與程序設(shè)計(jì)基礎(chǔ)_第3頁(yè)
計(jì)算機(jī)接口技術(shù)課件 第三章 MCS-51單片機(jī)匯編語(yǔ)言與程序設(shè)計(jì)基礎(chǔ)_第4頁(yè)
計(jì)算機(jī)接口技術(shù)課件 第三章 MCS-51單片機(jī)匯編語(yǔ)言與程序設(shè)計(jì)基礎(chǔ)_第5頁(yè)
已閱讀5頁(yè),還剩25頁(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)介

1、第三章匯編語(yǔ)言和計(jì)算機(jī)編程基礎(chǔ),3-1匯編程序協(xié)議,3-2醫(yī)生命令,3-3順序節(jié)目,3-4季度節(jié)目,3-5周期節(jié)目,3-6位操作節(jié)目,3-7子程序,匯編程序:編寫匯編程序,編寫匯編程序,從匯編語(yǔ)言程序到機(jī)器語(yǔ)言程序的轉(zhuǎn)換過(guò)程稱為程序集。1.手動(dòng)剪輯:手動(dòng)檢查命令列表剪輯。用于設(shè)計(jì)短程序或調(diào)試器的地方。機(jī)械組件:使用組裝器組裝。3-1匯編程序的承諾,源程序應(yīng)考慮使用機(jī)器匯編匯編匯編程序的承諾。1)根據(jù)命令格式和語(yǔ)法規(guī)則編寫程序。常數(shù)的表示法:十進(jìn)制數(shù):20十六進(jìn)制數(shù):87h,0f0h二進(jìn)制數(shù):01011001B字符:h字符串:“Hello”。2)使用宏命令提供程序集信息。編譯的主要任務(wù):1)確定

2、與程序中的每個(gè)匯編語(yǔ)言命令相對(duì)應(yīng)的機(jī)器代碼。2)確定每個(gè)命令存儲(chǔ)在內(nèi)存中的地址。3)提供錯(cuò)誤信息。4)目標(biāo)可執(zhí)行文件(* .OBJ/* .HEX)和列表檔案(* .LST)。I .匯編語(yǔ)言命令類型1。機(jī)械命令:命令系統(tǒng)中的所有命令,每個(gè)命令都有相應(yīng)的機(jī)械代碼。2.醫(yī)生命令:僅提供組件控制命令、組件信息,沒有命令代碼。常用醫(yī)生指令及其功能:1。ORG起始地址指令:指示節(jié)目和塊起始地址。命令地址機(jī)器代碼源org2000h 2000h 78 30main 3360mov r0,# 30h 2002h E6 mov a,r0(手動(dòng)裝配上述三個(gè)程序)org 3000h 3000h 23db 23h,10

3、0,a 3001 h 100 30示例EQU等價(jià)物。為標(biāo)簽或標(biāo)識(shí)符指定值。x1 equ 2000 hx 2 equ 0fh main : mov dptr,# x1,5。退出end組件命令。示例:START: END,3。DW定義雙字節(jié)常量命令。例如:DW 1234H、5678H、7。BIT位定義。示例:BNAM BIT 30H,6。DS定義了存儲(chǔ)區(qū)域的大小。示例:ORG 0350H DS 3保留了3個(gè)單元0350H、0351H和0352H。3-2匯編語(yǔ)言計(jì)算機(jī)編程步驟1。確定方案和計(jì)算方法2。了解應(yīng)用程序系統(tǒng)的硬件配置、性能指標(biāo)三、構(gòu)建系統(tǒng)數(shù)學(xué)模型、確定控制算法和程序。4.節(jié)目流程圖表示節(jié)目

4、結(jié)構(gòu)和節(jié)目功能,5 .準(zhǔn)備源節(jié)目1。合理分配內(nèi)存設(shè)備并了解I/o介面地址。按照功能設(shè)計(jì)程序明確節(jié)目之間的相互關(guān)系。3.用注釋行描述程序,便于閱讀、修改和調(diào)試。公共節(jié)目結(jié)構(gòu):直線節(jié)目、分支節(jié)目、循環(huán)節(jié)目、子節(jié)目、3-3直線節(jié)目直線節(jié)目、簡(jiǎn)單程序,節(jié)目方向只有一條路徑。示例1:必須將存儲(chǔ)在RAM20H單元格中的變量分別設(shè)置為0H、01H、02H、03H、04H、05H,編譯代碼表程序,找到變量的平方值,然后將其放在切片內(nèi)的RAM21H單元格中。驗(yàn)票程序的關(guān)鍵是把表格的數(shù)據(jù)放在你能表達(dá)的位置。節(jié)目代碼:org1000h start 3360 mov dptr、# 2000h mov a、20h mo

5、vc a、dptr a mov P1.1、a sjmp $ org 2000h table 3360 db00,分析:使用計(jì)時(shí)器生成方波,將計(jì)時(shí)器設(shè)置為工作方式3,將寄存器T0計(jì)時(shí)100us,T1計(jì)時(shí)200us按時(shí)到達(dá)中斷發(fā)生,中斷服務(wù)程序分別反轉(zhuǎn)P1.0和P1.1針腳。設(shè)定計(jì)時(shí)器字典:微控制器決定振動(dòng)頻率為12MHz,計(jì)時(shí)器計(jì)時(shí)頻率為1MHz,機(jī)器周期為1us。T0是100us,因此寄存器T0需要計(jì)算100次,字典設(shè)置為64H 1=9CH。T1為200us,因此寄存器T1必須計(jì)算200次,字典設(shè)置的值為C8H 1=38H。計(jì)時(shí)器T0,T1設(shè)置工作方式:T0使用工作方式3,因此TMOD寄存器值

6、設(shè)置為#22H。計(jì)時(shí)器T0,T1控制設(shè)置:T0,T1打開TCON寄存器值必須設(shè)置為#50H。,ORG0002H MOV SP,# 40H堆棧指針MOV TMOD,# 22HT0和T1的工作方式為2 MOV TL0,#9CH。確定T0的時(shí)間常數(shù)MOV TL1,#38H。確定T1的時(shí)間常數(shù)MOV TCON,#50H。T0和T1啟動(dòng),計(jì)時(shí)移動(dòng)啟動(dòng),# 8ah允許T0、T1的中斷ORG000BHT0的中斷入口地址IT0: MOVTL0,# 9CH獲取時(shí)間常數(shù)CPLP1.0重置P1.0反奇偶性;中斷返回ORG001BHT1的中斷入口地址IT1: MOVTL1,# 38H獲取時(shí)間常數(shù)CPLP1.1重置P1

7、.1反奇偶性;中斷返回END,3-4分支程序用條件傳輸命令構(gòu)造節(jié)目判斷框部分,形成程序分支結(jié)構(gòu)。示例:變量X作為補(bǔ)充編號(hào)存儲(chǔ)在切片內(nèi)的RAM30H單元格中。函數(shù)Y和X具有以下關(guān)系(牙齒問(wèn)題的核心是標(biāo)識(shí)X的模態(tài)),Y,X,x0,#20H,x=0,X 5,x0,試點(diǎn)節(jié)目,80H=1000 0000,節(jié)目代碼:org例如:清除結(jié)果單元、設(shè)置指針、設(shè)置循環(huán)控制變量的初始值等,循環(huán)循環(huán)操作的一部分:需要多次重復(fù)的操作?;芈房刂撇糠郑?。修改指針或循環(huán)控制變量。2.偵測(cè)回圈條件:符合回圈條件,回圈繼續(xù),否則回圈結(jié)束Iii。結(jié)束部分處理并保存循環(huán)結(jié)果。允許零循環(huán)的循環(huán)結(jié)構(gòu):在循環(huán)操作之前檢測(cè)循環(huán)條件。3-5

8、-2單回路簡(jiǎn)單回路結(jié)構(gòu):回路本體沒有回路。示例:獲取N個(gè)單字節(jié)數(shù)據(jù)的累積,將數(shù)據(jù)字符串的起始單元設(shè)置為43H,數(shù)據(jù)字符串的長(zhǎng)度為42H個(gè)單元,將2字節(jié)(SUMH,SUML)相加且不超過(guò)。sum : mov r0,# 42h設(shè)置指針MOVA、R0 MOVR2、A。循環(huán)柜臺(tái)n CLRA結(jié)果單元0 MOVR3,A將父存儲(chǔ)單元R3整理為0 ADD1:INCR0。指針ADDA,R0修改累積JNC NEXT舍入處理:如果沒有舍入,則定位至INCR3。舍入,高字節(jié)1 NEXT:DJNZ R2,ADD1循環(huán)控制:是否添加了數(shù)據(jù)?MOV40H,A;退出循環(huán)、保存結(jié)果MOV41H、R3 RET、循環(huán)控制方法:控制

9、計(jì)數(shù)、控制特征標(biāo)志、I .控制計(jì)數(shù):設(shè)置循環(huán)計(jì)數(shù)器以控制循環(huán)數(shù)。正數(shù)和倒數(shù)兩種茄子方法。每個(gè)正計(jì)數(shù)回路加1(k)INC,每個(gè)回路減1(k)DJNZ,2 .特征控制:設(shè)置循環(huán)結(jié)束標(biāo)志以實(shí)現(xiàn)循環(huán)控制。CJNE方法,例如,尋找正數(shù)表格最小值。正數(shù)表使用LIST作為切片外部RAM中的起始單元格,使用-1作為結(jié)束標(biāo)志。START: MOVDPTR,# LIST數(shù)表第一個(gè)地址MOVB,# 127H字典設(shè)置最大值NEXT: MOVX A,DPTR取數(shù)字INCDPTR。修改指針CJNE A、#-1、NEXT1。是桌子的盡頭嗎?SJMP DONE環(huán)路結(jié)束NEXT1: CJNE A、B、NEXT2比較NEXT2:

10、JNCNEXT:不顯示指示A大于或等于B MOVB、A的借用標(biāo)記。儲(chǔ)存小值SJMP NEXT DONE: SJMP DONE。練習(xí)題:將一班的考試統(tǒng)計(jì)為100分和不及格的人數(shù),成績(jī)單在41H開始單位。1班的人員在40H,說(shuō)明現(xiàn)在A不需要保存,3-5-3多個(gè)循環(huán)體中不需要設(shè)置循環(huán)結(jié)構(gòu)。多用雙重循環(huán)。示例:按升序?qū)?nèi)存單字節(jié)無(wú)符號(hào)數(shù)字進(jìn)行排序。步驟:一次比較相鄰單元的兩個(gè)數(shù)字,以確定是否需要交換數(shù)據(jù)位置。第一個(gè)循環(huán),N-1次比較,作為數(shù)據(jù)表中的最大值導(dǎo)入。第二個(gè)循環(huán),N-2次比較,第二個(gè)大值。N-1循環(huán):比較一次,排序結(jié)束。SORT: MOV A,# n-1;n個(gè)數(shù)據(jù)排序MOV R4,a;外回路數(shù)

11、LOOP1: MOV A、R4 MOV R3、A;內(nèi)部周期數(shù)MOV R0,# tab數(shù)據(jù)指針loop2設(shè)置:mov a、r0;二進(jìn)制數(shù)MOV B、A INC R0 MOV A、R0 CJNE A、B、L1;比較L1:JNC UNEX;AB,DECR0更換渡邊杏否則數(shù)據(jù)XCH A,R0 INC R0 MOV R0,A UNEX: DJNZ R3,LOOP2;內(nèi)部回路結(jié)束?DJNZ R4,環(huán)路1;外部循環(huán)結(jié)束了嗎?RET,軟件延遲節(jié)目。使用循環(huán)程序多次重復(fù)命令以實(shí)現(xiàn)軟件延遲。,計(jì)算延遲節(jié)目運(yùn)行時(shí)間。源節(jié)目命令周期(M)命令執(zhí)行次數(shù),delay : movr6,# 64 h1 I 1: movr7,

12、# 0f FH 1 I 2: djnz r7,i22 djnz R6,i12 ret2,延遲計(jì)算:在調(diào)用子程序兩次之前設(shè)置堆棧。3使用返回命令RET退出子程序,并確保堆棧頂部是調(diào)用方的返回地址。4.子節(jié)目嵌套需要考慮堆棧容量。5.提供足夠的調(diào)用信息:包括子節(jié)目名稱、子節(jié)目功能、入口參數(shù)和出口參數(shù)、子程序占用的硬件資源以及子程序調(diào)用的其他子節(jié)目名稱。分類為3-6-2子例程的入口和出口參數(shù)子例程與主節(jié)目之間的參數(shù)傳遞方式。門戶參數(shù):調(diào)用子程序之前必須傳遞給子程序的參數(shù)或單元。出口參數(shù):子程序返回調(diào)用方的結(jié)果參數(shù)或相應(yīng)的單位。請(qǐng)選擇其他參數(shù)傳遞方法。1.寄存器傳輸參數(shù)2。存儲(chǔ)傳輸參數(shù)3。堆棧傳輸參數(shù)

13、,設(shè)計(jì)子程序必須滿足通用性的要求,不能對(duì)特定數(shù)據(jù)進(jìn)行編程。范例:1。子節(jié)目功能獲得單字節(jié)數(shù)的立方值:AA3、入口參數(shù)和出口參數(shù)A。2.子節(jié)目功能獲得1字節(jié)數(shù)的N次:(41H)(42H)(40H)A,入口參數(shù)(40H)和A,出口參數(shù)(42H)(41H)。例如:將R4R5R6的3字節(jié)數(shù)據(jù)分解成兩半,更改為6字節(jié),并存儲(chǔ)在顯示器緩沖區(qū)(DISMEM0DISMEM5)中。1)子節(jié)目UFOR1功能:將A累加器的單字節(jié)數(shù)據(jù)分解為兩個(gè)字節(jié),存儲(chǔ)指向R0牙齒的兩個(gè)相鄰單元UFOR1: MOV R0、#00H XCHD A、R0。半字節(jié)INC R0存儲(chǔ)指針MOV R0,#00H SWAP A XCHD A,R0

14、;修改父1/2字節(jié)RET 2存儲(chǔ))調(diào)用子節(jié)目UFOR1之前,分解的內(nèi)容發(fā)送到A,保存地址發(fā)送到R0。3)輸出放置在DISMEM05中。副程式:兩個(gè)資料字串完全相同,如果完全相同,則a=0;否則,A=FFH。PMT: MOVR2,A;設(shè)定字串長(zhǎng)度CHC: MOVA,R0。每個(gè)數(shù)字字符串之一的數(shù)字MOV42H、R1 CJNE A、42H、NOM相同嗎?不相同的傳輸INCR0相同,指針I(yè)NCR1 DJNZ R2,CHC修改都比較完了嗎?moba,# 0;完全相同的SJMP PEND NOM:MOV A,# 0FFHPEND:RET測(cè)試問(wèn)題不完全相同:兩個(gè)數(shù)據(jù)字符串的起始地址是哪里?(R0),例如,在

15、祖懷表中查找數(shù)據(jù)的ASCII代碼,然后將其作為文字輸出。1)子節(jié)目HEXASC功能:從堆棧中刪除數(shù)據(jù),核對(duì)表將低半字節(jié)轉(zhuǎn)換為ASCII代碼,以發(fā)送累加器A。2)將每個(gè)要轉(zhuǎn)換的數(shù)據(jù)放入堆棧,然后調(diào)用子節(jié)目HEXASC。MOV SP,# 30H PUSH 40H入口參數(shù)堆棧lcall hexasc pop a hexasc 3360 dec sp;跳過(guò)返回地址DEC SP POP A;獲取入口參數(shù)ASCII碼推a的查找表;出口參數(shù)INC SP存儲(chǔ)返回地址INC SP RET DB 0、1、ASCII代碼表,3-7算術(shù)運(yùn)算節(jié)目3-7-1多字節(jié)加法節(jié)目,1 .多字節(jié)加子節(jié)目,z=x y . Adds

16、: clrc loop : mova,r0 addc a,R1;添加單字節(jié)MOVR1,A。存儲(chǔ)和單字節(jié)INCR0指針I(yè)NCR1 DJNZ R2,LOOP修改完成添加所有字節(jié)?RET,練習(xí)1創(chuàng)建十進(jìn)制多字節(jié)附加子節(jié)目Z=X Y。練習(xí)2創(chuàng)建多字節(jié)減子例程,Z=X-Y。考試題更正程序?qū)⒂?jì)算結(jié)果存儲(chǔ)在其他存儲(chǔ)設(shè)備上。3-7-2多字節(jié)無(wú)符號(hào)數(shù)乘法和除法運(yùn)算,其他計(jì)算多字節(jié)乘法節(jié)目,步驟:1。部分乘積0。2.測(cè)試乘數(shù)各位,1的部分乘積加上被乘數(shù)。否則,將0相加。對(duì)齊方法:向左或向右移動(dòng)乘數(shù)。初始值:0 00 Cy R4R5向右移動(dòng)R6R7并檢測(cè)Cy R2R3。Cy=1 Cy R4R5獲得部分乘積,并將右移位乘積最后向右移動(dòng)一次。110 101 110 000 110 1110,例如,雙字節(jié)乘以r2r 3r 7 r4r 5r 6r 7解決方案,16次循環(huán),減法計(jì)算多字節(jié)除法節(jié)目,步驟:1。根據(jù)高被除數(shù),嘗試扣除。2.如果足以

溫馨提示

  • 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)論