單片機(jī)網(wǎng)絡(luò)教學(xué)第四章80c51的編程技術(shù)_第1頁
單片機(jī)網(wǎng)絡(luò)教學(xué)第四章80c51的編程技術(shù)_第2頁
單片機(jī)網(wǎng)絡(luò)教學(xué)第四章80c51的編程技術(shù)_第3頁
單片機(jī)網(wǎng)絡(luò)教學(xué)第四章80c51的編程技術(shù)_第4頁
單片機(jī)網(wǎng)絡(luò)教學(xué)第四章80c51的編程技術(shù)_第5頁
已閱讀5頁,還剩23頁未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡(jiǎn)介

1、單片機(jī)原理 及接口技術(shù)主講教師:臧長(zhǎng)發(fā)聯(lián)系電話: 博客 第四章 匯編語言程序設(shè)計(jì) 源程序指令結(jié)構(gòu)和偽指令匯編語言程序的基本結(jié)構(gòu)形式2、操作數(shù)對(duì)于立即數(shù) #data(1)立即數(shù)188,可表示為 #10111100B、#0BCH、#188(2)MOV R0,# BLOCK;BLOCK為定義過的標(biāo)號(hào)地址對(duì)于直接地址 direct(1)二進(jìn)制、十進(jìn)制、十六進(jìn)制數(shù),MOV A,30H(2)定義過的標(biāo)號(hào)地址,AGAIN:SJMP AGAIN(3)表達(dá)式,如SUM+2,其中SUM為定義過的標(biāo)號(hào)地址(4) SFR寄存器名,如SP、DPH、DPL等一、MCS-51指令操作數(shù)說明1、語句格式標(biāo)號(hào): 操作碼 操作數(shù)

2、(目的操作數(shù),源操作數(shù));注釋4-1 源程序指令結(jié)構(gòu)和偽指令二、常用偽指令匯編:將計(jì)算機(jī)不可直接識(shí)別的匯編語言源程序翻譯成機(jī)器語 言的過程。分為計(jì)算機(jī)匯編和人工匯編兩種。匯編程序:具有完成匯編功能的程序。目標(biāo)程序:匯編語言源程序經(jīng)過匯編得到的機(jī)器語言程序。偽指令:提供匯編用控制信息的指令,只能被匯編程序所識(shí)別,不是單片機(jī)的CPU可執(zhí)行的指令。對(duì)于偏移量 rel(1)可以是數(shù)值、標(biāo)號(hào)地址、表達(dá)式(2)使用特殊符號(hào)“$”,它代表本條轉(zhuǎn)移指令所在的地址, 如LJMP $(死循環(huán))(3)實(shí)際編程時(shí),凡指令中用到地址(rel、 addr11 、 addr16等)都可用標(biāo)號(hào)地址代替實(shí)際地址,而地址的運(yùn)算有

3、匯編程序完成。1、匯編起始命令ORG(Origin) 格式: 標(biāo)號(hào): ORG 16位地址 功能:ORG偽指令指示下面的指令在存儲(chǔ)器中的地址。例如:指令地址 機(jī)器碼 源程序 ORG 2000H 2000H 78 30 MAIN:MOV R0,#30H 2002H E6MOV A,R0 2、定義字節(jié)偽指令DB(Define Byte) 格式: 標(biāo)號(hào): DB 字節(jié)內(nèi)容 功能:定義程序存儲(chǔ)器從標(biāo)號(hào)開始的連續(xù)單元,用來存放常數(shù)、字符和表格。 例如: ORG2000H TAB1:DB01H,04H,08H,10H 以上偽指令匯編后從2000H單元開始定義(存放)4個(gè)字節(jié)數(shù)據(jù):(2000H)01H,(200

4、1H)04H,(2002H)09H,(2003H)10H。 3、定義字偽指令DW(Define Word) 格式:標(biāo)號(hào): DW 字內(nèi)容 功能:同DB,不同的是為16位數(shù)據(jù)。 例如: ORG2100H TAB2:DW 1067H, 1000H, 100 匯編后:(2100H)10H,(2101H)67H, (2102H)10H,(2103H)00H, (2104H)00H,(2105H)64H。 4、匯編結(jié)束命令END 格式:標(biāo)號(hào): END 功能:END是匯編語言源程序的匯編結(jié)束標(biāo)志,在它后面所寫的指令均不予處理。 例: START: END 5、等值偽指令EQU 格式:字符代碼 EQU 數(shù)值

5、功能:用EQU定義等值,EQU左邊的字符代碼代表右邊的數(shù)值。 例: X1 EQU 2000H X2 EQU 0FH MAIN: MOV DPTR,#X1 ADD A,#X2 6、數(shù)據(jù)地址賦值偽指令DATA 格式:字符代碼 DATA 數(shù)值 功能:將DATA右邊的數(shù)值賦予左邊的字符代碼名稱,右邊的數(shù)值可以是數(shù)據(jù)也可以是地址代碼。 2、畫流程圖畫流程圖是指用各種圖形、符號(hào)、指向線等來說明程序設(shè)計(jì)的過程。國(guó)際通用的圖形和符號(hào)說明如下: 1、程序設(shè)計(jì)的基本步驟一般步驟為:(1)分析題意,明確要求;(2)建立思路,確定算法;(3)編制框圖,繪出流程;(4)編寫程序,上機(jī)調(diào)試; 顯然,算法和流程是至關(guān)重要的

