第4章 89S51的匯編語言程序設(shè)計(jì)_第1頁
第4章 89S51的匯編語言程序設(shè)計(jì)_第2頁
第4章 89S51的匯編語言程序設(shè)計(jì)_第3頁
第4章 89S51的匯編語言程序設(shè)計(jì)_第4頁
第4章 89S51的匯編語言程序設(shè)計(jì)_第5頁
已閱讀5頁,還剩50頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡(jiǎn)介

第4章89S51的匯編語言程序設(shè)計(jì)程序編制的方法和技巧4.1源程序的編輯和匯編4.2基本程序結(jié)構(gòu)4.3子程序及其調(diào)用4.42023/2/51

單片機(jī)應(yīng)用系統(tǒng)由硬件系統(tǒng)和應(yīng)用程序構(gòu)成。

匯編語言高級(jí)語言(例如,C語言)

應(yīng)用程序設(shè)計(jì)方法

匯編語言,生成的目標(biāo)程序占內(nèi)存空間少、運(yùn)行速度快,具有效率高、實(shí)時(shí)性強(qiáng)的特點(diǎn)。

高級(jí)語言,對(duì)系統(tǒng)的描述與實(shí)現(xiàn)與人的思維相似,程序閱讀、修改和移植方便,適合于編寫復(fù)雜的程序。2023/2/524.1程序編制的方法和技巧4.1.1程序編制的步驟

明確任務(wù):功能要求、技術(shù)指標(biāo)運(yùn)行環(huán)境調(diào)研

任務(wù)分析

將實(shí)際問題轉(zhuǎn)化為計(jì)算機(jī)處理的程序算法。算法比較與優(yōu)化(內(nèi)存需求、運(yùn)行速度、效率)。

算法設(shè)計(jì)2023/2/53強(qiáng)化模塊觀念使程序結(jié)構(gòu)清晰。簡(jiǎn)化代碼。程序模塊(主程序模塊、各種子程序模塊)模塊化優(yōu)點(diǎn):分塊設(shè)計(jì)、層次清晰、便于接口。4.1.2程序編制的方法和技巧采用循環(huán)和子程序的優(yōu)點(diǎn)注意:1、循環(huán)初值和結(jié)束條件,避免“死循環(huán)”現(xiàn)象。

2、子程序的現(xiàn)場(chǎng)保護(hù)。2023/2/544.1.3匯編語言的語句格式標(biāo)號(hào)代表本行程序所在的地址。標(biāo)號(hào)由1~8個(gè)ASCII碼字符組成,第一個(gè)字符必須是字母。不能用已定義的關(guān)鍵字(指令助記符、偽指令等)。同一標(biāo)號(hào)在一個(gè)程序中只能定義一次,不能重復(fù)定義。標(biāo)號(hào)后跟英文冒號(hào)“:”。標(biāo)號(hào)(即符號(hào)地址)[標(biāo)號(hào):]指令助記符

[操作數(shù)1,][操作數(shù)2,][操作數(shù)3,][;注釋]2023/2/55數(shù)據(jù):二進(jìn)制(B)十進(jìn)制(D或省略D)十六進(jìn)制(H)。

注意:若十六進(jìn)制操作數(shù)以字符A~F開頭,需在它前面加一個(gè)“0”,以便匯編時(shí)把它和標(biāo)號(hào)區(qū)分開。符號(hào):符號(hào)名、標(biāo)號(hào)或“$”。表達(dá)式:由運(yùn)算符和數(shù)據(jù)構(gòu)成。操作數(shù)2023/2/56注釋英文分號(hào)“;”開頭。匯編時(shí),遇到“;”就停止“翻譯”。因此,注釋字段不會(huì)產(chǎn)生機(jī)器代碼。2023/2/574.2.1偽指令4.2源程序的編輯4.2.2源程序的編輯2023/2/584.2.1偽指令偽指令:用于指導(dǎo)匯編工作。匯編后,偽指令沒有與之對(duì)應(yīng)的機(jī)器代碼。起始地址設(shè)定偽指令ORGORG表達(dá)式表達(dá)式通常為十六進(jìn)制地址,例:

