編程實(shí)現(xiàn)將內(nèi)部RAM_第1頁
編程實(shí)現(xiàn)將內(nèi)部RAM_第2頁
編程實(shí)現(xiàn)將內(nèi)部RAM_第3頁
編程實(shí)現(xiàn)將內(nèi)部RAM_第4頁
編程實(shí)現(xiàn)將內(nèi)部RAM_第5頁
已閱讀5頁,還剩57頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡介

內(nèi)容示意圖00H69H99H68H88H67H77H66H66H65H55H64H44H63H33R62H22H61H11H60HOFFH00HOFOHODEHOBCH9AH78H56H34I12H內(nèi)容39H38H37H36H35H34H33H32H31H30H地址1、編程實(shí)現(xiàn)將內(nèi)部RAM30H開始的10個(gè)單元內(nèi)容和60H開始的10

個(gè)單元內(nèi)容對應(yīng)一一互相交換,單元內(nèi)容自定,交換前內(nèi)部RAM地址內(nèi)容地址OFFH69H00H68HOFOH67HODEH66HOBCH65H9AB64H78H63H56H62H34H61H12H60HI00H39H99H38H88H37H77H36H66H35H55H34H44H33H33H32H22H31H11H30H交換后內(nèi)部RAM示意圖內(nèi)容地址1、程序功能----數(shù)據(jù)交換2、

程序結(jié)構(gòu)----循環(huán)結(jié)構(gòu)環(huán)3、

數(shù)據(jù)存放位置----均在內(nèi)部RAM4、

傳送方式-----順序傳送XCH/

MOVDJNZ

循R0,R1尋址指針同時(shí)INC解題思路:ORG

0000HMOVR0,#30HMOV

R1,#60HMOV

R7,#10LOOP:MOVA,ROXCH

A,R1MOV

RO,AINC

ROINC

R1DJNZ

R7,LOOP開始設(shè)置源指針R0設(shè)置目的指針R1

設(shè)置計(jì)數(shù)器R7取源數(shù)據(jù)→AA←→

目的單元A→

源數(shù)據(jù)單元修改源指針R0修改目的指針R1過數(shù)器R7-1-0結(jié)束SJMPENDN$解題思路:1、程序功能----無符號(hào)數(shù)比較

2、程序結(jié)構(gòu)--分支程序3、數(shù)據(jù)存放位置—-內(nèi)部RAM2、編程比較內(nèi)部RAM中X單元和Y單元存放的兩個(gè)無符號(hào)數(shù),找出其

中的較大數(shù),放入Z單元中.二數(shù)相減,判斷借位標(biāo)志.

條件判斷指令JC/JNC偽指令定義X、Y、ZX

EQU

20HY

EQU

30HZ

EQU

40HORG

0000HMOV

A,XCLR

CSUBB

A,YJNC

L1開始X

-Y有借位嗎?MOVSJMPL1:MOVEN:SJMPENDNX→ZYY>ZZ,YENZ,X$結(jié)束3、

編程比較內(nèi)部RAM中X單元和Y單元存放的兩個(gè)有符號(hào)數(shù),

找出其中的較大數(shù),放入Z單元中。解題思路:1、

基本思路同上一題2、重點(diǎn)是判斷有符號(hào)數(shù)的方法利用溢出標(biāo)志0V的狀態(tài)來判斷兩個(gè)有符號(hào)數(shù)的大小.若X-Y為正數(shù),則

OV=0時(shí)

X>Y;OV=1

時(shí)X<Y.若X

-Y為負(fù)數(shù),則

OV=0

時(shí)

X<Y;OV=1

時(shí)

X>Y.Z

<XN旗工請轉(zhuǎn)A-X驕Z

<

人N2田要單NZ←A人乙田要單單弱X

EQU

20HY

EQU

30HZ

EQU

40HORG

0000HMOV

A,XCLR

CSUBB

A,YACC.7,NGPSW.2

LTGT:MOV

Z,XSJMP

ENNG:

