單片機接口技術2.3ppt課件_第1頁
單片機接口技術2.3ppt課件_第2頁
單片機接口技術2.3ppt課件_第3頁
單片機接口技術2.3ppt課件_第4頁
單片機接口技術2.3ppt課件_第5頁
已閱讀5頁,還剩26頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

1、2.3 匯編言語程序設計匯編言語程序設計主要內容主要內容1. 1. 匯編言語格式及構成匯編言語格式及構成2. 2. 匯編源程序設計步驟及匯編匯編源程序設計步驟及匯編3. 3. 順序程序設計順序程序設計4. 4. 分支程序設計分支程序設計5. 5. 循環(huán)和查表程序設計循環(huán)和查表程序設計6. 6. 子程序設計子程序設計2.3.1 匯編言語格式匯編言語格式標號段:操作碼段標號段:操作碼段 操作數(shù)段;注釋段操作數(shù)段;注釋段 如:如:LP1: MOV R2, #10; 設置循環(huán)次數(shù)設置循環(huán)次數(shù)標號段:指明所在指令操作碼字節(jié)所在的內存地址。標號段:指明所在指令操作碼字節(jié)所在的內存地址。標號由大寫英文字母開

2、頭的字母和數(shù)字串組成,長度標號由大寫英文字母開頭的字母和數(shù)字串組成,長度為為18個字符。標號段可省略。個字符。標號段可省略。2.3.2 2.3.2 匯編言語構成匯編言語構成1. 1. 指令性語句助記符語句指令性語句助記符語句2. 2. 指示性語句偽指令指示性語句偽指令 a. ORGa. ORG起始匯編偽指令起始匯編偽指令 例:例:ORG 2000HORG 2000H; 指定程序存儲地址從指定程序存儲地址從2000H2000H開場開場 b. ENDb. END終了匯編偽指令終了匯編偽指令 例:例:ENDEND c. EQU c. EQU賦值偽指令賦值偽指令 字符稱號字符稱號 EQU EQU 數(shù)據(jù)

3、或匯編符號數(shù)據(jù)或匯編符號 ;將右邊的數(shù)據(jù)或匯編符號賦給左邊的字符稱號;將右邊的數(shù)據(jù)或匯編符號賦給左邊的字符稱號例如:例如:AA EQU R1 AA EQU R1 ;AAAA當作存放器當作存放器R1R1運用運用 A10 EQU 10H A10 EQU 10H ;A10=10HA10=10H DELAY EQU 07E6H DELAY EQU 07E6H ;DELAY=07E6HDELAY=07E6H MOV R0 , A10 MOV R0 , A10 MOV A , AA MOV A , AA LCALL DELAY LCALL DELAYd. DATAd. DATA數(shù)據(jù)地址賦值偽指令數(shù)據(jù)地址賦

4、值偽指令字符稱號字符稱號 DATA DATA 表達式表達式 ;將右邊表達式;將右邊表達式8 8位位 ;賦左邊,只能是數(shù)據(jù);賦左邊,只能是數(shù)據(jù) ;或地址等;或地址等DATADATA型型 字符稱號字符稱號 XDATA XDATA 表達式;表達式; 1616位位 例:例: AA DATA 35HAA DATA 35H DELAY XDATA 0A7E6H DELAY XDATA 0A7E6H e. DBe. DB字節(jié)定義偽指令字節(jié)定義偽指令 標號:標號: DB DB 項或項表項或項表 例:例: TAB TAB: DB 45H DB 45H,7373,A A ;將;將45H45H、7373、A A依次

5、存放依次存放 ;入;入TABTAB地址開場的存儲單元地址開場的存儲單元 A73TAB45Hf. DWf. DW字定義偽指令字定義偽指令 標號:標號: DW DW 項或項表項或項表例:例:ORG 1000H ORG 1000H HETAB HETAB:DW 1234H, 8AH, 10 DW 1234H, 8AH, 10 g. DSg. DS存儲空間定義偽指令存儲空間定義偽指令 標號:標號: DS DS 項或項表項或項表例:例: SPCSPC: DS 08H DS 08H ;從;從SPCSPC地址開場,地址開場, ;預留;預留8 8個存儲單元個存儲單元 DB 25H DB 25H ;SPC+8S