ORG8000HSTART:MOVA,#30H……ORG可多次使用,但地址值的順序要由小到大。2023/2/59結(jié)束匯編偽指令ENDEND該偽指令位于源程序的最后一行,表示匯編到此結(jié)束。整個(gè)源程序中只能有一條END命令,且位于程序的最后。對(duì)于END之后的程序,將不進(jìn)行匯編處理。2023/2/510定義字節(jié)數(shù)據(jù)表偽指令DB定義字?jǐn)?shù)據(jù)表偽指令DW1000H[標(biāo)號(hào):]DB字節(jié)數(shù)據(jù)表ORG1000HDB-2,-4,-6,8,10,18FEHFCHFAH08H0AH12H1001H[標(biāo)號(hào):]DW字?jǐn)?shù)據(jù)表ORG1400HDATA1:DW324AH,3CH1400H32H4AH00H3CH1401H1402H1403H注意:字母按ASCII碼存儲(chǔ)。2023/2/511預(yù)留空間偽指令DS[標(biāo)號(hào):]DS預(yù)留空間字節(jié)數(shù)ORG2000HTAB1:DB12H,34HDS4HDB'5'12H34H----35H3000H3001H3002H3003H3004H3005H3006H2023/2/512定義常量值的偽指令EQU符號(hào)名EQU常值表達(dá)式

LEN

EQU10

SUM

EQU21HBLOCK

EQU22HMOVR7,#LENMOVR0,#BLOCKMOVSUM,A2023/2/513位定義命令BIT用于給字符名稱賦予位地址,位地址可以是絕對(duì)位地址,也可是符號(hào)地址。例如:LED BITP1.6功能是把P1.6的位地址賦給變量LED。2023/2/5144.2.2源程序的編輯源程序的編輯

ORG0000HLJMPMAIN

ORG0040HMAIN:MOVR7,#16MOVR0,#60HMOVA,#55HLOOP:MOV@R0,AINCR0DJNZR7,LOOPSJMP$

END依據(jù)匯編語言規(guī)則用好偽指令符號(hào)不用中文匯編程序以.ASM存盤2023/2/5154.3.1順序程序(無分支、無循環(huán))4.3基本程序結(jié)構(gòu)

ORG0040HSTART:MOVA,21H;取21H的內(nèi)容ANLA,#0FH;保留低半字節(jié)SWAPA;移至高半字節(jié)MOV20H,A;存于20H單元MOVA,22H;取22H的內(nèi)容ANLA,#0FH;保留低半字節(jié)ORL20H,A;合并到結(jié)果單元SJMP$;等待END2023/2/5164.3.2分支程序(雙分支)【例】實(shí)現(xiàn)兩個(gè)8位無符號(hào)數(shù)求和的子程序。SADD:MOVA,R3;取加數(shù)(在R3中)

CLRCADDA,R4;被加數(shù)(在R4中)加AJCPP1MOVR3,#00H;結(jié)果小于255時(shí),高字節(jié)R3內(nèi)容為00HSJMPPP2PP1:MOVR3,#01H;結(jié)果大于255時(shí),高字節(jié)R3內(nèi)容為01HPP2:MOVR4,A;結(jié)果的低字節(jié)在R4中

RET入口:(R3)=加數(shù);(R4)=被加數(shù)。出口:(R3)=和的高字節(jié);(R4)=和的低字節(jié)。2023/2/517【例】求單字節(jié)有符號(hào)數(shù)的二進(jìn)制補(bǔ)碼。

正數(shù)補(bǔ)碼是其本身,負(fù)數(shù)補(bǔ)碼是其反碼加1。因此,應(yīng)首先判被轉(zhuǎn)換數(shù)的符號(hào),負(fù)數(shù)進(jìn)行轉(zhuǎn)換,正數(shù)本身即為補(bǔ)碼。設(shè)二進(jìn)制數(shù)放在A中,其補(bǔ)碼放回到A中。參考程序如下:

CMPT:JNBAcc.7,RETURN ;(A)>0,不需轉(zhuǎn)換 MOV C,Acc.7 ;符號(hào)位保存 CPLA ;(A)求反,加1 ADD A,#1 MOVAcc.7,C ;符號(hào)位存在A的最高位RETURN:RET2023/2/5184.3.2分支程序(多分支)多分支結(jié)構(gòu)是程序中常見的結(jié)構(gòu),在多分支結(jié)構(gòu)的程序中,能夠按調(diào)用號(hào)執(zhí)行相應(yīng)的功能,完成指定操作。若給出調(diào)用號(hào)來調(diào)用子程序,一般用查表方法,查到子程序的地址,轉(zhuǎn)到相應(yīng)子程序。2023/2/519指令系統(tǒng)提供了非常有用的兩種多分支選擇指令:間接轉(zhuǎn)移指令