PSW.2,GTLT:MOVZ,YEN:SJMP$ENDOFH36HOFH46HOAH35HOAH45H90H34H90H44H78H33H78H43H56H32H56H42H34H31H34H41H12H30H12H40H07H2FHXXH3FH內(nèi)容地址內(nèi)容地址4、

編程實(shí)現(xiàn)數(shù)據(jù)傳送:假定數(shù)據(jù)串存放在內(nèi)部RAM從30H

開始的連

續(xù)單元中,數(shù)據(jù)串長度存放在2FH單元,傳送的目的區(qū)起址是內(nèi)部RAM從40H開始的連續(xù)單元.<具體數(shù)據(jù)可以自己設(shè)定>1、程序功能----數(shù)據(jù)傳送2、

程序結(jié)構(gòu)----循環(huán)結(jié)構(gòu)環(huán)3、

數(shù)據(jù)存放位置-----均在內(nèi)部RAM4、

傳送方式----順序傳送MOVDJNZ

循R0,R1尋址指針同時(shí)INC解題思路:ORG

0000HMOVR0,#2FHMOVR1,#40H

MOV

A,R0MOV

R7,AINC

ROLOOP:MOV

A,ROMOV

R1,AINC

ROINC

R1DJNZ

R7,LOOPSJMP

$END開始設(shè)置源指針R0設(shè)置目的指針R1

設(shè)置計(jì)數(shù)器R7取源數(shù)據(jù)→AA→

目的單元修改源指針R0修改目的指針R1過數(shù)器R7-1-0結(jié)束N12H46H34H45H56H44H78H43H90H42HOAH41HOFH40HXXH3FH5、

編程實(shí)現(xiàn)數(shù)據(jù)傳送:假定數(shù)據(jù)串存放在內(nèi)部RAM從30H開始的連

續(xù)單元中,數(shù)據(jù)串長度存放在2FH單元,傳送的目的區(qū)起址是內(nèi)部RAM從40H開始的連續(xù)單元.<數(shù)據(jù)按反向順序傳送>OFHOAH90H78H56H34H12H07H內(nèi)容36H35H34H33H32H31H30H2FH地址內(nèi)容

地址解題思路:1、

程序功能----數(shù)據(jù)傳送2、

程序結(jié)構(gòu)----循環(huán)結(jié)構(gòu)3、

數(shù)據(jù)存放位置----均在內(nèi)部RAM4、傳送方式----反向傳送DEC反向傳送的關(guān)鍵是要設(shè)置好指針的初始化值,數(shù)據(jù)

區(qū)的開始地址容易找到,一般程序中都表示出來了,但數(shù)據(jù)

區(qū)的結(jié)束地址比較難找,它和數(shù)據(jù)的長度有關(guān).MOVDJNZ

環(huán)R0,R1尋址指

一INC、一開始設(shè)置源指針R0設(shè)置目的指針R1設(shè)置計(jì)數(shù)器R7取源數(shù)據(jù)→AA→

目的單元修改源指針R0修改目的指針R1過數(shù)器R7-1-0結(jié)束DEC

R1INC

ROLOOP:MOVA,ROMOVR1,AINC

R0DEC

R1DJNZR7,LOOP0000HRO,#2FHR1,#40HA,R0R7,AA,R1R1,AORGMOVMOVMOVMOVADDMOVSJMPENDN$1、程序功能----數(shù)據(jù)傳送2、

程序結(jié)構(gòu)----循環(huán)結(jié)構(gòu)環(huán)3、

數(shù)據(jù)存放位置-----均在外部RAM4、

傳送方式----順序傳送需要2個(gè)16位指針6、

編程實(shí)現(xiàn)數(shù)據(jù)傳送:假定數(shù)據(jù)串存放在外部RAM

0001H

始的單元中,其中數(shù)據(jù)串的長度存放在0000H

單元,傳送的目的區(qū)起址

部RAM1000H

.解題思路:MOVXDJNZ

循DPTR尋址指針同時(shí)INC開始設(shè)置源指針DPTR設(shè)置目的地址R2,RS

設(shè)置計(jì)數(shù)器R7取源數(shù)據(jù)

→A保存DPTR值

