匯編語言程序設(shè)計_第1頁
匯編語言程序設(shè)計_第2頁
匯編語言程序設(shè)計_第3頁
匯編語言程序設(shè)計_第4頁
匯編語言程序設(shè)計_第5頁
已閱讀5頁,還剩37頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

第5章匯編語言程序設(shè)計教學(xué)目標(biāo)及要求:1了解單片機匯編語言的標(biāo)準(zhǔn)2熟悉單片機的順序、循環(huán)和分支程序設(shè)計方法主要內(nèi)容:1順序與循環(huán)程序設(shè)計2分支程序設(shè)計3查表程序設(shè)計4子程序設(shè)計5綜合編程舉例教學(xué)重點和難點:熟悉單片機循環(huán)和分支程序設(shè)計,掌握單片機各種查表程序的設(shè)計。5.1.2匯編語言的標(biāo)準(zhǔn)一、匯編語言源程序的格式(標(biāo)號:)操作碼操作數(shù),操作數(shù)(;注釋)HF_CON00:MOVA,#30H;30H

A

二、匯編語言偽指令(1)ORG(origin)

ORG1000HMOVA,

#30H

1000H74H1001H30H二、匯編語言偽指令(2)END整個程序結(jié)束例如:MOV30H,AENDMOV40H,A二、匯編語言偽指令(3)EQU(equate)等值偽指令,用在整個程序的最前面,定義變量或常數(shù).BCD_DATA0EQU30HBCD_DATA1EQU31HASCII_VALUEEQU32HHOUR_MAXEQU23二、匯編語言偽指令(3)EQU(equate)MOVA,BCD_DATA0MOVASCII_VALUE,ACJNEA,#HOUR_MAX,HF_CON0二、匯編語言偽指令(4)DB(definebyte)(5)DW定義數(shù)據(jù)常數(shù),用于建表DISP_TAB:DB78HDB00001100BDB‘A’MOVDPTR,#DISP_TABMOVA,#2MOVCA,@A+DPTR二、匯編語言偽指令(6)BIT象EQU一樣,只是定義的是位地址例如:ERR_FLAGBIT00HDISP_FLAGBIT01HP0.0BIT?程序的整體格式:ASCII_VALEQU32HORG0000HLJMPINIT_STARTORG0030HINIT_START:;………;-----------------------------------------------------MAIN_LOOP: LCALLSUB_PROGRAM LJMPMAIN_LOOP;------------------------------------------------------;INPUT:WR0;OUTPUT:WR2;FUN:Addthreebytestothreebytes;-----------------------------------SUB_PROGRAM: RET;--------------------------------- END

5.2.1順序程序設(shè)計例1:把30H單元中壓縮兩個BCD碼拆開成ASCII碼,存入40H,41H單元。BCD_DATAEQU30HASC_DATA0EQU40HASC_DATA1EQU41H;----------------------------------;INPUT:BCD_DATA;OUTPUT:ASC_DATA0/1;FUN:changebcdcodetoascii;----------------------------BCD_TO_ASC:RET例1:把30H單元中壓縮兩個BCD碼拆開成ASCII碼,存入40H,41H單元。563635例1:把30H單元中壓縮兩個BCD碼拆開成ASCII碼,存入40H,41H單元。5630063665300535565.2.1順序程序設(shè)計例2:求一個16位二進制負數(shù)的補碼,設(shè)此16位二進制存放在20H,21H中,求補后送存30H,31H。COMP_DATA0EQU20HCOMP_DATA1EQU21HRESULT0EQU30HRESULT1EQU31H;----------------------------------;INPUT:BU_DATA0/1;OUTPUT:RESULT0/1;FUN:getcomplement;----------------------------CALCULATE_COMP_CODE:RET負數(shù)補碼方法:去掉負號,取反加1

1111000001010101011100000101010110001111101010101000111110101011負數(shù)補碼方法:去掉負號,取反加1

