單片機及接口技術單片機匯編_第1頁
單片機及接口技術單片機匯編_第2頁
單片機及接口技術單片機匯編_第3頁
單片機及接口技術單片機匯編_第4頁
單片機及接口技術單片機匯編_第5頁
已閱讀5頁,還剩16頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

單片機及接口技術單片機匯編第1頁,課件共21頁,創(chuàng)作于2023年2月匯編語言程序設計主要內(nèi)容1.匯編語言格式及構成2.匯編源程序設計步驟及匯編3.順序程序設計4.分支程序設計5.循環(huán)和查表程序設計6.子程序設計第2頁,課件共21頁,創(chuàng)作于2023年2月2.3.1匯編語言格式標號段:操作碼段操作數(shù)段;注釋段

如:LP1:MOVR2,#10;設置循環(huán)次數(shù)標號段:指明所在指令操作碼字節(jié)所在的內(nèi)存地址。標號由大寫英文字母開頭的字母和數(shù)字串組成,長度為1~8個字符。標號段可省略。2.3.2匯編語言構成1.指令性語句(助記符語句)2.指示性語句(偽指令)a.ORG(起始匯編)偽指令例:ORG2000H;指定程序存儲地址從2000H開始b.END(結(jié)束匯編)偽指令例:ENDc.EQU(賦值)偽指令字符名稱EQU數(shù)據(jù)或匯編符;將右邊的數(shù)據(jù)或匯編符賦給左邊的字符名稱匯編語言格式及構成第3頁,課件共21頁,創(chuàng)作于2023年2月例如:AAEQUR1;AA當作寄存器R1使用A10EQU10H;A10=10HDELAYEQU07E6H;DELAY=07E6HMOVR0,A10MOVA,AALCALLDELAYd.DATA(數(shù)據(jù)地址賦值)偽指令字符名稱DATA表達式;將右邊表達式(8位)賦左邊,;只能是數(shù)據(jù)或地址等DATA型字符名稱XDATA表達式;16位例:AADATA35HDELAYXDATA0A7E6He.DB(字節(jié)定義)偽指令[標號:]DB項或項表例:TAB:DB45H,73,‘A’;將45H、73、‘A’依次存放;入TAB地址開始的存儲單元匯編語言格式及構成第4頁,課件共21頁,創(chuàng)作于2023年2月f.DW(字定義)偽指令[標號:]DW項或項表例:ORG1000HHETAB:DW1234H,8AH,10;(1000H)=12H,(1001H)=34H;(1002H)=8AH,(1003H)=00H,(1004H)=0AH,(1005H)=00Hg.DS(存儲空間定義)偽指令[標號:]DS項或項表例:SPC:DS08H;從SPC地址開始,預留8個存儲單元DB25H;(SPC+8)=25Hh.BIT(位地址賦值)偽指令字符名稱BIT位地址例:A1BIT00HA2BITP1.0MOVC,A1;將位地址00H的值送Cy

匯編語言格式及構成返回第5頁,課件共21頁,創(chuàng)作于2023年2月2.3.3匯編源程序設計步驟及匯編源程序設計步驟:1)擬定設計任務書,設計任務書包括:程序功能、技術指標、精度等級、實施方案、工程進度、所需設備、研制費用、人員分工2)建立數(shù)學模型3)確立算法4)繪制程序流程圖5)編制匯編語言源程序6)上機調(diào)試

匯編語言源程序的匯編人工匯編機器匯編匯編語言格式及構成返回第6頁,課件共21頁,創(chuàng)作于2023年2月2.3.4順序程序設計例題1:求一個16位二進制負數(shù)的補碼。設此16位二進制數(shù)存于NUM、NUM+1單元解:補碼=反碼+1

ORG1000HNUMDATA20HMOVR0,#NUMMOVA,@R0

CPLAADDA,#01HMOV@R0,AINCR0

MOVA,@R0