6、PC+8=25H =25H h. BITh. BIT位地址賦值偽指令位地址賦值偽指令 字符稱號字符稱號 BIT BIT 位地址位地址例:例:A1 BIT 00H A1 BIT 00H A2 BIT P1.0 A2 BIT P1.0 MOV C MOV C,A1 A1 ;將位地址;將位地址00H00H的值送的值送Cy Cy 2.3.3 匯編源程序設計步驟及匯編匯編源程序設計步驟及匯編源程序設計步驟:源程序設計步驟:1 1擬定設計義務書,設計義務書包括:程序功能、技術目的、精度擬定設計義務書,設計義務書包括:程序功能、技術目的、精度等級、實施方案、工程進度、所需設備、研制費用、人員分工等級、實施方

7、案、工程進度、所需設備、研制費用、人員分工2 2建立數(shù)學模型建立數(shù)學模型3 3確立算法確立算法4 4繪制程序流程圖繪制程序流程圖5 5編制匯編言語源程序編制匯編言語源程序6 6上機調試上機調試 匯編言語源程序的匯編匯編言語源程序的匯編人工匯編人工匯編機器匯編機器匯編2.3.4 2.3.4 順序程序設計順序程序設計例題例題1 1:求一個:求一個1616位二進制負數(shù)的補碼。設此位二進制負數(shù)的補碼。設此1616位位二進制數(shù)存于二進制數(shù)存于NUMNUM、NUM+1NUM+1單元單元 解:補碼解:補碼= =反碼反碼+1+1ORG 1000HORG 1000HNUM DATA 20HNUM DATA 20

8、HMOV R0MOV R0,#NUM#NUMMOV AMOV A,R0 R0 CPL ACPL AADD AADD A,#01H#01HMOV R0MOV R0,A AINC R0 INC R0 MOV AMOV A,R0 R0 CPL ACPL AADDC AADDC A,#00H#00HMOV R0MOV R0,A ASJMP $SJMP $ENDEND2.3.5 2.3.5 分支程序設計分支程序設計 例題例題2 2:知:知VARVAR單元內有一自變量單元內有一自變量X X,按如下條件,按如下條件編出求函數(shù)值編出求函數(shù)值Y Y并將它存入并將它存入FUNCFUNC單元的程序:單元的程序:假設

9、假設X0X0,那么,那么Y=1Y=1;假設假設X=0X=0,那么,那么Y=0Y=0;假設假設X0X0VAR0,那么轉,那么轉POSPOS MOV A MOV A,#0FFH #0FFH ;假設;假設VAR0VAR0,-1 -1給給A A SJMP DONE SJMP DONEPOS POS :MOV AMOV A,#01H#01HDONEDONE:MOV FUNCMOV FUNC,A A SJMP $ SJMP $ END END2.3.6 2.3.6 循環(huán)和查表程序設計循環(huán)和查表程序設計例題例題3 3:知內部:知內部RAM ADDRRAM ADDR為始址的無符號數(shù)數(shù)據(jù)塊為始址的無符號數(shù)數(shù)據(jù)塊

10、的塊長存儲于的塊長存儲于LENLEN單元內,請編程找出數(shù)據(jù)塊中的單元內,請編程找出數(shù)據(jù)塊中的最大數(shù)并存入最大數(shù)并存入MAXMAX單元單元解:解: ORG 1000H ORG 1000H LEN DATA 31H LEN DATA 31H MAX DATA 32H MAX DATA 32H ADDR DATA 40H ADDR DATA 40H MOV R0 MOV R0,#ADDR #ADDR ;R0R0指向數(shù)據(jù)塊,初始化指向數(shù)據(jù)塊,初始化為為 ;數(shù)據(jù)塊首地址;數(shù)據(jù)塊首地址 MOV MAX, ADDR MOV MAX, ADDR ;MAXMAX單元初始化單元初始化LOOPLOOP:MOV AM