設(shè)置目的指針A→

目的單元修改目的指針

保存目的地址恢復(fù)源指針修改源指針DPTR過數(shù)器R7-1

-0結(jié)束NORG

0000HMOV

DPTR,#000OHMOV

R2,#10HMOV

R3,#0OHMOVX

A,DPTR

MOVR7,AINC

DPTRLOOP:MOVXA,DPTRPUSH

DPHPUSHDPLMOV

DPH,R2MOVDPL,R3MOVX

DPTR,AMOVRO,#0000H

MOV

R1,#1000H可以這樣使用嗎?INC

DPTRMOVR2,DPHMOV

R3,DPLPOP

DPLPOPDPHINC

DPTRDJNZ

R7,LOOPSJMP

$END7、

編程實(shí)現(xiàn)數(shù)據(jù)傳送:假定數(shù)據(jù)串存放在外部RAM

0000H開始的

單元中,傳送的目的區(qū)起址是外部RAM

1000H單元.需傳送的數(shù)據(jù)串

個(gè)數(shù)事先并不知道,但數(shù)據(jù)串有一個(gè)結(jié)尾標(biāo)志0DH.解題思路:1、

程序功能----數(shù)據(jù)傳送2、

程序結(jié)構(gòu)----循環(huán)結(jié)構(gòu)環(huán)3、

數(shù)

據(jù)

位置----均在外部RAM4、

傳送方式----

順序傳送MOVXCJNE

循DPTR尋

址指針同時(shí)INC需

2

個(gè)

1

6

針開始設(shè)置源指針DPTR設(shè)置目的地址R2,R3

設(shè)置計(jì)數(shù)器R7取源數(shù)據(jù)→A=0DH

?N保存DPTR

設(shè)置目的指針A→

目的單元修改目的指針保存目的地址結(jié)束恢復(fù)源指針修改源指針DPTRORG0000HMOVDPTR,#00O1HMOVR2,#10HMOV

R3,#00HLOOP:MOVX

A,DPTRCJNE

A,#ODH,NEXTSJMPOVERNEXT:PUSH

DPHPUSH

DPLMOVMOVMOVXINCMOVMOVPOPPOPINCSJMPOVER:SJMPENDDPH,R2DPL,R3DPTR,ADPTRR2,DPHR3,DPLDPLDPHDPTRLOOP$8、

設(shè)有兩串多字節(jié)二進(jìn)制數(shù),分別存放在內(nèi)部RAM從30H和40H開始

的連續(xù)單元中〔低位在前高位在后,現(xiàn)要將這兩串?dāng)?shù)據(jù)相加,結(jié)果存

放在從30H開始的連續(xù)單元中,數(shù)據(jù)串的長度在RO中

.(要保存最高

位進(jìn)位數(shù)據(jù)例如:

BA9876543210H+665544332211HR0

=06H內(nèi)容

地址66H45H55H44H44H43H33H42H22H41H11H40HOBAH98H76H54H32H10H內(nèi)容35H34H33H32H31H30H地址相加

前RAM

內(nèi)

容01H36H20H35HOEDH34HOBAH33H87H32H54H31H21H30H66H45H55H44H44H43H33H42H22H41H11H40HBA9876543210H+

665544332211H內(nèi)容

地址相加

后RAM

內(nèi)

容120EDBA875421H內(nèi)容地址ORG

0000HMOV

R7,R0MOVR0,#30HMOVR1,#40HCLR

CRADD:

MOVA,ROADDC

A,R1MOV

R0,AINC

R0INC

R1DJNZ

R7,RADDCLRAADDC

A,#0MOV

R0,ASJMP$END保存高位進(jìn)位位的

方法還有其他什么方法嗎?位

法JC

NEXTMOV

RO,#00HCLR

ARLC

AMOV

R0,ASJMP

$SJMPOVERNEXT:MOVR0,#01H移

法OVER:

SJMP$9、設(shè)有兩串多字節(jié)BCD碼(即十進(jìn)制數(shù)數(shù),分別存放在內(nèi)部RAM從30H和外部RAM4000H開始的連續(xù)單元中,現(xiàn)要將這兩串?dāng)?shù)據(jù)相加,結(jié)