JMP@A+DPTR比較轉(zhuǎn)移指令

CJNEA,direct,rel CJNEA,#data,rel CJNERn,#data,rel CJNE@Ri,#data,rel間接轉(zhuǎn)移指令“JMP@A+DPTR”由數(shù)據(jù)指針DPTR決定多分支轉(zhuǎn)移程序的首地址,由A的內(nèi)容選擇對(duì)應(yīng)分支。4條比較轉(zhuǎn)移指令CJNE能對(duì)兩個(gè)欲比較的單元內(nèi)容進(jìn)行比較,當(dāng)不相等時(shí),程序?qū)崿F(xiàn)相對(duì)轉(zhuǎn)移;若兩者相等,則順序往下執(zhí)行。2023/2/520【例】設(shè)變量x存放在片內(nèi)RAM的30H單元,變量y與x的關(guān)系是:當(dāng)x大于0時(shí),y=x;當(dāng)x=0時(shí),y=20H;當(dāng)x小于0時(shí),y=x+5。編制程序,根據(jù)x的大小求y,并送回原單元。2023/2/521

ORG0040HSTART:MOVA,30H;取x至累加器

JZNEXT;x=0,轉(zhuǎn)NEXTANLA,#80H;否,保留符號(hào)位

JZDONE;x>0,轉(zhuǎn)結(jié)束

MOVA,#05H;x<0處理

ADDA,30HMOV30H,A;X+05H送YSJMPDONENEXT:MOV30H,#20H;x=0,20H送YDONE:SJMPDONEEND2023/2/522【例】求符號(hào)函數(shù)的值。符號(hào)函數(shù)定義如下:

X存放在40H單元,Y存放在41H單元。Y=1X

>0X

<0X

=00-12023/2/523程序如下:SIGNFUC:MOVA,40H CJNEA,#00H,NZEAR AJMPNEGTNZEAR:JBAcc.7,

POSI MOVA,#01H AJMPNEGTPOSI:

MOVA,#81HNEGT: MOV41H,

A END 2023/2/524【例】根據(jù)R7的內(nèi)容x(轉(zhuǎn)移序號(hào))轉(zhuǎn)向相應(yīng)的處理程序。設(shè)R7內(nèi)容為0~4,對(duì)應(yīng)的處理程序入口地址分別為PP0~PP4。

2023/2/525START:MOVR7,#3;轉(zhuǎn)移序號(hào)為3,欲轉(zhuǎn)向PP3

ACALLJPNUM;子程序調(diào)用AJMPSTARTJPNUM:MOVDPTR,#TAB;DPTR指向分支入口的表首地址

MOVA,R7

ADDA,R7;R7乘2,調(diào)整偏移量(3x2=6)

MOVR3,A;A=R3=6MOVCA,@A+DPTR;先取PP3的高字節(jié)(PP3是DW)XCHA,R3;高字節(jié)暫存于R3INCA;增1后,A=7,指向下一個(gè)MOVCA,@A+DPTR;再取PP3的低字節(jié)

MOVDPL,A;處理程序入口地址低8位送DPLMOVDPH,R3;處理程序入口地址高8位送DPHCLRA;DPTR指向PP3地址

JMP@A+DPTR;跳轉(zhuǎn)向PP3服務(wù)程序2023/2/526TAB:DWPP0;TAB是轉(zhuǎn)移地址表DWPP1DWPP2

DWPP3DWPP4PP0:MOV30H,#0;轉(zhuǎn)移序號(hào)為0時(shí),置功能號(hào)“0”于30H單元

RETPP1:MOV30H,#1;轉(zhuǎn)移序號(hào)為1時(shí),置功能號(hào)“1”于30H單元

RETPP2:MOV30H,#2;轉(zhuǎn)移序號(hào)為2時(shí),置功能號(hào)“2”于30H單元

RET

PP3:MOV30H,#3;轉(zhuǎn)移序號(hào)為3時(shí),置功能號(hào)“3”于30H單元

RETPP4:MOV30H,#4;轉(zhuǎn)移序號(hào)為4時(shí),置功能號(hào)“4”于30H單元