11、OV A,R0 R0 ;開場循環(huán)體,將一個數(shù)?。婚_場循環(huán)體,將一個數(shù)取到到A A CJNE A CJNE A,MAXMAX,BRCHBRCH;比較該數(shù)與;比較該數(shù)與MAXMAX的大小的大小BRCHBRCH:JC NEXT JC NEXT ;假設該數(shù)小,那么進展下一;假設該數(shù)小,那么進展下一次循環(huán)次循環(huán) XCH A XCH A,MAX MAX ;假設該數(shù)大,那么與;假設該數(shù)大,那么與MAXMAX交換交換NEXTNEXT:INC R0 INC R0 ;為下一次循環(huán)做預備;為下一次循環(huán)做預備 DJNZ LEN DJNZ LEN,LOOP LOOP ;判別循環(huán)次數(shù);判別循環(huán)次數(shù) SJMP $ SJMP

12、 $ END END例題例題4 4:R0R0的低四位為一個的低四位為一個1616進制數(shù)碼,編寫程序,進制數(shù)碼,編寫程序,將該數(shù)碼對應字符的將該數(shù)碼對應字符的ASCIIASCII編碼送入編碼送入R1R1。例如:假。例如:假設設R0R0的低的低4 4位為位為1110B1110B,對應,對應1616進制數(shù)碼進制數(shù)碼E E,那么將字,那么將字符符E E的的ASCIIASCII碼送入碼送入R1R1查表:用于查表的參數(shù)即為所查查表:用于查表的參數(shù)即為所查數(shù)據(jù)在表中的位置,即該存儲地數(shù)據(jù)在表中的位置,即該存儲地址間隔表起始地址的間隔。址間隔表起始地址的間隔。例如:例如:a2表表(a為為10以內的自然以內的自

13、然數(shù)數(shù)),根據(jù),根據(jù)a的值查表得的值查表得a2的值。的值。假設假設a=3,a2=9,該數(shù)據(jù)存儲地,該數(shù)據(jù)存儲地址間隔表起始地址的間隔即為址間隔表起始地址的間隔即為3(個存儲單元個存儲單元)。執(zhí)行。執(zhí)行MOVC A,A+PC指令后,指令后,A+PC即指向即指向該存儲單元。該存儲單元。ASCTAB:DB 0, 1, 2, 3 ; 制表制表 DB 4 ,5, 6, 7 DB 8, 9A, B DB C, D, E , F ENDORG 1000HMOV A, R0 ANL A, #0FH ; 此時此時A為該字符在為該字符在 ;表中的偏移間隔表中的偏移間隔ADD A, #03H;查表指令到表的間隔;查

14、表指令到表的間隔MOVC A, A+PC ; 查表查表MOV R1, A ;單字節(jié)指令單字節(jié)指令SJMP $ ;雙字節(jié)指令雙字節(jié)指令解:解:2.3.7 2.3.7 子程序設計子程序設計 子程序可自動維護斷點即主程序中下一條指令的子程序可自動維護斷點即主程序中下一條指令的地址,但不會自動維護現(xiàn)場即運轉子程序前的存地址,但不會自動維護現(xiàn)場即運轉子程序前的存放器形狀,假設要維護現(xiàn)場,那么在子程序的開場放器形狀,假設要維護現(xiàn)場,那么在子程序的開場部分用壓入堆棧命令維護現(xiàn)場,在終了部分用彈出堆部分用壓入堆棧命令維護現(xiàn)場,在終了部分用彈出堆棧命令恢復現(xiàn)場棧命令恢復現(xiàn)場 可利用存放器、存儲單元或堆棧進展子程

15、序的入口可利用存放器、存儲單元或堆棧進展子程序的入口參數(shù)和出口參數(shù)傳送參數(shù)和出口參數(shù)傳送例題例題5 5:設片內:設片內RAMRAM單元單元MDAMDA和和MDBMDB內有兩數(shù)內有兩數(shù)a a和和b b,請編出求請編出求c=a2+b2c=a2+b2并把并把c c送入片內送入片內MDCMDC單元的程序,單元的程序,設設a a和和b b皆為皆為1010以內的自然數(shù)。以內的自然數(shù)。 SQRTAB 100 81 64 49 36 25 表表 16 9 4 1 0 SQRTAB:DB 0, 1, 4, 9;平方表;平方表 DB 16, 25, 36 DB 49, 64, 81,100 END ORG 100