果存放在從外部RAM4000H

開始的連續(xù)單元中,數(shù)據(jù)串的長度在R1中

.〔忽略最高位進(jìn)位數(shù)據(jù)例如:332836543210H+665544332211H66H4005H55H4004H44H4003H33H4002H22H4001H11H4000H33H28H36H54H32H10H內(nèi)容35H34H3332H31H30H地址內(nèi)容

地址前RAM內(nèi)

容十十十十

十相

加R1=06H99H4005H83H4004H80H4003H87H4002H54H4001H21H4000H+35H34H33H32H31H30H地址332836543210H665544332211H998380875421H內(nèi)容

地址內(nèi)

容33H28H36H54H32H10H內(nèi)容相

后RAM開始設(shè)置源指針R0設(shè)置目的指針DPTR

設(shè)置計(jì)數(shù)器R7取源數(shù)據(jù)→A加上目的單元加數(shù)DA

A

調(diào)整A→

日的數(shù)據(jù)單元修改源指針N1

數(shù)

器R7-1-02結(jié)束修改目的指R針0DPTRORG

0000HMOVR7,R1MOV

R0,#30HMOV

DPTR,#4000HCLR

CRADD:MOVX

A,DPTRADDC

A,RODA

AMOVXDPTR,AINCR0INCDPTRDJNZ

R7,RADDSJMP

$ENDRAlDD:MOV

A,

ROADDC

A,DPTRDA

AMOVXDPTR,A可以這樣替換嗎

?答案:不能原因:ADDC

A,

DPTR指令非法1、

程序功能----數(shù)據(jù)轉(zhuǎn)換2、

程序結(jié)構(gòu)----循環(huán)結(jié)構(gòu)環(huán)3、

數(shù)據(jù)存放位置----一個(gè)內(nèi)部一個(gè)外部

址4、

傳送方式----順序傳送的指針+210、

內(nèi)

部RAM

從20H

開始的連續(xù)單元中存放著4字節(jié)的BCD碼,現(xiàn)要