RET 2023/2/5274.3.3查表程序【例4-3】

設(shè)計(jì)一子程序,功能是根據(jù)累加器A中的數(shù)x(0~9之間)查x的平方表y,根據(jù)x的值查出相應(yīng)的平方y(tǒng)。本例中的x和y均為單字節(jié)數(shù)。

ADDA,#01H MOVCA,@A+PC RETDB00H,01H,04H,09H,10H DB19H,24H,31H,40H,51H

;數(shù)0~9的平方表

2023/2/528指令“ADDA,#01H”的作用是A中的內(nèi)容加上“01H”,“01H”即為查表指令與平方表之間的“RET”指令所占的字節(jié)數(shù)。加上“01H”后,可保證PC指向表首,累加器A中原來的內(nèi)容僅是從表首開始向下查找多少個(gè)單元。在進(jìn)入程序前,A的內(nèi)容在00~09H之間,如A中的內(nèi)容為02H,它的平方為04H,可根據(jù)A的內(nèi)容查出x的平方。指令“MOVCA,@A+DPTR”應(yīng)用范圍較廣,使用該指令時(shí)不必計(jì)算偏移量,優(yōu)點(diǎn)是表格可以設(shè)在64KB程序存儲(chǔ)器空間內(nèi)的任何地方,而不像“MOVCA,@A+PC”那樣只設(shè)在PC下面的256個(gè)單元中,所以使用較方便。2023/2/529如果DPTR已被使用,則在查表前必須保護(hù)DPTR,且結(jié)束后恢復(fù)DPTR,例4-3可改成如下形式:

PUSHDPH ;保存DPH PUSHDPL ;保存DPL

MOVDPTR,#TAB1 MOVC A,@A+DPTR POPDPL ;恢復(fù)DPL POPDPH ;恢復(fù)DPH RETTAB1:

DB 00H,01H,04H,09H,10H;平方表

DB 19H,24H,31H,40H,51H2023/2/530【例4-4】有一巡回檢測(cè)報(bào)警裝置,需對(duì)16路(x)輸入進(jìn)行檢測(cè),每路有一個(gè)最大允許值(y),為雙字節(jié)數(shù)。需根據(jù)測(cè)量的路數(shù)(x),查表找出對(duì)應(yīng)該路的最大允許值(y),看輸入值是否大于最大允許值,如果大于就報(bào)警。取路數(shù)為x(0≤x≤15),y為最大允許值,放在表格中。設(shè)進(jìn)入查表程序前,假設(shè)路數(shù)x已放于R2中,查表后該路的最大允許值y放于R3R4中。查表的程序如下:理解:根據(jù)路數(shù)x,查最大允許值y。2023/2/531

TB3:

MOVA,R2 ADD A,R2 ;(R2)*2→(A) MOVR3,A ;保存指針

ADD A,#6 ;加偏移量

MOVCA,@A+PC ;查第一字節(jié)

XCH A,R3 ADD A,#3

MOVCA,@A+PC ;查第二字節(jié)

MOV R4,A RETTAB3:

DW 1520,3721,42645,7580;最大值表 DW 3483,32657,883,9943 DW 10000,40511,6758,8931 DW 4468,5871,13284,278082023/2/532表格長度不能超過256B,且表格只能存放于“MOVCA,@A+PC”指令以下的256個(gè)單元中,如需把表格放在程序存儲(chǔ)器空間的任何地方,應(yīng)使用指令“MOVCA,@A+DPTR”?!纠?-5】

以AT89S51為核心的溫度控制器,溫度傳感器輸出的電壓與溫度為非線性關(guān)系,傳感器輸出的電壓已由A/D轉(zhuǎn)換為10位二進(jìn)制數(shù)。測(cè)得的不同溫度下的電壓值數(shù)據(jù)構(gòu)成一個(gè)表,表中溫度值為y(雙字節(jié)無符號(hào)數(shù)),x(雙字節(jié)無符號(hào)數(shù))為電壓值數(shù)據(jù)。設(shè)測(cè)得電壓值x放入R2R3中,根據(jù)電壓值x,查找對(duì)應(yīng)的溫度值y,仍放入R2R3中。參考程序:理解:根據(jù)電壓值x,查溫度值y。2023/2/533