11110000000000000111000000000000100011111111111110010000000000005.2.2循環(huán)程序設(shè)計例4:80C51單片機使用的晶振為6MHz,要求設(shè)計一個軟件延時程序,延時時間為10ms.;----------------------------------;INPUT:NO;OUTPUT:NO;FUN:Delay10ms;R0/2;----------------------------DELAY_10MS:RET計算循環(huán)時間:1T=2usDELAY_10MS:MOVR2,#XXDELAY_LOOP0:DJNZR2,DELAY_LOOP0RET;2T(LCALL);1T;;2T×(XX);2TT(sum)=2T+1T+2T(XX)+2TTmax=2T+1T+2T×256+2T=517×2us=1034usDELAY_10MS:MOVR2,#XXDELAY_LOOP1:MOVR0,#YYDELAY_LOOP0:DJNZR0,DELAY_LOOP0DJNZR2,DELAY_LOOP1RET;2T(LCALL);1T;;1T;;2T×(YY);(1T+2T×(YY)+2T)×XX;2TTs=2T+1T+(1T+2T×(YY)+2T)×XX+2TTs=2T+1T+(1T+2T×(YY)+2T)×XX+2T10×1000=(5+(3+2Y)×X)×2解:(3+2Y)X=4995=5×9×111X=45,Y=54DELAY_10MS:MOVR2,#45DELAY_LOOP1:MOVR0,#54DELAY_LOOP0:DJNZR0,DELAY_LOOP0DJNZR2,DELAY_LOOP1RETDELAY_10MS:MOVR2,#XXDELAY_LOOP1:MOVR0,#YYDELAY_LOOP0:NOPNOPDJNZR0,DELAY_LOOP0DJNZR2,DELAY_LOOP1RET;2T(LCALL);1T;;1T;;4T×(YY);;;(1T+4T×(YY)+2T)×XX;2TDELAY_10MS:MOVR2,#XXDELAY_LOOP1:MOVR0,#YYDELAY_LOOP0:DJNZR0,DELAY_LOOP0NOPNOPDJNZR2,DELAY_LOOP1RET;2T(LCALL);1T;;1T;;2T×(YY);;;(1T+2T×(YY)+4T)×XX;2TDELAY_10MS:MOVR2,#XXDELAY_LOOP1:MOVR0,#YYDELAY_LOOP0:DJNZR0,DELAY_LOOP0DJNZR2,DELAY_LOOP1NOPNOPRET;2T(LCALL);1T;;1T;;2T×(YY);(1T+2T×(YY)+2T)×XX;1T;1T;2T5.2.2循環(huán)程序設(shè)計例5:用P1口作為數(shù)據(jù)讀入口,為了讀取穩(wěn)定的值,要求讀8次后取平均。;----------------------------------;INPUT:NO;OUTPUT:R1;VAR:R0/1/2;FUN:getaverageofreadingP1eighttimes.;----------------------------AVERAGE_OF_P1:RET5.2.2循環(huán)程序設(shè)計例5:將20H單元內(nèi)的兩個BCD數(shù)相乘,相乘的結(jié)果要求仍為BCD數(shù),乘積存入21H單元。;----------------------------------;INPUT:BCD;OUTPUT:BCD_RESULT;VAR:;FUN:BCD×BCDBCD;----------------------------MUL_BCD:RET750705×0707070707+5次5.3分支程序設(shè)計

5.3.2無條件/條件轉(zhuǎn)移程序例1:設(shè)5AH單元中有一變量X,請編寫計算下述函數(shù)式,結(jié)果存入5BH單元.X2–1;X<10Y=X2+8;10≦X≦1541;X>155.3分支程序設(shè)計

5.3.3散轉(zhuǎn)程序設(shè)計1、采用轉(zhuǎn)移指令表2、采用地址偏移量表3、采用轉(zhuǎn)向地址表例2根據(jù)R7的內(nèi)容,轉(zhuǎn)向各個操作程序R7=0,轉(zhuǎn)入OPR0R7=1,轉(zhuǎn)入OPR1....R7=n,轉(zhuǎn)入OPRnMOVDPTR,#JPTAB1MOVA,R7ADDA,R7JNCNOADINCDPHNOAD:JMP@A+DPTRJPTAB1:AJMPOPR0AJMPOPR1....AJMPOPRn5.4查表程序設(shè)計5.4.2規(guī)那么變量的查表程序設(shè)計例1:設(shè)計一個將十六進制數(shù)轉(zhuǎn)換成ASCII碼的子程序.設(shè)十六進制數(shù)存放在R0中的低4位,要求將轉(zhuǎn)換后的ASCII碼送回R0中.MOVA,R0ANLA,#0FHADDA,#02HMOVCA,@A+PCMOVR0,ARETTAB:DB30H,31H,32H,33H,34H,35H,36H,37HDB38H,39H,41H,42H,43H,44H,45H,46HMOVDPTR,#TABMOVA,R0ANLA,#0FHMOVCA,@A+DPTRMOVR0,ARETTAB:DB30H,31H,32H,33H,34H,35H,36H,37HDB38H,39H,41H,42H,43H,44H,45H,46H5.4查表程序設(shè)計5.4.2非規(guī)那么變量的查表程序設(shè)計例3:Y=f〔X〕X0123H0234H085AH……0AC4HY34A7H5678HAC23H……E345H設(shè)子程序中,X值存放在X_H和X_L單元中,一旦找到X的存放地址,相應(yīng)的Y值就在其后的兩個單元中.所查到的Y值放到Y(jié)_H和Y_L中.TAB:DB01H,23H

DB34H,0A7H

DB02H,34HDB56H,78HDB08H,5AHDB0ACH,23HDB0AH,0C4HDB0E3H,045H

X:0123HY:34A7H

X_H:08HX_L:5AHY_H:0ACHY_L:23HMOVCA,@A+DPTRMOVY_H,AINCDPTRMOVCA,@A+DPTRMOVY_L,ARETNO_SAME1:INCDPTRNO_SAME2:INCDPTRINCDPTRINCDPTRLJMPLOOP

MOVDPTR,#TABLOOP:

CLRAMOVCA,@A+DPTRCJNEA,X_H,NO_SAME1INCDPTRMOVCA,@A+DPTRCJNEA,X_L,NO_SAME2INCDPTRMOVDPTR,#TABLP:CLRAMOVCA,@A+DPTRCJNEA,X_H,LP1INCDPTRMOVCA,@A+DPTRCJNEA,X_L,LP2INCDPTRMOVCA,@A+DPTRMOVY_H,AINCDPTRMOVCA,@A+DPTRMOVY_L,ARETLP1:INCDPTRLP2:INCDPTRINCDPTRINCDPTRLJMPLPMOVA,END_H

溫馨提示

  • 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)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

最新文檔

評論

0/150

提交評論