求將每一個(gè)BCD碼(一字節(jié)存放兩個(gè)BCD碼轉(zhuǎn)變成對應(yīng)的ASCII

碼,并

存放在外部RAM從3000H開始的連續(xù)單元中。ANL

/

ORLDJNZ

循R0,DPTR

尋源指針+1,目解題思路:38H3007H37H3006H35H3005H36H3004H33H3003H34H3002H31H3001H32H3000H地址

內(nèi)容23H78H22H56H21H34H20H12H內(nèi)

部RAM外

部RAM內(nèi)容地址開始設(shè)置源指針R0設(shè)置目的指針DPTR設(shè)置計(jì)數(shù)器R7取源數(shù)據(jù)

→A保存A

中數(shù)據(jù)到R2求低4位數(shù)據(jù)的ACSⅡ

碼A

→送目的單元恢復(fù)R2

中數(shù)據(jù)到A求高4位數(shù)據(jù)的ACSⅡ

碼修改目的指針DPTRA→送目的單元修改源指針R0修改目的指針DPTR過敏器R7-1=0結(jié)束NORGAJMPORGSTA:

MOVMOVMOVLOOP:MOV0000HSTA0030HDPTR,#3000HR0,#20HR7,#4A,ROMOVR2,AANL

A,#OFHORLA

,#30HMOVXDPTR,AORL

A,#30HINCDPTRMOVXDPTR,AINC

R0INCDPTRDJNZR7,LOOPSJMP$AA,#OFHMOV

A,R2SWAPANLEND63H37HOBH36H00H35H5AH3484EH33H38H32H22H31HOCH30H11、

編程將內(nèi)部RAM

從40H

開始的連續(xù)單元中存放著8個(gè)單字

節(jié)的壓縮BCD碼,轉(zhuǎn)變成單字節(jié)的二進(jìn)制數(shù),并存放在內(nèi)部RAM

從30H

開始的連續(xù)單元中.47H46H45H44H43H42H41H40H地址99H11H00H90H78H56H34H

12H

內(nèi)容內(nèi)容

地址內(nèi)

RAM內(nèi)

RAM解題思路:1、程序功能----數(shù)據(jù)轉(zhuǎn)換

ANL/ORL2、

結(jié)

構(gòu)

-

-

-

-

環(huán)

結(jié)

構(gòu)

DJNZ

循環(huán)3、

數(shù)據(jù)存放位置----均在內(nèi)部RAM

R0,R1尋址4、傳2位BCD數(shù)轉(zhuǎn)換為二進(jìn)制數(shù)的方INC/DEC

法BCD

數(shù)高4

數(shù)據(jù)(

)

X10十

BCD

數(shù)低4位數(shù)據(jù)

(個(gè)位)普通二進(jìn)制數(shù)據(jù)開始設(shè)置源指針R0設(shè)置目的指針R1

設(shè)置計(jì)數(shù)器R7取源數(shù)據(jù)→A保存A

中數(shù)據(jù)到R2

取高4位數(shù)據(jù)→AA.

K

10

→A保存A

中數(shù)據(jù)到B恢復(fù)R2中數(shù)據(jù)到A修改源指針R0修改目的指針R1過敏器R7-1=0

2取低4位教據(jù)→AA+B>A沙目

的單元結(jié)束NMOV

A,R2ANL

A,#OFHADD

A,BMOV

R1,AINC

R0INCR1DJNZ

R7,LOPSJMP$ENDORGMOVMOVMOVLOP:MOVMOVANLSWAPMOVMULMOV000OHR0,#40HR1,#30HR7,#8A,ROR2,AA,#OFOHAB,#10ABB,A3007H37H3006H35H3005H30H3004H39H3003B38H3002H36H3001H34H3000H31H12、

將外部RAM從地址3000H開始連續(xù)8個(gè)單元的ASCII碼分別

轉(zhuǎn)換成BCD碼,并組成壓縮BCD碼存放在內(nèi)部RAM從地址30H開

始的連續(xù)4個(gè)單元中。57H33H90H32H68H31H14H30H內(nèi)容

地址外

部RAM內(nèi)

RAM內(nèi)容地址解題思路:1、

程序功能----數(shù)據(jù)轉(zhuǎn)換2、

程序結(jié)構(gòu)----循環(huán)結(jié)構(gòu)3、

數(shù)據(jù)存放位置----一個(gè)內(nèi)部一個(gè)外部4、

-

-

-

-

送指針+12個(gè)ASCII碼合成1個(gè)壓縮BCD

碼18HASCII

-30H

=

縮BCD

碼高位非壓縮BCD

碼高低4位互換ANL

/

ORLDJNZ

控制循

環(huán)R0,DPTR

源指針+2,目的31H,38H01H,08H10H取源數(shù)據(jù)→AA-30H

>AA

中高低4位互換

保存A

中數(shù)據(jù)到R2源指針+1取源數(shù)據(jù)

→AA-30H

→A開始設(shè)置源指針DPTR

設(shè)置目的指針R0

設(shè)置計(jì)數(shù)器R7修改源指針DPTR

修改目的指針R0過敏器R7-1=0

2A+

R2

→AA→

目的單元結(jié)束N000OHR0,#30HDPTR,#3000HR7,#4A,DPTRA,#0FHAR2,ADPTRA,DPTRA,#OFHORGMOVMOVMOVLOP:MOVXANLSWAPMOVINCMOVXANLADD

A,R2MOV

R0,AINC

R0INC

DPTRDJNZ

R7,LOPSJMP

$END3007H55H3006H02H3005H53H3004H01H3003H20H3002H01H3001H26H3000H00H13、

編程將內(nèi)部RAM從地址30H開始連續(xù)4個(gè)單元的單字節(jié)二進(jìn)制

數(shù)分別轉(zhuǎn)換成2字節(jié)的壓縮BCD碼(即00H~FFH轉(zhuǎn)換為0000H~

0255H,存放在外部RAM從地址3000H開始的連續(xù)8個(gè)單元中,OFFH33H99H32H78H31H1AH30H內(nèi)容

地址內(nèi)容地址BCD碼是每4位二進(jìn)制數(shù)表示一位十進(jìn)制數(shù).本例所要

求轉(zhuǎn)換的最大BCD碼為255,需要12位二進(jìn)制數(shù),超過了一個(gè)

字節(jié)<8位>,因此我們把高4位存放在30H的低4位,高4位清

零;低8位存放在31H中.轉(zhuǎn)換的方法是將A中二進(jìn)制數(shù)除以100、10,所得商即

為百、十位數(shù),余數(shù)為個(gè)位數(shù).0000001030H0101010131H設(shè)置源指針R0設(shè)置目的指針DPTR

設(shè)置計(jì)數(shù)器R7取源數(shù)據(jù)→AA除以100A>

目的單元目的指針+1B

中余數(shù)再除以10修改源指針R0修改目的指針DPTR過敏器R7-1=0

2A中商低4位互換A+B>AA

元開始結(jié)束NORG

0000H

INCROMOV

R0,#30H

INCDPTRMOV

DPTR,#3000H

DJNZ

R7,LOOPMOV

R7,#4

SJMP

$LOOP:MOV

A,RO

ENDMOV

B,#100DIVAB

;除法指令,A/B→商在A中,余數(shù)在B中MOVX

DPTR,A;把商<百位數(shù)>存在目的單元中INC

DPTRMOV

A.#10XCH

A,B

;余數(shù)交換到A中,B=10DIVAB

;A/B→

商<十位>在A

中,余數(shù)<個(gè)位>在B

中SWAP

;十位數(shù)移到高半字節(jié)ADD

A,B

;十位數(shù)和個(gè)位數(shù)組合在一起MOVX

DPTR,A14、

問題如下:在外部RAM有一串二進(jìn)制數(shù),現(xiàn)要對該數(shù)串進(jìn)行處理

,如何進(jìn)行處理由累加器A的內(nèi)容決定,具體如下:<A>=00:將該數(shù)據(jù)區(qū)清零;<A>=01:找出最大值,存放在內(nèi)部RAM30H單元;

數(shù),若轉(zhuǎn)有

碼1"

0,否則清零.

<A>=04:將該串?dāng)?shù)據(jù)從小到大排序。請編寫實(shí)現(xiàn)上述功能的主程序,具體功能用調(diào)用子程序?qū)崿F(xiàn).子