CPLAADDCA,#00HMOV@R0,ASJMP$END順序程序設計返回課7第7頁,課件共21頁,創(chuàng)作于2023年2月2.3.5分支程序設計分支程序設計例題2:已知VAR單元內(nèi)有一自變量X,按如下條件編出求函數(shù)值Y并將它存入FUNC單元的程序若X>0,則Y=1;若X=0,則Y=0;若X<0,則Y=-1。ORG1000HVARDATA30HFUNCDATA31HMOVA,VARJZDONE;若VAR=0,則轉(zhuǎn)DONEJNBACC.7,POS;若VAR>0,則轉(zhuǎn)POSMOVA,#0FFH;若VAR<0,-1給ASJMPDONEPOS:MOVA,#01HDONE:MOVFUNC,ASJMP$END返回第8頁,課件共21頁,創(chuàng)作于2023年2月2.3.6循環(huán)和查表程序設計循環(huán)和查表程序設計例題3:已知內(nèi)部RAMADDR為始址的無符號數(shù)數(shù)據(jù)塊的塊長存儲于LEN單元內(nèi),請編程找出數(shù)據(jù)塊中的最大數(shù)并存入MAX單元解:ORG1000HLENDATA31HMAXDATA32H

MOVR0,#ADDR;R0指向數(shù)據(jù)塊,初始化為數(shù)據(jù)塊首地址MOVMAX,#00H;MAX單元初始化,清零

LOOP:MOVA,@R0;開始循環(huán)體,將一個數(shù)取到ACJNEA,MAX,BRCH;比較該數(shù)與MAX的大小BRCH:JCNEXT;若該數(shù)小,則進行下一次循環(huán)XCHA,MAX;若該數(shù)大,則與MAX交換NEXT:INCR0;為下一次循環(huán)做準備DJNZLEN,LOOP;判斷循環(huán)次數(shù)SJMP$END返回第9頁,課件共21頁,創(chuàng)作于2023年2月例題4:R0的低四位對應一個16進制數(shù)碼,編寫程序,將該數(shù)碼對應字符的ASCII編碼送入R1。(例如:若R0的低4位為1110B,對應16進制數(shù)碼E,則將字符’E’的ASCII碼送入R1)

‘9’

‘8’

‘7’

‘6’

‘5’

‘4’

‘3’

‘2’

‘1’

‘0’

SJMP$

MOVR0,A

MOVCA,@A+PC

解:ORG1000HMOVA,R0ANLA,#0FHADDA,#03HMOVCA,@A+PC;查表指令MOVR1,A;指令長度為一個字節(jié)SJMP$;指令長度為兩個字節(jié)ASCTAB:DB‘0’,

‘1’,

‘2’,

‘3’,

‘4’;制表DB‘5’,

‘6’,

‘7’,

‘8’,

‘9’DB‘A’,

‘B’,

‘C’,

‘D’,

‘E’,

‘F’END循環(huán)和查表程序設計第10頁,課件共21頁,創(chuàng)作于2023年2月2.3.7子程序設計子程序可自動保護斷點(即主程序中下一條指令的地址),但不會自動保護現(xiàn)場(即運行子程序前的寄存器狀態(tài)),若要保護現(xiàn)場,則在子程序的開始部分用壓入堆棧命令保護現(xiàn)場,在結(jié)束部分用彈出堆棧命令恢復現(xiàn)場可利用寄存器、存儲單元或堆棧進行子程序的入口參數(shù)和出口參數(shù)傳遞例題5:設MDA和MDB內(nèi)有兩數(shù)a和b,請編出求c=a2+b2并把c送入MDC的程序,設a和b皆為小于10的整數(shù)

SQRTAB

SQR

1008164493625表169410RETMOVCA,@A+PC子程序設計第11頁,課件共21頁,創(chuàng)作于2023年2月

ORG1000HMDADATA20HMDBDATA21MDCDATA22HMOVA,MDA;入口參數(shù)傳遞

ACALLSQR;調(diào)用子程序MOVR1,AMOVA,MDBACALLSQRADDA,R1MOVMDC,ASJMP$SQR:ADDA,#01;子程序MOVCA,@A+PCRET;RET為一個字節(jié)SQRTAB:DB0,1,4,9,16;平方表DB25,36,49,64,81END子程序設計第12頁,課件共21頁,創(chuàng)作于2023年2月練習1:外部RAM從0000H到0080H有一數(shù)據(jù)塊,請編出將它們傳送到3000H到3080H區(qū)域的程序。

