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

下載本文檔

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

文檔簡介

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

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

匯編語言格式及構(gòu)成返回h.BIT(位地址賦值)偽指令字符名稱BIT位地址例:A1BIT00HA2BITP1.0MOVC,A1;將位地址00H的值送Cy

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

匯編語言源程序的匯編人工匯編機(jī)器匯編匯編語言格式及構(gòu)成返回第十頁,共32頁。2.3.4順序程序設(shè)計(jì)例題1:求一個(gè)16位二進(jìn)制負(fù)數(shù)的補(bǔ)碼。設(shè)此16位二進(jìn)制數(shù)存于NUM、NUM+1單元解:補(bǔ)碼=反碼+1ORG1000HNUMDATA20HMOVR0,#NUMMOVA,@R0

CPLAADDA,#01H順序程序設(shè)計(jì)返回MOV@R0,AINCR0MOVA,@R0CPLAADDCA,#00HMOV@R0,ASJMP$END第十一頁,共32頁。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。返回ORG1000HVARDATA30HFUNCDATA31H第十二頁,共32頁。分支程序設(shè)計(jì)MOVA,VARJZDONE;若VAR=0,則轉(zhuǎn)DONEJNBACC.7,POS;若VAR>0,則轉(zhuǎn)POSMOVA,#0FFH;若VAR<0,-1給A

SJMPDONEPOS:MOVA,#01HDONE:MOVFUNC,ASJMP$

END返回課7第十三頁,共32頁。2.3.6循環(huán)和查表程序設(shè)計(jì)循環(huán)和查表程序設(shè)計(jì)例題3:已知內(nèi)部RAMADDR為始址的無符號(hào)數(shù)數(shù)據(jù)塊的塊長存儲(chǔ)于LEN單元內(nèi),請(qǐng)編程找出數(shù)據(jù)塊中的最大數(shù)并存入MAX單元解:ORG1000HLENDATA31HMAXDATA32HADDRDATA40H

MOVR0,#ADDR;R0指向數(shù)據(jù)塊,初始化為;數(shù)據(jù)塊首地址MOVMAX,ADDR;MAX單元初始化返回第十四頁,共32頁。循環(huán)和查表程序設(shè)計(jì)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返回第十五頁,共32頁。例題4:R0的低四位為一個(gè)16進(jìn)制數(shù)碼,編寫程序,將該數(shù)碼對(duì)應(yīng)字符的ASCII編碼送入R1。(例如:若R0的低4位為1110B,對(duì)應(yīng)16進(jìn)制數(shù)碼E,則將字符’E’的ASCII碼送入R1)循環(huán)和查表程序設(shè)計(jì)查表:用于查表的參數(shù)即為所查數(shù)據(jù)在表中的位置,即該存儲(chǔ)地址距離表起始地址的距離。例如:a2表(a為10以內(nèi)的自然數(shù)),根據(jù)a的值查表得a2的值。若a=3,a2=9,該數(shù)據(jù)存儲(chǔ)地址距離表起始地址的距離即為3(個(gè)存儲(chǔ)單元)。執(zhí)行MOVCA,@A+PC指令后,@A+PC即指向該存儲(chǔ)單元。100816449362516941表起始位置0MOVCA,@A+PC第十六頁,共32頁。循環(huán)和查表程序設(shè)計(jì)ASCTAB:DB‘0’,

‘1’,

‘2’,

‘3’;制表DB‘4’,‘5’,

‘6’,

‘7’

DB‘8’,

‘9’‘A’,

‘B’DB

‘C’,

‘D’,

‘E’,

‘F’ENDORG1000HMOVA,R0ANLA,#0FH;此時(shí)A為該字符在;表中的偏移距離ADDA,#03H;查表指令到表的距離MOVCA,@A+PC;查表MOVR1,A;單字節(jié)指令SJMP$;雙字節(jié)指令ROM…‘F’…‘0’…SJMP$MOVR1,AMOVA,@A+PC解:第十七頁,共32頁。2.3.7子程序設(shè)計(jì)子程序可自動(dòng)保護(hù)斷點(diǎn)(即主程序中下一條指令的地址),但不會(huì)自動(dòng)保護(hù)現(xiàn)場(即運(yùn)行子程序前的寄存器狀態(tài)),若要保護(hù)現(xiàn)場,則在子程序的開始部分用壓入堆棧命令保護(hù)現(xiàn)場,在結(jié)束部分用彈出堆棧命令恢復(fù)現(xiàn)場可利用寄存器、存儲(chǔ)單元或堆棧進(jìn)行子程序的入口參數(shù)和出口參數(shù)傳遞子程序設(shè)計(jì)第十八頁,共32頁。例題5:設(shè)片內(nèi)RAM單元MDA和MDB內(nèi)有兩數(shù)a和b,請(qǐng)編出求c=a2+b2并把c送入片內(nèi)MDC單元的程序,設(shè)a和b皆為10以內(nèi)的自然數(shù)。

SQRTAB

1008164493625表169410…子程序設(shè)計(jì)SQRTAB:DB0,1,4,9;平方表DB16,25,36DB49,64,81,100

END第十九頁,共32頁。子程序設(shè)計(jì)

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