程序具體內(nèi)容不用編寫,只要用一條RET指令返回即可.解題思路:F;置BC字OAAH二進(jìn)制::0302AA1、

程序功能----散轉(zhuǎn)程序A+DPTR2、

程序結(jié)構(gòu)--多重分支JMPJMPA0:

LCALLQLSJMP$Al:LCALLMAXSJMP

$A2:

LCALLBCDSJMP

$A3:

LCALLCZSJMP

$A4:

LCALLPXSJMP

4QL:RET0000HSTART0030HB,AA,BDPTR,#TABA+DPTRA0A1A2A3A4ORGLJMPORGMOVRLA

ADD

MOVJMPLJMPLJMPLJMPLJMPLJMPSTART:TAB:解題思路:1、程序功能-----數(shù)據(jù)查找2、

程序結(jié)構(gòu)----循環(huán)結(jié)構(gòu)環(huán)3、

數(shù)據(jù)存放位置----內(nèi)部RAM15、

編程查找內(nèi)部RAM

的32H~41H單元中是否有

OAAH這個(gè)

數(shù)據(jù),若有這一數(shù)據(jù),則將將50H單元置為

OFFH,否則清50H單元

0

.CJNE

比較指DJNZ

循R0尋址開始設(shè)置源指針R0

設(shè)置計(jì)數(shù)器R7取源數(shù)據(jù)→A是0AAH

?N源數(shù)據(jù)指針+1數(shù)器R7-1-0#00H→50H結(jié)束#0FF→50HNMOV50H,#OFFHSJMP

OVERNEXT:INC

R0DJNZR7,LOOPMOV