16、0H ORG 1000H MDA DATA 20H MDA DATA 20H MDB DATA 21H MDB DATA 21H MDC DATA 22H MDC DATA 22H MOV SP, #40H MOV SP, #40H MOV A, MDA MOV A, MDA ;入口參數(shù)傳送;入口參數(shù)傳送 ACALL SQR ACALL SQR ;調用子程序;調用子程序 MOV R1, A MOV R1, A MOV A, MDB MOV A, MDB ACALL SQR ACALL SQR ADD A, R1 ADD A, R1 MOV MDC, A MOV MDC, A SJMP $ SJ

17、MP $SQRSQR:ADD A, #01 ADD A, #01 ;子程序;子程序 MOVC A, A+PC MOVC A, A+PC RET RET ;單字節(jié)指令;單字節(jié)指令SQRTABSQRTAB:DB 0,1,4,9,16 DB 0,1,4,9,16 ;平方表;平方表 DB 25,36,49,64,81,100DB 25,36,49,64,81,100 END END練習練習1 1:片外:片外RAMRAM從從0000H0000H到到007FH007FH有一數(shù)據(jù)塊,請編有一數(shù)據(jù)塊,請編出將它們傳送到出將它們傳送到3000H3000H到到307FH307FH區(qū)域的程序。區(qū)域的程序。 解:解:

18、 ORG 1000H ORG 1000H MOV R0, #00H MOV R0, #00H MOV DPTR, #3000H MOV DPTR, #3000H MOV R2, MOV R2, 80H80H LP1: MOVX A, R0 LP1: MOVX A, R0 MOVX DPTR, A MOVX DPTR, A INC R0 INC R0 INC DPTR INC DPTR DJNZ R2, LP1 DJNZ R2, LP1 END END練習練習2 2:有:有200200名學生的外語統(tǒng)考成果存放在名學生的外語統(tǒng)考成果存放在80C5180C51片片外外RAMRAM始址為始址為ENGL

19、ISHENGLISH的延續(xù)存儲單元,請統(tǒng)計成的延續(xù)存儲單元,請統(tǒng)計成果大于等于果大于等于9090分的學生人數(shù),并把統(tǒng)計結果存入片內分的學生人數(shù),并把統(tǒng)計結果存入片內RAMRAM的的GRADAGRADA單元。單元。練習練習3 3:有兩個四字節(jié)無符號數(shù)分別存放在片內:有兩個四字節(jié)無符號數(shù)分別存放在片內RAMRAM以以FIRSTFIRST和和SECONDSECOND為始址的區(qū)域低字節(jié)在前,高字節(jié)為始址的區(qū)域低字節(jié)在前,高字節(jié)在后,請編程將兩數(shù)之和設和也為四字節(jié)存于在后,請編程將兩數(shù)之和設和也為四字節(jié)存于片內片內RAMRAM以以SUMSUM為始址的區(qū)域。為始址的區(qū)域。LP: MOV R0,50HLP:

20、 MOV R0,50H MOV A,R0 MOV A,R0 MOV R0,51H MOV R0,51H ADDC A,R0 ADDC A,R0 MOV R1,A MOV R1,A INC 50H INC 50H INC 51H INC 51H INC R1 INC R1 DJNZ R2,LP DJNZ R2,LP SJMP $ SJMP $ END END解:解:ORG 1000HORG 1000HFIRST DATA 20HFIRST DATA 20HSECOND DATA 30HSECOND DATA 30HSUM DATA 40HSUM DATA 40HMOV 50H,#FIRSTMOV

21、 50H,#FIRSTMOV 51H,#SECONDMOV 51H,#SECONDMOV R1,#SUMMOV R1,#SUMMOV R2,#4MOV R2,#4CLR CCLR C練習練習4 4:知片內:知片內RAMRAM的的MDAMDA單元和單元和MDBMDB單元分別存有兩個單元分別存有兩個數(shù)數(shù)a a、b b,請用查表子程序實現(xiàn),請用查表子程序實現(xiàn)C=a2+2ab+b2C=a2+2ab+b2,并把,并把C C存存于片內于片內RAMRAM的的MDCMDC單元。設單元。設a a、b b均為均為5 5以內的自然數(shù)。以內的自然數(shù)。SQR: ADD A,#1 SQR: ADD A,#1 MOVC A