ACALLSQR;調(diào)用子程序MOVR1,AMOVA,MDBACALLSQRADDA,R1MOVMDC,ASJMP$SQR:ADDA,#01;子程序MOVCA,@A+PCRET;單字節(jié)指令SQRTAB:DB0,1,4,9,16;平方表DB25,36,49,64,81,100END

SQRTAB

1008164493625表169410RETMOVCA,@A+PC第二十頁,共32頁。練習(xí)1:片外RAM從0000H到007FH有一數(shù)據(jù)塊,請(qǐng)編出將它們傳送到3000H到307FH區(qū)域的程序。

解:ORG1000HMOVR0,#00HMOVDPTR,#3000HMOVR2,#80HLP1:MOVXA,@R0MOVX@DPTR,AINCR0INCDPTRDJNZR2,LP1END匯編語言程序設(shè)計(jì)課8第二十一頁,共32頁。練習(xí)2:有200名學(xué)生的外語統(tǒng)考成績存放在80C51片外RAM始址為ENGLISH的連續(xù)存儲(chǔ)單元,請(qǐng)統(tǒng)計(jì)成績大于等于90分的學(xué)生人數(shù),并把統(tǒng)計(jì)結(jié)果存入片內(nèi)RAM的GRADA單元。匯編語言程序設(shè)計(jì)LP:MOVXA,@DPTRCJNEA,#90,BRCHBRCH:JCNEXTINCGRADANEXT:INCDPTRDJNZR2,LPSJMP$

END解:ORG1000HENGLISHXDATA2000HGRADADATA30HMOVDPTR,#ENGLISHMOVR2,#200MOVGRADA,#00H第二十二頁,共32頁。練習(xí)3:有兩個(gè)四字節(jié)無符號(hào)數(shù)分別存放在片內(nèi)RAM以FIRST和SECOND為始址的區(qū)域(低字節(jié)在前,高字節(jié)在后),請(qǐng)編程將兩數(shù)之和(設(shè)和也為四字節(jié))存于片內(nèi)RAM以SUM為始址的區(qū)域。匯編語言程序設(shè)計(jì)LP:MOVR0,50HMOVA,@R0MOVR0,51HADDCA,@R0MOV@R1,AINC50HINC51HINCR1DJNZR2,LPSJMP$END解:ORG1000HFIRSTDATA20HSECONDDATA30HSUMDATA40HMOV50H,#FIRSTMOV51H,#SECONDMOVR1,#SUMMOVR2,#4CLRC第二十三頁,共32頁。練習(xí)4:已知片內(nèi)RAM的MDA單元和MDB單元分別存有兩個(gè)數(shù)a、b,請(qǐng)用查表子程序?qū)崿F(xiàn)C=a2+2ab+b2,并把C存于片內(nèi)RAM的MDC單元。設(shè)a、b均為5以內(nèi)的自然數(shù)。匯編語言程序設(shè)計(jì)SQR:ADDA,#1MOVCA,@A+PCRETTAB:DB0,1,4,9,16,25DB36,49,64,81DB100

END解:ORG1000HMDADATA30HMDBDATA31HMDCDATA32HMOVA,MDAADDA,MDBACALLSQRMOVMDC,ASJMP$第二十四頁,共32頁。練習(xí)5:片內(nèi)RAM從30H單元開始存放有一個(gè)正數(shù)表,以”-1”作為表的結(jié)束標(biāo)志,編程統(tǒng)計(jì)該表的長度并存入片內(nèi)RAM70H單元。假設(shè)表的長度小于255。匯編語言程序設(shè)計(jì)LP:MOVA,@R0CJNEA,#0FFH,CHKSJMPDONECHK:INC70HSJMPLPDONE:SJMP$

END解:ORG1000HMOVR0,#30HMOV70H,#00H2011機(jī)電3-4班第二十五頁,共32頁。練習(xí)6:設(shè)晶振頻率為6MHz,試編寫一能延時(shí)20ms的子程序。(提示:采用NOP指令延時(shí))匯編語言程序設(shè)計(jì)解:分析:1個(gè)機(jī)器周期為12/(6*106)=2us,則20ms需消耗20*10-3/(2*10-6)=1000個(gè)機(jī)器周期NOP為單周期指令,所以需循環(huán)1000次,一個(gè)8位的存儲(chǔ)單元只能最大只能存儲(chǔ)255,所以,需要采用雙重循環(huán)。本程序分別采用R2和R3存儲(chǔ)內(nèi)、外循環(huán)次數(shù),內(nèi)循環(huán)50次,外循環(huán)20次。第二十六頁,共32頁。匯編語言程序設(shè)計(jì)DELAY:MOVR3,#100EXT:MOVR2,#100INN:NOPDJNZR2,INNDJNZR3,EXT

RET思考:誤差太大,如何精確定時(shí)?課9第二十七頁,共32頁。練習(xí)7:設(shè)8031單片機(jī)片內(nèi)RAM從30H單元開始存放有20個(gè)8位二進(jìn)制數(shù)。要求編一子程序能把它們從大到小依次存入片外RAM從1000H開始的存儲(chǔ)區(qū)。

問題:需考慮排序的算法匯編語言程序設(shè)計(jì)解:ORG1000HMAXDATA30HMOVDP

溫馨提示

  • 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. 人人文庫網(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)論