50H,#00HOVER:SJMP

$END答案:不能原因:這是一條位操作指令ORGMOVMOVLOOP:MOVCLR50H可以用這條指令代替嗎?0000HR0,#32HR7,#16A,R0CJNEA,#OAAH,NEXT16、

已知單片機(jī)晶振為12MHz,

請?jiān)O(shè)計(jì)一個(gè)延時(shí)1s的子程序.解題思路:1、

-

-

時(shí)

軟件延時(shí)2、

程序結(jié)構(gòu)---多重循環(huán)結(jié)構(gòu)

DJNZ

循環(huán)3、

時(shí)鐘周期、機(jī)器周期和指令周期時(shí)鐘周期T時(shí)鐘是計(jì)算機(jī)基本時(shí)間單位,同晶振頻率有關(guān).題目給定fosc=12MHz,那么T時(shí)鐘=1/fosc=1/12MDELAY:MOV

R0,#100;延時(shí)1s的循環(huán)次數(shù)DEL2:MOVR1,#10;延時(shí)10ms

的循環(huán)次數(shù)DEL1:MOVR2,#250;

時(shí)

1ms

環(huán)

數(shù)DELO:NOPNOPDJNZ

R2,DELODJNZ

R1,DEL1DJNZRO,DEL2RET;1μs;

1μs;2

μs程序說明本例中,第二層循環(huán)和外循環(huán)都采用了簡化計(jì)算方法,編程

關(guān)鍵是延時(shí)1ms

的內(nèi)循環(huán)程序如何編制.首先確定循環(huán)程序段

的內(nèi)容如下:內(nèi)循環(huán)次數(shù)設(shè)為count,計(jì)算方法如下式:〔一次循環(huán)時(shí)間×count=1ms從而得到count=

1ms/<1μs+1μs+2

μs>=250NOPNOPDJNZ;1;1μs;2R2,DELOμsμs17、編程查找20H~4FH

單元中出現(xiàn)00H的次數(shù),并將查找結(jié)果

50

H

單元

.解題思路:1、

程序功能-----數(shù)據(jù)查找統(tǒng)計(jì)令2、程序結(jié)構(gòu)-----循環(huán)結(jié)構(gòu)環(huán)3、

數(shù)據(jù)存放位置

-

-

-

-

內(nèi)部RAM4、

使

計(jì)

數(shù)CJNE

比較指DJNZ

循R0

尋址R2查找數(shù)據(jù)一般用CJNE

指令,但本例中查找的數(shù)據(jù)開始設(shè)置源指針R?初始化計(jì)數(shù)器

設(shè)置計(jì)數(shù)器R7取源數(shù)據(jù)

→A是

0

0H

?V計(jì)數(shù)器+1源數(shù)據(jù)指針+1過數(shù)器R7-1-0計(jì)數(shù)值

50H結(jié)束JNZINCNEXT:INCDJNZMOVSJMPENDNEXTR2R0R7,LOOP50H,R2$0000HRO,#20HR2,#00HR7,#48ORGMOVMOVMOVLOOP:MOV

A,RONN18、

內(nèi)部

RAM的30H

開始的區(qū)域中存放著10個(gè)單字節(jié)十進(jìn)制

數(shù),求其累加和,并將結(jié)果存入40H

和41H

單元.88H

99H

37H

21H80H79H

58H

26H

34H+11H533H39H38H37H36H35H34H33H32H31H30H地址88H99H37H21H80H79H58H26H34H11H內(nèi)容ORGMOVMOVMOV

MOVCLRLOOP:MOVADDCDAMOVCLR

ADDCDAMOVDJNZSJMPEND開始設(shè)置源指針R0初始化結(jié)果單元

設(shè)置計(jì)數(shù)器R7取源數(shù)據(jù)→A加結(jié)果低字節(jié)加結(jié)果高字節(jié)源數(shù)據(jù)指針+1數(shù)器R7-1-0結(jié)束0000HRO,#30H40H

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(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ǔ)空間,僅對用戶上傳內(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)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評(píng)論

0/150

提交評(píng)論