LTB2:MOV DPTR,#TAB2 MOV A,R3 CLR C RLC A MOV R3,A XCH A,R2 RLC A XCH R2,A ADD A,DPL;(R2R3)+(DPTR)→(DPTR) MOV DPL,A MOV A,DPH ADDCA,R2 MOV DPH,A CLR A2023/2/534

MOVCA,@A+DPTR;查第一字節(jié) MOV R2,A;第一字節(jié)存入R2中 CLR A INC DPTR MOVCA,@A+DPTR;查第二字節(jié) MOV R3,A ;第二字節(jié)存入R3中 RETTAB2:

DW …,…,…

;溫度值表由于使用了指令“MOVCA,@A+DPTR”,表TAB2可放入64KB程序存儲(chǔ)器空間任何位置,表格的長度可大于256B。2023/2/5354.3.4查找關(guān)鍵字在表中查找關(guān)鍵字的操作,也稱為數(shù)據(jù)檢索?!纠?-6】

從50個(gè)字節(jié)的表中查找一個(gè)關(guān)鍵字“xxH”。ORG 1000HMOV 30H,#xxH

;關(guān)鍵字xxH送30H單元MOV R1,#50 ;查找次數(shù)送R1MOV A,#14 ;修正值送AMOVDPTR,#TAB4 ;表首地址送DPTR2023/2/536LOOP: PUSHAcc MOVCA,@A+PC ;查表結(jié)果送A CJNEA,40H,LOOP1;(40H)不等于關(guān)鍵字則轉(zhuǎn)LOOP1 MOVR2,DPH ;查到關(guān)鍵字,把地址送R2,R3 MOVR3,DPL DONE:

RETLOOP1:POP Acc ;修正值彈出 INC A ;A+1→A INC DPTR ;修改數(shù)據(jù)指針DPTR DJNZR1,LOOP ;R1≠0,未查完,繼續(xù)查找 MOV R2,#00H ;R1=0,R2和R3清0 MOV R3,#00H ;表中50個(gè)數(shù)已查完 AJMP DONE ;從子程序返回

TAB4: DB …,…,…

;50個(gè)數(shù)據(jù)表2023/2/5374.3.5查找最值

【例4-7】片內(nèi)RAM中存放一批數(shù)據(jù),查找出最大值并存放于首地址中。設(shè)R0中存放首地址,R2中存放字節(jié)數(shù)。程序如下: MOVR2,n ;n為要比較的數(shù)據(jù)字節(jié)數(shù) MOVA,R0 ;存首地址指針 MOVR1,A DECR2 MOVA,@R12023/2/538LOOP: MOV R3,

A DEC R1 CLR C SUBBA,@R1;兩個(gè)數(shù)比較 JNC LOOP1;C=0,A中數(shù)大,跳LOOP1 MOVA,@R1;C=1,則大數(shù)送A SJMPLOOP2LOOP1:MOVA,R3LOOP2:DJNZR2,

LOOP ;是否比較結(jié)束? MOV @R0,

A ;存最大數(shù)

RET2023/2/539【例】將內(nèi)部RAM的30H至3FH單元初始化為00H。MOV30H,#00H;MOV31H,#00H;…………MOV3EH,#00H;MOV3FH,#00H;2023/2/5404.3.6循環(huán)程序1.循環(huán)程序的結(jié)構(gòu):主要由以下四部分組成。(1)循環(huán)初始化完成循環(huán)前的準(zhǔn)備工作。例如,設(shè)置循環(huán)控制計(jì)數(shù)初值、起始地址、變量初值等。(2)循環(huán)體完成實(shí)際的處理工作,反復(fù)執(zhí)行循環(huán)體。(3)循環(huán)控制在重復(fù)執(zhí)行循環(huán)體的過程中,不斷修改循環(huán)控制變量,直到符合結(jié)束條件,就結(jié)束循環(huán)體的執(zhí)行。循環(huán)結(jié)束的控制方法有計(jì)數(shù)控制法和條件控制法。(4)循環(huán)結(jié)束對(duì)循環(huán)程序執(zhí)行的結(jié)果進(jìn)行分析、處理和存放。2023/2/541(1)計(jì)數(shù)控制法