6、。程序結(jié)構(gòu)有簡(jiǎn)單順序、分支、循環(huán)和子程序等幾種基本形式。三、匯編語言程序的結(jié)構(gòu)橢圓框:起止框,在程序的開始和結(jié)束時(shí)使用。矩形框:處理框,表示要進(jìn)行的各種操作。菱形框:判斷框,表示條件判斷,以決定程序的流向。指向線:流程線,表示程序執(zhí)行的流向。圓 圈:連接符,表示不同頁之間的流程連接。各種幾何圖形符號(hào)如下圖所示。 4-2 順序程序的設(shè)計(jì) 順序程序的特點(diǎn):程序的走向是唯一的,程序的書寫順序就是程序的執(zhí)行順序,程序中不包括分支、循環(huán)、子程序等。 例4-1 見課本P52 分支程序就是根據(jù)條件對(duì)程序的執(zhí)行進(jìn)行判斷,滿足條件是轉(zhuǎn)移執(zhí)行,否則 順序執(zhí)行。 在MCS-51指令系統(tǒng)中條件轉(zhuǎn)移指令有:(1)判A是

7、否為0:JZ、JNZ;(2)比較不等轉(zhuǎn)移指令:CJNE;(3)判斷進(jìn)位標(biāo)志C:JC、JNC;(3)判斷位條件指令:JB、JNB。 4-3 分支程序設(shè)計(jì)考題 3101:查大小數(shù)大數(shù)送(34H)比較完否?A(3AH)?取小數(shù)(35H)送(A)中小數(shù)送(35H)結(jié)束開始設(shè)存數(shù)首址(R0)A(3AH)?設(shè)比較次數(shù)(R7)第一個(gè)數(shù)分別送(34H)、(35H)取一個(gè)數(shù)送(3AH)取大數(shù)(34H)送(A)中NYYYNN ORG 00H LJMP M3101 ORG 0800HM3101:MOV R0,#20H ;設(shè)存數(shù)起起始地址 MOV R7,#19 ;設(shè)比較次數(shù) MOV 34H,R0 ;首數(shù)分別送(34H

8、) (35H) MOV 35H, R0LP: INC R0 MOV 3AH, R0 ;取一個(gè)數(shù)(20個(gè)數(shù)中的一個(gè)) MOV A, 34H CJNE A,3AH,CHK1;與(34H)比大小CHK1: JNC LP1 ;A(3AH)則轉(zhuǎn)LP1 MOV 34H, R0 ;將比較后的大者存入(34H)LP1: MOV A, 35H CJNE A,3AH,CHK2 ;與(35H)比大小CHK2: JC LP2 ; A(3AH)則轉(zhuǎn)LP2 MOV 35H,R0 ;將比較后的小者存入(35H)LP2: DJNZ R7, LP ;比完否? AJMP $ END4-4 循環(huán)程序設(shè)計(jì)例4-7 設(shè)從30H RAM

9、單元開始存放著單字節(jié)數(shù)X1,X2,Xn,個(gè)數(shù)n放在R1中,現(xiàn)要求編制一段程序,求這n個(gè)數(shù)的和(雙字節(jié)),結(jié)果存放在R2 R3中。 程序如下: ORG 1000HADD1:MOV R2,#00H ;將R2、R3清零 MOV R3,#00H MOV R0,#30H ;指向起始單元 MOV R1,#n ;設(shè)置所加數(shù)的個(gè)數(shù)LOOP:MOV A,R3 ;加低8位到R3 ADD A,R0 MOV R3,A ;存低8位 INC R0 ;指向下一個(gè)單元 CLR A ;加進(jìn)位到R2 ADDC A,R2 MOV R2,A DJNZ R1,LOOP ;加完否? END開始(R2 R3) 0(R2 R3)Xi+ (R

10、2 R3)ii-1i=0ENDYN 一般循環(huán)程序包括四個(gè)部分:(1)初始化部分 如循環(huán)次數(shù)、變量的初值。(2)循環(huán)體 即循環(huán)執(zhí)行的程序段部分。(3)循環(huán)控制變量的修改部分 修改循環(huán)次數(shù)、地址指針等。(4)循環(huán)終止控制 判斷是否滿足循環(huán)結(jié)束條件,滿足則退出循環(huán),不滿足則繼續(xù)執(zhí)行循環(huán)體。 ORG 1000HDEL: MOVR7,#200 ;1sDL1: MOV R6,#123 ;1s NOP ;1sDL2:DJNZ R6,DL2 ;2123+2=248s DJNZ R7,DL1 ;(248+2) 200+1=50.001ms RET 例48 設(shè)計(jì)50ms秒延時(shí)子程序,假設(shè)fosc=12MHz。 用