22、,A+PC MOVC A,A+PC RET RETTAB: DB 0,1,4,9,16,25TAB: DB 0,1,4,9,16,25 DB 36,49,64,81 DB 36,49,64,81 DB 100 DB 100 END END解:解:ORG 1000HORG 1000HMDA DATA 30HMDA DATA 30HMDB DATA 31HMDB DATA 31HMDC DATA 32H MDC DATA 32H MOV SP,#50HMOV SP,#50HMOV A,MDAMOV A,MDAADD A,MDBADD A,MDBACALL SQRACALL SQRMOV MDC,A

23、MOV MDC,ASJMP $SJMP $練習練習5 5:片內:片內RAMRAM從從30H30H單元開場存放有一個正數(shù)表,單元開場存放有一個正數(shù)表,以以-1-1作為表的終了標志,編程統(tǒng)計該表的長度并作為表的終了標志,編程統(tǒng)計該表的長度并存入片內存入片內RAM70HRAM70H單元。假設表的長度小于單元。假設表的長度小于255255。LP : MOV A,R0 LP : MOV A,R0 CJNE A,#0FFH,CHK CJNE A,#0FFH,CHK INC 70H INC 70H SJMP DONE SJMP DONECHK: INC 70HCHK: INC 70H INC R0 INC

24、R0 SJMP LP SJMP LPDONE:SJMP $DONE:SJMP $ END END解:解:ORG 1000HORG 1000HMOV R0,#30HMOV R0,#30HMOV 70H,#00HMOV 70H,#00H2019機電3-4班練習練習6 6:設晶振頻率為:設晶振頻率為6MHz6MHz,試編寫一能延時,試編寫一能延時20ms20ms的子的子程序。提示:采用程序。提示:采用NOPNOP指令延時指令延時解:解:分析:分析:1 1個機器周期為個機器周期為12/(612/(6* *106)=2us106)=2us, 那么那么20ms20ms需耗費需耗費 20 20* *10-3

25、/(210-3/(2* *10-6)=1000 10-6)=1000 個個機器周期機器周期 NOP NOP為單周期指令,所以需循環(huán)為單周期指令,所以需循環(huán)10001000次,一個次,一個8 8位的存儲單元只能最大只能存儲位的存儲單元只能最大只能存儲255255,所以,需求采用,所以,需求采用雙重循環(huán)。雙重循環(huán)。 本程序分別采用本程序分別采用R2R2和和R3R3存儲內、外循環(huán)次數(shù),存儲內、外循環(huán)次數(shù),內循環(huán)內循環(huán)5050次,外循環(huán)次,外循環(huán)2020次。次。DELAY: MOV R3,#100DELAY: MOV R3,#100EXT : MOV R2,#100EXT : MOV R2,#100I

26、NN : NOPINN : NOP DJNZ R2,INN DJNZ R2,INN DJNZ R3,EXT DJNZ R3,EXT RET RET 思索:誤差太大,如何準確定時?思索:誤差太大,如何準確定時?練習練習7 7:設:設80318031單片機片內單片機片內RAMRAM從從30H30H單元開場存放有單元開場存放有2020個個8 8位二進制數(shù)。要求編一子程序能把它們從大到小依次位二進制數(shù)。要求編一子程序能把它們從大到小依次存入片外存入片外RAMRAM從從1000H1000H開場的存儲區(qū)。開場的存儲區(qū)。 問題:需思索排序的算法問題:需思索排序的算法解:解:ORG 1000HORG 1000

27、HMAX DATA 30HMAX DATA 30HMOV DPTR,#1000HMOV DPTR,#1000HMOV R0,#30HMOV R0,#30HMOV R2,#20 ;MOV R2,#20 ;外循環(huán)次外循環(huán)次數(shù)數(shù)EXT:MOV A,R0;EXT:MOV A,R0;內循環(huán)初始內循環(huán)初始化化 MOV R1,AMOV R1,A MOV MAX,R1 MOV MAX,R1 MOV A,R2; MOV A,R2;設置內循環(huán)設置內循環(huán)次數(shù)次數(shù) MOV R3,AMOV R3,AINC R0INC R0INC DPTRINC DPTRDJNZ R2,EXT DJNZ R2,EXT ENDENDINN: MOVX A,R1INN: MOVX A,R1 CJNE A,MAX,BRCH1 CJNE A,MAX,BRCH

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經(jīng)權益所有人同意不得將文件中的內容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
  • 6. 下載文件中如有侵權或不適當內容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論