依據(jù)計(jì)數(shù)器的值來決定循環(huán)次數(shù),一般為減1計(jì)數(shù)器,計(jì)數(shù)器減到“0”時(shí),結(jié)束循環(huán)。計(jì)數(shù)器初值在初始化設(shè)定。MCS-51指令系統(tǒng)提供了功能極強(qiáng)的循環(huán)控制指令:DJNZRn,rel

;以工作寄存器作控制計(jì)數(shù)器DJNZdirect,rel

;以直接尋址單元作控制計(jì)數(shù)器

2023/2/542【例】將內(nèi)部RAM的30H至3FH單元初始化為00H。MAIN:MOVR0,#30H;R0用作地址指針,置地址初值MOVR7,#16;計(jì)數(shù)值,16個(gè)單元MOVA,#00H;LOOP:MOV@R0,A;循環(huán)處理

INCR0;指向下一個(gè)單元DJNZR7,LOOP;循環(huán)

SJMP$;等待2023/2/543例:對(duì)RAM中22H開始的10個(gè)單元的數(shù)據(jù)求和,并將求和的結(jié)果放在21H單元中。CLRAMOVR7,#10;計(jì)數(shù)初值MOVR0,#22H;R0作為數(shù)據(jù)單元指針LOOP:ADDA,@R0INCR0DJNZR7,LOOPMOV21H,A2023/2/544(2)條件控制法

計(jì)數(shù)控制法只有在循環(huán)次數(shù)已知的情況下才適用。循環(huán)次數(shù)未知,不能用循環(huán)次數(shù)來控制,往往需要根據(jù)某種條件來判斷是否應(yīng)該結(jié)束循環(huán)。條件控制法:設(shè)置一個(gè)條件,判斷是否滿足該條件。如滿足,則循環(huán)結(jié)束;如不滿足該條件,則循環(huán)繼續(xù)。

2023/2/545【例】將內(nèi)部RAM起始地址為60H的數(shù)據(jù)串傳送到外部RAM中起始地址為1000H的存儲(chǔ)區(qū)域,直到發(fā)現(xiàn)‘$’字符停止傳送。MAIN:MOVR0,#60H;置初值

MOVDPTR,#1000HLOOP0:MOVA,@R0;取數(shù)據(jù)CJNEA,#24H,LOOP1;循環(huán)結(jié)束?SJMPDONE;是LOOP1:MOVX@DPTR,A;把A的內(nèi)容傳到片外

INCR0;片內(nèi):指向下一個(gè)單元

INCDPTR;片外:指向下一個(gè)單元SJMPLOOP0;繼續(xù)循環(huán)DONE:SJMPDONE;等待2023/2/546【例4-13】

一串字符,依次存放在內(nèi)部RAM從30H單元開始的單元中,字符串以0AH為結(jié)束標(biāo)志,測(cè)試字符串的長度。采用逐個(gè)字符依次與“0AH”比較(設(shè)置的條件)的方法。設(shè)置一個(gè)累計(jì)字符串長度的計(jì)數(shù)器和一個(gè)指向字符串的指針。如果字符與“0AH”不等,則長度計(jì)數(shù)器和字符串指針都加1;如果比較相等,則表示該字符為“0AH”,字符串結(jié)束,計(jì)數(shù)器值就是字符串的長度。程序如下:2023/2/547

MOV R4,#0FFH ;長度計(jì)數(shù)器初值送R4 MOVR1,#2FH ;字符串指針初值送R1NEXT:

INC R4 INC R1 CJNE@R1,#0AH,NEXT;比較,不等則進(jìn)行下一;字符比較 END上面兩例都是在一個(gè)循環(huán)程序中不再包含其他循環(huán)程序,則稱該循環(huán)程序?yàn)閱沃匮h(huán)。如果一個(gè)循環(huán)程序中包含了其他循環(huán)程序,則稱為多重循環(huán)。常見的多重循環(huán)是由DJNZ指令構(gòu)成的軟件延時(shí)程序,是常用程序之一。2023/2/548【例4-14】

50ms的延時(shí)程序。

在使用12MHz晶振時(shí),一個(gè)機(jī)器周期為1μs,執(zhí)行一條DJNZ指令的時(shí)間為2μs。可用多重循環(huán)的方法的延時(shí)50ms程序:

DEL:MOVR7,#200 ;本指令執(zhí)行時(shí)間1μs

DEL1:MOVR6,#125 ;本指令執(zhí)行時(shí)間1μ

溫馨提示

  • 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)論