11、于查表的指令有兩條: MOVC A,APC MOVC A,ADPTR 當(dāng)使用DPTR作為基址寄存器時(shí)查表比較簡(jiǎn)單,查表的步驟分三步: 1)基址(表格首地址)送DPTR數(shù)據(jù)指針; 2)變址值(在表中的位置是第幾項(xiàng))送累加器A; 3)執(zhí)行查表指令MOVC A,ADPTR,進(jìn)行讀數(shù),查表結(jié)果送回累加器A。 4-5 查表程序設(shè)計(jì) 當(dāng)使用PC作為基址寄存器時(shí),由于PC本身是一個(gè)程序計(jì)數(shù)器,與指令的存放地址有關(guān),查表時(shí)其操作有所不同。查表的步驟也分三步: 1)變址值(在表中的位置是第幾項(xiàng))送累加器A; 2)偏移量(查表指令的下一條指令的首地址到表格首地址之間的字節(jié)數(shù))+ A A;(修正) 3)執(zhí)行查表指令

12、MOVC A,APC。 4-6 子程序的設(shè)計(jì)略考題3105 ORG 00H MOV R0,#40 ;設(shè)置循環(huán)左移點(diǎn)亮次(40/8) MOV A,#1H ;設(shè)置LED點(diǎn)亮初值LP1: MOV P1,A ;LED左移點(diǎn)亮數(shù)據(jù)送P1口 LCALL DEL ;調(diào)延時(shí)子程序 RL A ;循環(huán)左移 DJNZ R0,LP1;是否完成循環(huán)左移5遍 MOV R0,#40 ;設(shè)置右移循環(huán)點(diǎn)亮次數(shù) MOV A,#80H ;設(shè)置LED點(diǎn)亮初值LP2: MOV P1,A ; LED右移點(diǎn)亮數(shù)據(jù)送P1口 LCALL DEL ;調(diào)延時(shí)子程序 RR A ;循環(huán)右移 DJNZ R0,LP2;是否完成循環(huán)右移5遍 MOV P1,

13、#0 ;循環(huán)完成后LED熄滅 SJMP $循環(huán)燈點(diǎn)亮延時(shí)子程序DEL:MOV R4,#10 ;0.5S時(shí)間常數(shù)DL1:MOV R5,#125 ;50mS時(shí)間常數(shù)DL2:MOV R6,#200 ;400S時(shí)間常數(shù) DJNZ R6,$ DJNZ R5,DL2 DJNZ R4,DL1 RET ;子程序返回 END思考題:每個(gè)狀態(tài)亮1S,延時(shí)程序該怎樣改動(dòng)。 ORG 00H MOV R1,#4 ;設(shè)置循環(huán)次數(shù)LP1: MOV R0,#0 ;設(shè)置偏移初始值 MOV DPTR,#TAB ;表首地址送DPTRLP2: MOV A,R0 ;偏移量送A MOVC A,A+DPTR;查表 MOV P1,A ;查表

14、內(nèi)容送P1 LCALL DEL ;調(diào)延時(shí)子程序 INC R0 ;偏移量加1 CJNE R0,#8,LP2 ;一次循環(huán)是否完成 DJNZ R1,LP1 ;是否完成4次循環(huán) MOV P1,#0 ;循環(huán)完成后LED熄滅 SJMP $ ;等待考題3106霓虹燈控制 DEL:MOV R4,#10 ;0.5S延時(shí)子程序 DL1:MOV R5,#125 DL2:MOV R6,#200 DJNZ R6,$ DJNZ R5,DL2 DJNZ R4,DL1 RET TAB:DB 81H,42H,24H,18H ;定義從兩邊向中間點(diǎn)亮內(nèi)容 DB 18H,24H,42H,81H ;定義從中間向兩邊點(diǎn)亮內(nèi)容 END思考

15、題:1.從兩邊向中間亮,每次狀態(tài)亮秒,共個(gè)大循環(huán)后結(jié)束。2.先從兩邊向中間亮次,再?gòu)闹虚g向兩邊亮次,共個(gè)循環(huán)。考題3108繼電器控制答案一 ORG 00HM3108: LCALL DEL CPL P1.0 SJMP M3108 DEL: MOV R4, #20 DL1: MOV R5 , #200 DL2: MOV R6 , #250 DJNZ R6 , $ DJNZ R5 , DL2 DJNZ R4 , DL1 RET END 要求會(huì)改延時(shí)時(shí)間 ORG 00H MOV R1 , #3M3108: SETB P1.0 MOV R2 , #10 LCALL DEL CLR P1.0 MOV R2,#5 LCALL DEL DJNZ R1 , M3108 SJMP $ DEL:MOV R5 , #200 DL1:

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(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)論