解:ORG1000HMOVR0,#00HMOVDPTR,#3000HMOVR2,81HLP1:MOVXA,@R0MOVX@DPTR,AINCR0INCDPTRDJNZR2,LP1END匯編語言程序設計課8第13頁,課件共21頁,創(chuàng)作于2023年2月練習2:某系有200名學生參加外語統(tǒng)考,若成績存放在8031外部RAM始址為ENGLISH的連續(xù)存儲單元,現(xiàn)決定給成績在95分~100分之間的學生頒發(fā)A級合格證書,給成績在90分~94分之間的學生頒發(fā)B級合格證書。試編一程序,可以統(tǒng)計A級和B級證書的學生人數(shù),并把統(tǒng)計結(jié)果分別存入內(nèi)部RAM的GRADA和GRADB單元。匯編語言程序設計LP:MOVXA,@DPTRCJNEA,#95,BRCH123BRCH123:JNCBRCH1CJNEA,#90,BRCH23BRCH23:JCDONEINCGRADBSJMPDONEBRCH1:INCGRADADONE:INCDPTRDJNZR2,LPSJMP$

END解:ORG1000HENGLISHXDATA2000HGRADADATA30HGRADBDATA31HMOVDPTR,#ENGLISHMOVR2,#200MOVGRADA,#00HMOVGRADB,#00H第14頁,課件共21頁,創(chuàng)作于2023年2月練習3:已知:在內(nèi)部RAM中,共有兩組無符號四字節(jié)被加數(shù)和加數(shù)分別存放在FIRST和SECOND為始址的區(qū)域(低字節(jié)在前,高字節(jié)在后),請編程求和(設和也為四字節(jié)),并把和存于SUM開始的區(qū)域。匯編語言程序設計LP:MOVR0,50HMOVA,@R0MOVR0,51HADDCA,@R0MOV@R1,A

INC50HINC51HDJNZR2,LPSJMP$

END解:ORG1000HFIRSTDATA30HSECONDDATA31HMOV50H,#FIRSTMOV51H,#SECONDMOVR1,#SUMMOVR2,#4CLRC第15頁,課件共21頁,創(chuàng)作于2023年2月練習4:已知片內(nèi)RAM的MDA單元和MDB單元分別存有兩個整數(shù)a、b,請用查表子程序?qū)崿F(xiàn)C=a2+2ab+b2,并把和存于片內(nèi)RAM的MDC單元。設a、b均小于5。匯編語言程序設計SQR:ADDA,#1MOVCA,@A+PCRETTAB:DB0,1,4,9,16,25DB36,49,64,100SJMP$

END解:ORG1000HMDADATA30HMDBDATA31HMDCDATA32HMOVA,MDAADDA,MDBACALLSQRMOVMDC,A第16頁,課件共21頁,創(chuàng)作于2023年2月練習5:設晶振頻率為6MHz,試編寫一能延時20ms的子程序。(提示:采用NOP指令延時)匯編語言程序設計DELAY:MOVR3,#20EXT:MOVR2,#50INN:NOPDJNZR2,INNDJNZR3,EXT

RET解:分析:1個機器周期為12/(6*106)=2us,則20ms需消耗20*10-3/(2*10-6)=1000個機器周期NOP為單周期指令,所以需循環(huán)1000次,一個8位的存儲單元只能最大只能存儲255,所以,需要采用雙重循環(huán)。本程序分別采用R2和R3存儲內(nèi)、外循環(huán)次數(shù),內(nèi)循環(huán)50次,外循環(huán)20次。思考:誤差太大,如何精確定時?課9第17頁,課件共21頁,創(chuàng)作于2023年2月練習6:片內(nèi)RAM從30H單元開始存放一個正數(shù)表,以”-1”作為表的結(jié)束標志,編程將該表的長度存入片內(nèi)RAM70H單元。設表的長度小于255匯編語言程序設計LP:MOVA,@R0CJNEA,0FFH,CHKSJMPDONECHK:INC70HSJMPLPDONE:SJMP$

END解:ORG1000HMOVR0,#30HMOV70H,#00H第18頁,課件共21頁,創(chuàng)作于2023年2月EXT:MOVR0,#10H;內(nèi)循環(huán)初始化MOVMAX,@R0MOVA,R2;設置內(nèi)循環(huán)次數(shù)MOVR3,AINN:MOVA,@R0CJNEA,MAX,BRCH1BRCH1:JCNEXTXCHA,MAX;交換MOV@R0,ANEXT:INCR0;指針指向下一個數(shù)

溫馨提示

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

評論

0/150

提交評論