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

下載本文檔

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

文檔簡介

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

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

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

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

ORG1000HNUMDATA20HMOVR0,#NUMMOVA,@R0

CPLAADDA,#01HMOV@R0,AINCR0

MOVA,@R0

CPLAADDCA,#00HMOV@R0,ASJMP$END順序程序設(shè)計(jì)返回課7第7頁,課件共21頁,創(chuàng)作于2023年2月2.3.5分支程序設(shè)計(jì)分支程序設(shè)計(jì)例題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)和查表程序設(shè)計(jì)循環(huán)和查表程序設(shè)計(jì)例題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)體,將一個(gè)數(shù)取到ACJNEA,MAX,BRCH;比較該數(shù)與MAX的大小BRCH:JCNEXT;若該數(shù)小,則進(jìn)行下一次循環(huán)XCHA,MAX;若該數(shù)大,則與MAX交換NEXT:INCR0;為下一次循環(huán)做準(zhǔn)備DJNZLEN,LOOP;判斷循環(huán)次數(shù)SJMP$END返回第9頁,課件共21頁,創(chuàng)作于2023年2月例題4:R0的低四位對應(yīng)一個(gè)16進(jìn)制數(shù)碼,編寫程序,將該數(shù)碼對應(yīng)字符的ASCII編碼送入R1。(例如:若R0的低4位為1110B,對應(yīng)16進(jìn)制數(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;指令長度為一個(gè)字節(jié)SJMP$;指令長度為兩個(gè)字節(jié)ASCTAB:DB‘0’,

‘1’,

‘2’,

‘3’,

‘4’;制表DB‘5’,

‘6’,

‘7’,

‘8’,

‘9’DB‘A’,

‘B’,

‘C’,

‘D’,

‘E’,

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

SQRTAB

SQR

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

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

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

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

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

INC50HINC51HDJNZR2,LPSJMP$

END解:ORG1000HFIRSTDATA30HSECONDDATA31HMOV50H,#FIRSTMOV51H,#SECONDMOVR1,#SUMMOVR2,#4CLRC第15頁,課件共21頁,創(chuàng)作于2023年2月練習(xí)4:已知片內(nèi)RAM的MDA單元和MDB單元分別存有兩個(gè)整數(shù)a、b,請用查表子程序?qū)崿F(xiàn)C=a2+2ab+b2,并把和存于片內(nèi)RAM的MDC單元。設(shè)a、b均小于5。匯編語言程序設(shè)計(jì)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月練習(xí)5:設(shè)晶振頻率為6MHz,試編寫一能延時(shí)20ms的子程序。(提示:采用NOP指令延時(shí))匯編語言程序設(shè)計(jì)DELAY:MOVR3,#20EXT:MOVR2,#50INN:NOPDJNZR2,INNDJNZR3,EXT

RET解:分析:1個(gè)機(jī)器周期為12/(6*106)=2us,則20ms需消耗20*10-3/(2*10-6)=1000個(gè)機(jī)器周期NOP為單周期指令,所以需循環(huán)1000次,一個(gè)8位的存儲單元只能最大只能存儲255,所以,需要采用雙重循環(huán)。本程序分別采用R2和R3存儲內(nèi)、外循環(huán)次數(shù),內(nèi)循環(huán)50次,外循環(huán)20次。思考:誤差太大,如何精確定時(shí)?課9第17頁,課件共21頁,創(chuàng)作于2023年2月練習(xí)6:片內(nèi)RAM從30H單元開始存放一個(gè)正數(shù)表,以”-1”作為表的結(jié)束標(biāo)志,編程將該表的長度存入片內(nèi)RAM70H單元。設(shè)表的長度小于255匯編語言程序設(shè)計(jì)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;設(shè)置內(nèi)循環(huán)次數(shù)MOVR3,AINN:MOVA,@R0CJNEA,MAX,BRCH1BRCH1:JCNEXTXCHA,MAX;交換MOV@R0,ANEXT:INCR0;指針指向下一個(gè)數(shù)

溫馨提示

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

評論

0/150

提交評論