7 循环指_举例.ppt

上传人:hyn****60 文档编号:82471484 上传时间:2023-03-25 格式:PPT 页数:37 大小:391KB
返回 下载 相关 举报
7 循环指_举例.ppt_第1页
第1页 / 共37页
7 循环指_举例.ppt_第2页
第2页 / 共37页
点击查看更多>>
资源描述

《7 循环指_举例.ppt》由会员分享,可在线阅读,更多相关《7 循环指_举例.ppt(37页珍藏版)》请在得力文库 - 分享文档赚钱的网站上搜索。

1、控制转移指令控制转移指令循环转移指令举例循环转移指令举例编编程程:把把外外部部RAM中中的的2000H2050H单单元元内内容容送送至至外外部部RAM的的30H80H单元单元MOVMOVDPTR,#2000HDPTR,#2000HMOVR0,#30HMOVR0,#30HMOVR2,#51HMOVR2,#51HMOVRAM:MOVRAM:MOVXMOVX A,DPTRA,DPTRMOVMOVP2,#00HP2,#00HMOVXMOVX R0,AR0,AINCINCR0R0INCINCDPTRDPTRDJNZR2,MOVRAMDJNZR2,MOVRAM控制转移指令控制转移指令块操作块操作块操作步骤

2、:块操作步骤:1.确定块的寻址寄存器确定块的寻址寄存器2.确定循环变量和循环次数确定循环变量和循环次数3.确定块的访问方式(确定块的访问方式(MOV、MOVX、MOVC)4.对寻址寄存器和循环变量初始化对寻址寄存器和循环变量初始化5.编写循环框架、递增(递减)寻址寄存器值编写循环框架、递增(递减)寻址寄存器值6.确定循环体内的操作确定循环体内的操作控制转移指令控制转移指令块操作步骤块操作步骤1.确定块的寻址寄存器确定块的寻址寄存器片内片内RAMRAM:R0R0R0R0、R1R1R1R1片外片外RAMRAM:DPTRDPTRDPTRDPTRR0R0R0R0、R1(R1(R1(R1(与与与与P2P

3、2P2P2配合使用配合使用配合使用配合使用)ROMROM:DPTRDPTRDPTRDPTR注:先确定访问片内先确定访问片内先确定访问片内先确定访问片内RAMRAMRAMRAM的寻址寄存器,后确定访问外的寻址寄存器,后确定访问外的寻址寄存器,后确定访问外的寻址寄存器,后确定访问外部部部部RAMRAMRAMRAM和和和和ROMROMROMROM的寻址寄存器的寻址寄存器的寻址寄存器的寻址寄存器控制转移指令控制转移指令块操作步骤块操作步骤2.确定循环变量和循环次数确定循环变量和循环次数循环变量循环变量:R2R2循环次数循环次数:尾地址尾地址-首地址首地址+1+1控制转移指令控制转移指令块操作步骤块操作

4、步骤3.确定块的访问方式(确定块的访问方式(MOV、MOVX、MOVC)内部内部RAMRAM:MOVMOV外部外部RAMRAM:MOVXMOVXROM:ROM:MOVCMOVC注:值送入注:值送入A A累加器中累加器中控制转移指令控制转移指令块操作步骤块操作步骤4.对寻址寄存器和循环变量初始化对寻址寄存器和循环变量初始化寻址寄存器寻址寄存器 =开始地址开始地址循环变量循环变量 =循环次数循环次数控制转移指令控制转移指令块操作步骤块操作步骤5.编写循环框架、递增(递减)寻址寄存器值编写循环框架、递增(递减)寻址寄存器值LOOP:LOOP:递增寻址寄存器值递增寻址寄存器值DJNZ DJNZ R2,

5、LOOPR2,LOOP控制转移指令控制转移指令块操作举例块操作举例举例:把内部举例:把内部RAM的的20H0FFH清空(置成清空(置成0)1.片内RAM块,寻址寄存器为R0R0R0R02.循环变量为R2R2R2R2,循环次数=0FFH-20H+1=0E0H0E0H0E0H0E0H3.片内RAM块,用MOVMOVMOVMOV指令,用A A A A累加器读写值4.赋初值 MOV MOV MOV MOV R0,#20HR0,#20HR0,#20HR0,#20H MOVMOVMOVMOVR2,#0E0HR2,#0E0HR2,#0E0HR2,#0E0H5.循环体框架LOOP:LOOP:LOOP:LOOP

6、:INCINCINCINCR0R0R0R0DJNZDJNZDJNZDJNZR2,LOOPR2,LOOPR2,LOOPR2,LOOP6.循环操作CLRCLRCLRCLRA A A AMOVMOVMOVMOVR0,AR0,AR0,AR0,AMOV MOV MOV MOV R0,#20HR0,#20HR0,#20HR0,#20H MOVMOVMOVMOVR2,#0E0HR2,#0E0HR2,#0E0HR2,#0E0HLOOP:LOOP:LOOP:LOOP:CLRCLRCLRCLRA A A AMOVMOVMOVMOVR0,AR0,AR0,AR0,A INCINCINCINCR0R0R0R0DJNZD

7、JNZDJNZDJNZR2,LOOPR2,LOOPR2,LOOPR2,LOOP控制转移指令控制转移指令块操作举例块操作举例编编程程:把把内内部部RAM的的20H开开始始的的40个个单单元元送送到到外外部部RAM的的30H开始的单元开始的单元1.内部RAM用R0R0R0R0,外部RAM可用R0、R1或DPTR,R0已用,故选用R1R1R1R1访问外部RAM2.循环变量R2R2R2R2,循环次数=404040403.读内部RAM:MOVMOVMOVMOV A,R0 A,R0 A,R0 A,R0 写外部RAM:MOVX R1,AMOVX R1,AMOVX R1,AMOVX R1,A4.初值:R0=2

8、0H20H20H20H,R1=30H30H30H30H,R2=404040405.循环体框架LOOP:LOOP:LOOP:LOOP:INCINCINCINCR0R0R0R0INCINCINCINCR1R1R1R1DJNZDJNZDJNZDJNZR2,LOOPR2,LOOPR2,LOOPR2,LOOPMOVMOVR0,#20HR0,#20HMOVMOVR1,#30HR1,#30HMOVMOVP2,#00HP2,#00HMOVMOVR2,#40R2,#40LOOP:LOOP:MOVMOVA,R0A,R0MOVXMOVXR1,AR1,AINCINCR0R0INCINCR1R1DJNZDJNZR2,L

9、OOPR2,LOOP控制转移指令控制转移指令块操作举例块操作举例编编程程:把把内内部部RAM的的30H7FH单单元元分分别别和和外外部部RAM的的50H9FH单元相加送入外部单元相加送入外部RAM的的1030H107FH单元单元MOVMOVR0,#30HR0,#30HMOVMOVR1,#50HR1,#50HMOVMOVDPTR,#1030HDPTR,#1030HMOVMOVR2,#50HR2,#50HLOOP:LOOP:INCINCR0R0INCINCR1R1INCINCDPTRDPTRDJNZDJNZR2,LOOPR2,LOOPMOVMOVMOVMOVA,R0A,R0A,R0A,R0MOVM

10、OVMOVMOVB,AB,AB,AB,AMOVMOVMOVMOVP2,#00HP2,#00HP2,#00HP2,#00HMOVXMOVXMOVXMOVXA,R1A,R1A,R1A,R1ADDADDADDADDA,BA,BA,BA,BMOVXMOVXMOVXMOVXDPTR,ADPTR,ADPTR,ADPTR,AMOVMOVMOVMOVP2,#00HP2,#00HP2,#00HP2,#00HMOVXMOVXMOVXMOVXA,R1A,R1A,R1A,R1ADDADDADDADDA,R0A,R0A,R0A,R0MOVXMOVXMOVXMOVXDPTR,ADPTR,ADPTR,ADPTR,A控制转移

11、指令控制转移指令块操作举例块操作举例编编程程:把把外外部部RAM中中从从8000H开开使使的的100个个字字节节送送至至外外部部RAM的的8100H开始的单元中去。开始的单元中去。MOVDPTR,#8000HMOVDPTR2,#8100HMOV R2,#100LOOP:MOVXA,DPTRMOVXDPTR2,AINCDPTRINCDPTR2DJNZ R2,LOOPMOVR7,#81H;MOVDPTR2,#8100HMOVR6,#00HMOVDPH,R7;MOVX DPTR2,AMOVDPL,R6MOVXDPTR,AINCDPTR2INCDPTRMOVDPH,R7;MOVX DPTR2,AMOV

12、DPL,R6MOVXDPTR,AINCDPTR;INCDPTR2MOVR7,DPHMOVR6,DPLINCDPTR PUSH DPH PUSH DPH PUSH DPL PUSH DPL POP DPL POP DPL POP DPH POP DPH控制转移指令控制转移指令块操作举例块操作举例MOVMOVDPTR,#8000HDPTR,#8000HMOVMOVR7,#81HR7,#81H MOVMOVR6,#00HR6,#00HMOVMOVR2,#100R2,#100LOOP:LOOP:MOVXMOVXA,DPTRA,DPTRPUSHPUSHDPHDPHPUSHPUSHDPLDPLMOVMOV

13、DPH,R7DPH,R7MOVMOVDPL,R6DPL,R6MOVXMOVXDPTR,ADPTR,AINCINCDPTRDPTRMOVMOVR7,DPHR7,DPHMOVMOVR6,DPLR6,DPLPOPPOPDPLDPLPOPPOPDPHDPHINCINCDPTRDPTRDJNZDJNZR2,LOOPR2,LOOP编编编编程程程程:把把把把外外外外部部部部RAMRAM中中中中从从从从8000H8000H开开开开使使使使的的的的100100个个个个字字字字节节节节送送送送至至至至外外外外部部部部RAMRAM的的的的8100H8100H开始的单元中去。开始的单元中去。开始的单元中去。开始的单元

14、中去。MOVMOVDPTR,#8000HDPTR,#8000HMOVMOVR0,#00HR0,#00HMOVMOVR2,#100R2,#100LOOP:LOOP:MOVXMOVXA,DPTRA,DPTRMOVMOVP2,#81HP2,#81H MOVXMOVXR0,AR0,AINCINCDPTRDPTRINCINCR0R0DJNZDJNZR2,LOOPR2,LOOP控制转移指令控制转移指令比较转移指令比较转移指令CJNE A,Direct,Label1;1)若)若A(direct)则跳至则跳至Label1处,否则顺序执行处,否则顺序执行2)若)若A(direct)时时Cy置置0CJNEA,#d

15、ata,Label2CJNERn,#data,Label3CJNERi,#data,Label4控制转移指令控制转移指令比较转移指令举例比较转移指令举例编编程程:把把30H单单元元减减去去31H单单元元的的绝绝对对值值送送入入32H单元中。单元中。MOVMOVA,30HA,30HCJNECJNE A,31H,NOTSAMEA,31H,NOTSAMESAME:SAME:MOVMOVA,#00HA,#00HSJMPSJMP STORESTORENOTSAME:NOTSAME:JCJCSMALLSMALLLARGE:LARGE:SUBBSUBB A,31HA,31HSJMPSJMP STORESTO

16、RESMALL:SMALL:CLRCLR C CXCHXCH A,31HA,31HSUBBSUBB A,31HA,31HSTORE:STORE:MOV32H,AMOV32H,A控制转移指令控制转移指令比较转移指令举例比较转移指令举例2编编程程:把把内内部部RAM的的20H50H清清空空(置置成成0),用用CJNE实现实现MOVMOVMOVMOVR0,#20HR0,#20HR0,#20HR0,#20HLOOP:LOOP:LOOP:LOOP:CLRCLRCLRCLRA A A AMOVMOVMOVMOVR0,AR0,AR0,AR0,AINCINCINCINCR0R0R0R0CJNECJNECJNE

17、CJNER0,R0,R0,R0,#50H#50H#50H#50H,LOOP,LOOP,LOOP,LOOPCJNECJNECJNECJNER0,R0,R0,R0,#51H#51H#51H#51H,LOOP,LOOP,LOOP,LOOP控制转移指令控制转移指令比较转移指令举例比较转移指令举例3编编程程:把把在在ROM中中300H3FFH单单元元中中最最大大的的数数找找出出来来存存放放在内部在内部RAM的的30H单元单元,遇零则停止。遇零则停止。MOVMOVDPTR,#300HDPTR,#300HMOVMOV R2,#0R2,#0MOVMOV B,#0B,#0LOOP:LOOP:CLRCLR A A

18、MOVCA,A+DPTRMOVCA,A+DPTRJZJZZEROZEROCJNECJNE A,B,NOTSAMEA,B,NOTSAMESJMPSJMP NEXTLOOPNEXTLOOPNOTSAME:NOTSAME:JCJCNEXTLOOPNEXTLOOP;AB;AB;ABNEXTLOOP:NEXTLOOP:INCINCDPTRDPTRDJNZDJNZ R2,LOOPR2,LOOPZERO:ZERO:MOVMOV 30H,B30H,B子程序调用指令ACALLLCALL子程序返回指令RETRETI空指令NOP子程序调用指令子程序调用指令LCALLORGORG0000H0000HSJMPSJMPM

19、AINMAINORGORG0030H0030HMAIN:MAIN:0030H0030HMOVMOVR0,#12HR0,#12H0032H0032HLCALLLCALL SIMPLESIMPLE0035H0035H MOVMOVR0,#34HR0,#34H0037H0037H SJMPSJMP$SIMPLE:SIMPLE:0039H0039H PUSHPUSH00H00H003BH003BHMOVMOVR0,#56HR0,#56H003DH003DH POPPOP00H00H003FH003FH RETRETENDEND.00H00H66H55H00H00H00H00H.07H08H09H0AH

20、0BH0CH0DH0EH00H00H.00H00H66H55H00H00H35H00H.07H08H09H0AH0BH0CH0DH0EH00H00H.00H00H66H55H12H00H35H00H.07H08H09H0AH0BH0CH0DH0EH00H00H.00H00H66H55H12H00H35H00H.07H08H09H0AH0BH0CH0DH0EH00H00H.00H00H66H55H12H00H35H00H.07H08H09H0AH0BH0CH0DH0EH00H00H为为了了便便于于编编程程和和对对汇汇编编语语言言程程序序进进行行汇汇编编,各各种种汇汇编编程程序序都都提提供供一一些

21、些特特殊殊的的指指令令,供供人人们们编编程程使使用用。这这些些指指令令通通常常称称为为伪伪指指令令,由由伪伪指指令令确确定定的的操操作作称称为为伪伪操操作作。伪伪指指令令又又称称汇汇编编程程序序控控制制译译码码指指令令。“伪伪”体体现现在在汇汇编编时时不不产产生生机机器器指指令令代代码码,不不影影响响程序的执行,仅指明在汇编时执行一些特殊的操作。程序的执行,仅指明在汇编时执行一些特殊的操作。4.1.2伪指令语句伪指令语句 ORGORG指令格式为:指令格式为:ORG ORG 表达式表达式 其含义是向汇编程序说明,下述程序段的起始地其含义是向汇编程序说明,下述程序段的起始地址由表达式指明。表达式通

22、常为址由表达式指明。表达式通常为1616进制地址码。进制地址码。一般规定,在由一般规定,在由ORGORG伪指令定位时,其地址应当由小到伪指令定位时,其地址应当由小到大,不能重叠。大,不能重叠。它的有效范围一直到下一条它的有效范围一直到下一条ORGORG伪指令出现为止。伪指令出现为止。例如:例如:ORG 1000HORG 1000H START START:MOV AMOV A,12H12HEND(ENDofassembly)汇编结束伪指令汇编结束伪指令汇编结束伪指令一般有以下两种格式:汇编结束伪指令一般有以下两种格式:主程序模块:标号主程序模块:标号END表达式表达式子程序模块:子程序模块:标

23、号标号END其其含含义义是是用用以以通通知知汇汇编编程程序序,该该程程序序段段汇汇编编至至此此结结束束。因因此此,在在设设计计的的每每一一个个程程序序中中必必须须要要有有END语语句句,而而且且只只能能有有一一条条。但但END语句应设置在整个程序(包括伪指令在内)的后面。语句应设置在整个程序(包括伪指令在内)的后面。当源程序为主程序时,当源程序为主程序时,END伪指令中可有标号,这个标号伪指令中可有标号,这个标号应是主程序第一条指令的符号地址。若源程序为子程序,则在应是主程序第一条指令的符号地址。若源程序为子程序,则在END伪指令中不需要带标号。伪指令中不需要带标号。只有主程序模块才具有表达式

24、项,且表达式的值只有主程序模块才具有表达式项,且表达式的值等于该程序模块的入口地址。子程序模块没有该项。等于该程序模块的入口地址。子程序模块没有该项。EQU(EQUate)赋值伪指令赋值伪指令指令格式为:标号指令格式为:标号EQU表达式表达式其其作作用用是是把把表表达达式式赋赋值值于于标标号号,这这里里的的标标号号和和表表达达式式是是必必不可少的。例如:不可少的。例如:COUNTEQU32HLEDPORTEQUP1 DLDL定义标号值伪指令定义标号值伪指令指令格式为:指令格式为:DL其其含含义义也也是是说说明明标标号号等等值值于于表表达达式式。同同样样,标标号号和和表表达达式式是必不可少的。例

25、如;是必不可少的。例如;COUNTDL3000H;定义标号;定义标号COUNT的值为的值为;3000HCOUNTDLCOUNT十十1;重新定义;重新定义COUNT的值为的值为;3000HlDL和和EQU的功能都是将表达式值赋予标号,但两者有差的功能都是将表达式值赋予标号,但两者有差别:可用别:可用DL语句在同一源程序中给同一标号赋予不同的值,即可语句在同一源程序中给同一标号赋予不同的值,即可更改已定义的标号值;而用更改已定义的标号值;而用EQU语句定义的标号,在整个源程序语句定义的标号,在整个源程序中不能更改。中不能更改。DB(DefineByte)定义字节伪指令定义字节伪指令指令格式为:标号

26、指令格式为:标号DB表达式或表达式表表达式或表达式表其其含含义义是是将将表表达达式式或或表表达达式式表表所所表表示示的的数数据据或或数数据据串串存存入入从从标标号号开开始始的的连连续续存存储储单单元元中中。标标号号为为可可选选项项,它它表表示示数数据据存存储储单单元元地地址址。表表达达式式或或表表达达式式表表是是指指一一个个字字节节或或用用逗逗号号分分开开的的字字节节数数据据。可可以以是是用用引引号号括括起起来来的的字字符符串串。字字符符串串中中的的字字符符按按ASCII码码存存于于连续的连续的ROM中。例如:中。例如:ORG 2000HTABLEDB73H,04,100,32,00,2,”A

27、BC”表示字节串数据存入由表示字节串数据存入由TABLE标号为起始地址的连续存储标号为起始地址的连续存储器单元中。即从器单元中。即从2000H存储单元开始依次连续存放数据为:存储单元开始依次连续存放数据为:73H,04H,64H,20H,00H,FEH,41H,42H,43H。DW(DefineWord)定义字伪指令定义字伪指令其指令格式为:标号其指令格式为:标号DW表达式或表达式表表达式或表达式表其其含含义义是是把把字字或或字字串串值值存存入入由由标标号号开开始始的的连连续续存存储储单单元元中中,且且把把字字的的高高字字节节数数存存入入低低地地址址单单元元,低低字字节节数数存存入入高高地地址

28、址单单元。按顺序连续存放。元。按顺序连续存放。DW10H,3456H,814表示按顺序存入表示按顺序存入00H,10H,34H,56H,03H,2EH注:注:DB和和DW定义的数表,数的个数不得超过定义的数表,数的个数不得超过80个。若数据的数个。若数据的数目较多时,可以使用多个定义命令。一般以目较多时,可以使用多个定义命令。一般以DB来定义数据,以来定义数据,以DW来定义地址。来定义地址。DS(DefineStonage)定义存储区伪指令定义存储区伪指令存储区说明伪指令的指令格式为:存储区说明伪指令的指令格式为:DS通通知知汇汇编编程程序序,在在目目标标代代码码中中,以以标标号号为为首首地地

29、址址保保留留表表达达式式值值的的若若干干存存储储单单元元以以备备源源程程序序使使用用。汇汇编编时时,对对这这些些单单元元不不赋赋值值。例如:例如:BASEDS100H是是通通知知汇汇编编程程序序,从从标标号号BASE开开始始,保保留留100H个个存存储储单单元,以备源程序另用。元,以备源程序另用。注意,对于注意,对于80C51单片微机,单片微机,DB、DW、DS等伪指令只能应用于等伪指令只能应用于程序存储器,而不能对数据存储器使用。程序存储器,而不能对数据存储器使用。BIT位定义伪指令位定义伪指令用于给字符名称赋予位地址。用于给字符名称赋予位地址。命令格式为:命令格式为:BIT其中,位地址可以

30、是绝对地址,也可以是符号地址。其中,位地址可以是绝对地址,也可以是符号地址。例:例:ABCBITP3.1把把P3.1位地址赋值给位地址赋值给ABC,在后面的编程中,在后面的编程中,ABC即可作即可作为位地址为位地址P3.1使用。使用。除了一般的汇编程序之外,还有一些高性能的汇编程序,除了一般的汇编程序之外,还有一些高性能的汇编程序,可在汇编时进行表达式赋值、条件汇编和宏汇编。这样为用户编可在汇编时进行表达式赋值、条件汇编和宏汇编。这样为用户编程带来了很大的方便。程带来了很大的方便。表达式赋值可允许汇编语言程序的指令操作数域使用表达式,表达式赋值可允许汇编语言程序的指令操作数域使用表达式,例如:

31、例如:“ADDA,#ALFA*BETA2”,其中其中ALFA和和BETA是两个已是两个已定义的标号。定义的标号。条条件件汇汇编编可可使使用用户户在在汇汇编编时时根根据据需需要要对对源源程程序序进进行行汇汇编编,这这样样有有利利于于程程序序的的调调试试。特特别别是是为为用用户户系系统统(或或大大的的应应用用)程程序序的的调试带来方便。调试带来方便。宏宏汇汇编编允允许许用用户户在在编编写写源源程程序序时时使使用用宏宏指指令令。一一条条宏宏指指令令往往往往包包括括若若干干条条汇汇编编语语言言指指令令,这这样样在在使使用用宏宏指指令令之之后后可可使使源源程程序序缩缩短,简化程序设计。短,简化程序设计。

32、在使用宏指令之前,要先对相应的寄存器赋值,否则将会得在使用宏指令之前,要先对相应的寄存器赋值,否则将会得出错误的结果。出错误的结果。例例1.伪指令应用伪指令应用ORG8100HBUFFERDS10HDW“AB”DW100H,1ACH,-814说明:说明:从从8100H至至810FH为缓冲区空间为缓冲区空间(8110H)=41H(A)(8111H)=42H(B)8112H单元起存放单元起存放01H、00H、01H、ACH、FCH、D2H程序设计举例程序设计举例算术、逻辑运算算术、逻辑运算编程:将连续存放在外部数据存贮器编程:将连续存放在外部数据存贮器1000H开始的开始的10个无符号数求和,个无

33、符号数求和,结果为双字节结果为双字节,存放在存放在1100H(低位),低位),1101H(高位)中。高位)中。MOVMOVR6,#0R6,#0;低位低位低位低位MOVMOVR7,#0R7,#0;高位高位高位高位MOVMOVDPTR,#1000HDPTR,#1000HMOVMOVR2,#10R2,#10LOOP:LOOP:MOVXMOVXA,DPTRA,DPTRADDADDA,R6A,R6JNCJNCNORMALNORMALINCINCR7R7NORMAL:NORMAL:MOVMOVR6,AR6,ADJNZDJNZR2,LOOPR2,LOOPMOVMOVDPTR,#1100HDPTR,#1100

34、HMOVMOVA,R6A,R6MOVXMOVXDPTR,ADPTR,AMOVMOVDPTR,#1101HDPTR,#1101HMOVMOVA,R7A,R7MOVXMOVXDPTR,ADPTR,A程序设计举例程序设计举例3.17LENGTHLENGTHEQUEQU30H30HBLOCK1BLOCK1EQUEQU40H40HBLOCK2BLOCK2EQUEQU50H50H ORGORG0000H0000HSJMPSJMPMAINMAINORGORG0030H0030HMAIN:MAIN:MOVMOVR2,LENGTHR2,LENGTHMOVMOVR0,#BLOCK1R0,#BLOCK1MOVMOV

35、R1,#BLOCK2R1,#BLOCK2CLRCLRC CLOOP:LOOP:MOVMOVA,R0A,R0ADDCADDCA,R1A,R1DADAA AMOVMOVR0,AR0,AINCINCR0R0INCINCR1R1DJNZDJNZR2,LOOPR2,LOOPCLRCLRA AMOVMOVACC.0,CACC.0,CMOVMOVR0,AR0,AFINISH:FINISH:SJMPSJMP$ENDEND30H:30H:03H,00H,00H03H,00H,00H40H:40H:12H,34H,56H12H,34H,56H50H:50H:61H,84H,70H61H,84H,70H40H:40

36、H:73H,18H,27H,01H73H,18H,27H,01H程序设计举例程序设计举例算术、逻辑运算算术、逻辑运算编程:设计一个软件延时编程:设计一个软件延时20ms子程序(设主频子程序(设主频12MHz)T20ms:PUSH0H;2PUSH1H;2MOV1H,#X;2TML0:MOV0H,#Y;2TML1:DJNZ0H,TML1;2DJNZ1H,TML0;2POP1H;2POP0H;2RET;2程序设计举例程序设计举例算术、逻辑运算算术、逻辑运算(2Y+4)*X+12=20000近似为(2Y+4)*X=20000(2Y+4)*X=200*100X=1002Y+4=200X=100Y=98程

37、序设计举例程序设计举例编程:编程:1s延时子程序延时子程序DELAY1S:MOVR2,#50L1:LCALLT20msDJNZR2,L1RET程序设计举例程序设计举例4.14NUMNUM EQU EQU30H30HARRAYARRAY EQU EQU31H31HPOSITIVE EQUPOSITIVE EQU20H20HZEROZERO EQU EQU21H21HNEGATIVE EQUNEGATIVE EQU22H22H ORGORG0000H0000HSJMPSJMPMAINMAINORGORG0030H0030HMAIN:MAIN:MOVMOVPOSITIVE,#0POSITIVE,#0

38、MOVMOVZERO,#0ZERO,#0MOVMOVNEGATIVE,#0NEGATIVE,#0MOVMOVR2,NUMR2,NUMMOVMOVR0,#ARRAYR0,#ARRAYLOOP:LOOP:MOVMOVA,R0A,R0JZJZZERONUMZERONUMCLRCLRC CSUBBSUBBA,#80HA,#80HJCJCPOSITIVENUMPOSITIVENUMNEGATIVENUM:NEGATIVENUM:INCINCNEGATIVENEGATIVESJMPSJMPNEXTNEXTZERONUM:ZERONUM:INCINCZEROZEROSJMPSJMPNEXTNEXTPOSIT

39、IVENUM:POSITIVENUM:INCINCPOSITIVEPOSITIVESJMPSJMPNEXTNEXTNEXT:NEXT:INCINCR0R0DJNZDJNZR2,LOOPR2,LOOPFINISH:FINISH:SJMPSJMP$ENDEND程序设计举例程序设计举例4.18ADDRADDRADDRADDREQUEQUEQUEQU4000H4000H4000H4000HNUMNUMNUMNUMEQUEQUEQUEQU0 0 0 0OUTPORTOUTPORTOUTPORTOUTPORT EQUEQUEQUEQUP1P1P1P1ORGORGORGORG0000H0000H0000H0

40、000HSJMPSJMPSJMPSJMPMAINMAINMAINMAINORGORGORGORG0030H0030H0030H0030HMAIN:MAIN:MAIN:MAIN:MOVMOVMOVMOVDPTR,#ADDRDPTR,#ADDRDPTR,#ADDRDPTR,#ADDRMOVMOVMOVMOVR2,#NUMR2,#NUMR2,#NUMR2,#NUMLOOP:LOOP:LOOP:LOOP:MOVXMOVXMOVXMOVXA,DPTRA,DPTRA,DPTRA,DPTRCLRCLRCLRCLRACC.7ACC.7ACC.7ACC.7MOVMOVMOVMOVC,PC,PC,PC,PMOVMOVMOVMOVACC.7,CACC.7,CACC.7,CACC.7,CMOVMOVMOVMOVOUTPORT,AOUTPORT,AOUTPORT,AOUTPORT,AINCINCINCINCDPTRDPTRDPTRDPTRDJNZDJNZDJNZDJNZR2,LOOPR2,LOOPR2,LOOPR2,LOOPFINISH:FINISH:FINISH:FINISH:SJMPSJMPSJMPSJMP$ENDENDENDEND控制转移指令控制转移指令块操作举例块操作举例KeilC简介简介示例

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 生活休闲 > 生活常识

本站为文档C TO C交易模式,本站只提供存储空间、用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。本站仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知得利文库网,我们立即给予删除!客服QQ:136780468 微信:18945177775 电话:18904686070

工信部备案号:黑ICP备15003705号-8 |  经营许可证:黑B2-20190332号 |   黑公网安备:91230400333293403D

© 2020-2023 www.deliwenku.com 得利文库. All Rights Reserved 黑龙江转换宝科技有限公司 

黑龙江省互联网违法和不良信息举报
举报电话:0468-3380021 邮箱:hgswwxb@163.com