




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
2.3.5位操作指令
位操作(布尔变量操作):操作数不是字节,而是字节中的某个位。每位的取值只能取0或1。
指令的寻址范围:片内RAM位寻址区20H~2FH,SFR中的11个可位寻址特殊寄存器中的83个可寻址位。
特点:以进位标志Cy作为位累加器,可以实现布尔变量的传送、运算和控制转移等功能。
指令中的位地址的表达方式:直接地址方式(如0AFH)、特殊功能寄存器名.位序号(如PSW.3)、字节地址.位序号(如0D0H.0)、位名称方式(如F0)和用户定义名称等几种方式。
编辑ppt1.位数据传送指令(2条)特点:在可寻址位与位累加器Cy之间进行的。不能在两个可寻址位间直接进行传送。指令格式:MOVC,bit;(Cy)←(bit)
MOVbit,C;(bit)←(Cy)例:
比较MOVA,20H;片内RAM20H单元内容送A,传送8位二进制数MOVC,20H;位地址为20H的位送C,传送1位二进制数P71例2.55编辑ppt2.位逻辑操作指令(6条)指令格式:操作码C,<SRC>
其中:操作码包括ANL、ORL;<SRC>包括bit、bit。
CPL<dest>;<dest>←dest<dest>包括Cy、bit。功能:位逻辑操作指令用于位逻辑操作,还可用于对组合逻辑电路的模拟。采用位操作指令进行组合逻辑电路的设计比采用字节型逻辑指令节约存储空间,运算操作十分方便。P71例2.56编辑ppt3.位状态(置位、清0)控制指令(4条)指令格式:CLR<dest>;<dest>←0SETB<dest>;<dest>←1
其中:<dest>包括Cy、bit。4.位条件(控制)转移指令(5条)特点:以位的状态作为实现程序转移的判断条件。指令格式:(1)以进位标志位Cy内容为条件的转移指令
JCrel;若(Cy)=1,则转移(PC)←(PC)+2+rel,否则顺序执行JNCrel;若(Cy)=0,则转移(PC)←(PC)+2+rel,否则顺序执行编辑ppt(2)以位地址bit内容为条件的转移指令指令格式:JBbit,rel;若(bit)=1,则转移(PC)←(PC)+3+rel,否则顺序执行JNBbit,rel;若(bit)=0,则转移(PC)←(PC)+3+rel,否则顺序执行JBCbit,rel;若(bit)=1,则转移(PC)←(PC)+3+rel,且(bit)←0,否则顺序执行编辑pptP73例2.58
ORG0100HMOVDPTR,#DATAMOVR0,#30HMOVR1,#40HLOOP:MOVXA,@DPTRCJNEA,#0DH,LOOP1SJMP$LOOP1:JBACC.7,LOOP2MOV@R0,AINCR0INCDPTRAJMPLOOPLOOP2:MOV@R1,AINCR1INCDPTRAJMPLOOPEND编辑ppt2.4汇编语言及程序设计
程序设计:就是编制计算机的程序,即应用计算机所能识别的、接受的语言把要解决的问题的步骤有序地描述出来。程序设计语言的种类:(1)机器语言:机器语言是用二进制代码表示的计算机惟一能识别和执行的最原始的程序设计语言。
(2)汇编语言:利用指令助记符来描述的程序设计语言。(3)高级语言:高级语言接近于人的自然语言,是面向过程而独立于机器的通用语言。汇编语言的指令类型:
MCS-51单片机汇编语言,包含两类不同性质的指令。(1)指令:即指令系统中的指令。它们都是机器能够执行的指令,每一条指令都有对应的机器码。(2)伪指令:汇编时用于控制汇编的指令。它们都是机器不执行的指令,无机器码。编辑ppt汇编语言的语句格式:汇编语言源程序是由汇编语句(即指令)组成的。典型的汇编语句格式如下:
[标号:]操作码[操作数][,操作数][;注释]数据的表示方法:(1)二进制数:由0、1组成,“逢2进1”的数制。如:01011110B(0~1后缀:B/b)(2)十六进制数:便于读写记忆的二进制数的简写形式。(0~9,A~F后缀:H/h)(3)十进制数:可用二进制数表示(也称为BCD码,0~9表示为:0000~1001B),也可用十进制数表示(后缀:D/d或无后缀)。编辑ppt2.4.1汇编语言程序设计的步骤
汇编语言程序设计:根据任务要求,采用汇编语言编制程序的过程称为汇编语言程序设计。汇编语言程序设计的步骤:(1)拟订设计任务书(2)建立数学模型(3)确定算法(4)分配内存单元,编制程序流程图(5)编制源程序进一步合理分配存储器单元和了解I/O接口地址;按功能设计程序,明确各程序之间的相互关系;用注释行说明程序,便于阅读和修改调试和修改。(6)上机调试(7)程序优化编辑ppt编制程序流程图:是指用各种图形、符号、指向线等来说明程序设计的过程。国际通用的图形和符号说明如下:椭圆框:开始和结束框,在程序的开始和结束时使用。矩形框:处理框,表示要进行的各种操作。菱形框:判断框,表示条件判断,以决定程序的流向。流向线:流程线,表示程序执行的流向。圆圈:连接符,表示不同页之间的流程连接。 各种几何图形符号如下图所示。编辑ppt2.4.2顺序程序设计
特点:顺序结构程序是最简单、最基本的程序。程序按编写的顺序依次往下执行每一条指令,直到最后一条。它能够解决某些实际问题,或成为复杂程序的子程序。[例题2]
将片内RAM30H单元中的两位压缩BCD码转换成二进制数送到片内RAM40H单元中。解:两位压缩BCD码转换成二进制数的算法为:(a1a0)BCD=10×a1+a0
程序流程图如右图所示。如:25=2×10+5用BCD码:(00100101)BCD=0010×1010+0101=11001编辑ppt程序如下:
ORG1000H START:MOVA,30H ;取两位BCD压缩码a1a0送A ANLA,#0F0H ;取高4位BCD码a1 SWAPA ;高4位与低4位换位
MOVB,#0AH ;将二进制数10送入B MULAB ;将10×a1送入A中
MOVR0,A ;结果送入R0中保存
MOVA,30H ;再取两位BCD压缩码a1a0送A ANLA,#0FH ;取低4位BCD码a0 ADDA,R0 ;求和10×a1+a0 MOV40H,A ;结果送入40H保存
SJMP$ ;程序执行完,“原地踏步”
END 编辑ppt[例题3]利用查表指令将内部RAM中20H单元的压缩BCD码拆开,转换成相应的ASCII码,存入21H、22H中,高位存在22H。解:BCD码的0~9对应的ASCII码为30H~39H,将30H~39H按大小顺序排列放入表TABLE中,先将BCD码拆分,将拆分后的BCD码送入A,表首址送入DPTR,然后领用查表指令MOVCA,@A+DPTR,查表即得结果,然后存入21H、22H中。程序如下:
ORG1000H START: MOV DPTR,#TABLE MOV A,20H ANL A,#0FH MOVC A,@A+DPTR MOV 21H,A编辑ppt
MOV A,20H ANL A,#0F0H SWAP A MOVC A,@A+DPTR MOV 22H, A SJMP $
TABLE: DB30H,31H,32H,33H,34H DB35H,36H,37H,38H,39HEND编辑ppt2.4.3分支程序设计特点:根据不同的条件,确定程序的走向。它主要靠条件转移指令、比较转移指令和位转移指令来实现。分支程序的结构如右图所示。
分支程序的设计要点如下:(1)先建立可供条件转移指令测试的条件。(2)选用合适的条件转移指令。(3)在转移的目的地址处设定标号。编辑ppt
解:此题有三个条件,所以有三个分支程序。这是一个三分支归一的条件转移问题。
X是有符号数,判断符号位是0还是1可利用JB或JNB指令。判断X是否等于0则直接可以使用累加器A的判0指令。程序流程图如右图所示。[例题4]
求符号函数的值。已知片内RAM的40H单元内有一自变量X,编制程序按如下条件求函数Y的值,并将其存入片内RAM的41H单元中。
1 X>0 Y= 0 X=0 -1 X<0编辑ppt
ORG1000H START:MOVA,40H ;将X送入A中
JZCOMP ;若A为0,转至COMP处
JNBACC.7,POST;若A第7位不为1(X为正数),则程序转到
POST处,否则(X为负数)程序往下执行
MOVA,#0FFH;将1(补码)送入A中
SJMPCOMP ;程序转到COMP处POST:MOVA,#01H ;将+1送入A中COMP:MOV41H,A ;结果存入Y SJMP$ ;程序执行完,“原地踏步”
END 编辑pptP76例2.61已知片内RAM的30H单元中存的有符号二进制数,求其补码,将补码存回30H单元。
ORG0000HLJMPCMPTORG0030HCMPT:MOVA,30HJNBACC.7,NCH;若A中为正数,不求补CPLA;若A中为负数,求补码ADDA,#01;A中数求反加1ORLA,#80H;在符号位拼1MOV30H,ANCH:SJMP$END编辑ppt2.4.4循环程序设计特点:程序中含有可以重复执行的程序段(循环体),采用循环程序可以有效地缩短程序,减少程序占用的内存空间,使程序的结构紧凑、可读性好。组成:循环程序一般由下面四部分组成。(1)循环初始化。位于循环程序开头,用于完成循环前的准备工作,如设置各工作单元的初始值以及循环次数。(2)循环体。循环程序的主体,位于循环体内,是循环程序的工作程序,在执行中会被多次重复使用。要求编写得尽可能简练,以提高程序的执行速度。(3)循环控制。位于循环体内,一般由循环次数修改、循环修改和条件语句等组成,用于控制循环次数和修改每次循环时的参数。(4)循环结束。用于存放执行循环程序所得的结果,以及恢复各工作单元的初值。编辑ppt
循环程序的结构:(1)先循环处理,后循环控制(即先处理后控制)。如左下图所示。
(2)先循环控制,后循环处理(即先控制后处理)。如右下图所示。
编辑ppt
循环程序按结构形式,有单重循环与多重循环。1.单重循环程序定义:循环体内部不包括其他循环的程序称为单重循环程序。[例题5]
已知片内RAM30H~3FH单元中存放了16个二进制无符号数,编制程序求它们的累加和,并将其和数存放在R4,R5中。解:每次求和的过程相同,可以用循环程序实现。16个二进制无符号数求和,循环程序的循环次数应为16次(存放在R2中),它们的和放在R4,R5中(R4存高8位,R5存低8位)。程序流程图如右图所示。编辑ppt程序如下:
ORG1000H START:MOVR0,#30H MOVR2,#10H ;设置循环次数(16)
MOVR4,#00H ;和高位单元R4清0 MOVR5,#00H ;和低位单元R5清0LOOP:MOVA,R5 ;和低8位的内容送A ADDA,@R0 ;将@R0与R5的内容相加并产生进位Cy MOVR5,A ;低8位的结果送R5 CLRA ;A清0 ADDCA,R4 ;将R4的内容和Cy相加
MOVR4,A ;高8位的结果送R4 INCR0 ;地址递增(加1)
DJNZR2,LOOP ;若循环次数减1不为0,则转到LOOP处循环;否则,循环结束
SJMP$ END 编辑ppt[例题6]
编制程序将片内RAM的30H~4FH单元中的内容传送至片外RAM的2000H开始的单元中。解:每次传送数据的的过程相同,可以用循环程序实现。30H~4FH共32个单元,循环次数应为32次(保存在R2中),为了方便每次传送数据时地址的修改,送片内RAM数据区首地址送R0,片外RAM数据区首地址送DPTR。程序流程图如右图所示。编辑ppt程序如下:
ORG1000H START:MOVR0,#30H MOVDPTR,#2000H MOVR2,#20H ;设置循环次数
LOOP:MOVA,@R0 ;将片内RAM数据区内容送A MOVX@DPTR,A ;将A的内容送片外RAM数据区
INCR0 ;源地址递增
INCDPTR ;目的地址递增
DJNZR2,LOOP ;若R2的不为0,则转到LOOP处继续循环;否则循环结束
SJMP$ END 编辑ppt2.多重循环程序定义:若循环中还包括有循环,称为多重循环(或循环嵌套)。
[例题7]编制程序设计50ms延时程序。解:延时程序与MCS-51指令执行时间(机器周期数)和晶振频率fOSC有直接的关系。当fOSC=12MHz时,机器周期为1s,执行一条DJNZ指令需要2个机器周期,时间为2s。50ms÷2s>255,因此单重循环程序无法实现,可采用双重循环的方法编写50ms延时程序。编辑ppt程序如下:
ORG1000H DELAY:MOVR7,#200;设置外循环次数(此条指令需要1个机器周期)
DLY1:MOVR6,#123;设置内循环次数
DLY2:DJNZR6,DLY2;(R6)-1=0,则顺序执行,否则转回
DLY2继续循环,延时时间为2s×123=246s NOP ;延时时间为1s DJNZR7,DLY1;(R7)-1=0,则顺序执行,否则转回DLY1继续循环,延时时间为(246+2+1+1)×200+2+1=50.003ms RET ;子程序结束
END 编辑ppt3.设计循环程序时应注意的问题(1)循环程序是一个有始有终的整体,它的执行是有条件的,所以要避免从循环体外直接转到循环体内部。(2)多重循环程序是从外层向内层一层一层进入,循环结束时是由内层到外层一层一层退出的。在多重循环中,只允许外重循环嵌套内重循环。不允许循环相互交叉,也不允许从循环程序的外部跳入循环程序的内部。(3)编写循环程序时,首先要确定程序结构,处理好逻辑关系。一般情况下,一个循环体的设计可以从第一次执行情况入手,先画出重复执行的程序框图,然后再加上循环控制和置循环初值部分,使其成为一个完整的循环程序。(4)循环体是循环程序中重复执行的部分,应仔细推敲,合理安排,应从改进算法、选择合适的指令入手对其进行优化,以达到缩短程序执行时间的目的。编辑ppt4.排序程序设计(冒泡法)
[例题7]设MCS-51单片机内部RAM起始地址为30H的数据块中共存有64个无符号数,编制程序使它们按从小到大的顺序排列。解:设64个无符号数在数据块中的顺序为:e64,e63,…,e2,e1,使他们从小到大顺序排列的方法很多,现以冒泡法为例进行介绍。冒泡法又称两两比较法。它先使e64和e63比较,若e64>e63,则两个存储单元中的内容交换,否则就不交换。然后使e63和e62比较,按同样的原则决定是否交换。一直比较下去,最后完成e2和e1的比较及交换,经过N1=63次比较(常用内循环63次来实现)后,e1的位置上必然得到数组中的最大值,犹如一个气泡从水低冒出来一样,如下页图所示(图中只画出了6个数的比较过程)。编辑ppt编辑ppt
第二次冒泡过程和第一次完全相同,比较次数也可以是63次(其实只需要62次,因为e1的位置上是数据块中的最大数,不需要再比较),冒泡后在e2的位置上得到数组中的次大数,如上页图所示。如此冒泡(即大循环)共63次(内循环63×63次)便可完成64个数的排序。实际编程时,可通过设置“交换标志”用来控制是否再需要冒泡,若刚刚进行完的冒泡中发生过数据交换(即排序尚未完成),应继续进行冒泡;若进行完的冒泡中未发生过数据交换(即排序已经完成),冒泡应该停止。例如:对于一个已经排好序的数组:1,2,3,…,63,64,排序程序只要进行一次循环便可根据“交换标志”的状态而结束排序程序的再执行,这自然可以减少631=62次的冒泡时间。冒泡法程序流程图如下页图所示。编辑ppt编辑ppt程序如下:
ORG1000H MOVR0,#30H ;数据区首地址送R0 MOVR3,#63H ;设置外循环次数在R3中LP0: CLR7FH ;交换标志位2FH.7清0 MOVA,R3 ;取外循环次数
MOVR2,A ;设置内循环次数LP1: MOV20H,@R0 ;数据区数据送20H单元中
MOVA,@R0 ;20H内容送A INCR0 ;修改地址指针(R0+1)
MOV21H,@R0;下一个地址的内容送21H CLRC ;Cy清0 SUBBA,21H ;前一个单元的内容与下一个单元的内容比较
JCLP2 ;若有借位(Cy=1),前者小,程序转移到LP2处执行,若无借位(Cy=0),前者大,不转移,程序往下执行编辑ppt
MOV@R0,20H;前、后内容交换
DECR0 MOV@R0,21H INCR0 ;修改地址指针(R0+1)
SETB7FH ;置位交换标志位2FH.7为1LP2: DJNZR2,LP1 ;修改内循环次数R2(减少),若R2≠0,则程序转到LP1处仍执行循环,若R2=0,程序结束循环,程序往下执行
JNB7FH,LP3 ;交换标志位2FH.7若为0,则程序转到LP3处结束循环
DJNZR3,LP0 ;修改外循环次数R3(减少),若R3≠0,程序转到LP0处,执行仍循环,若R3=0,程序结束循环,往下执行LP3: SJMP$ ;程序执行完,“原地踏步”
END 编辑ppt2.4.5查表程序设计
查表:根据存放在ROM中数据表格的项数来查找与它对应的表中值。适用场合:主要应用于数码显示、打印字符的转换、数据转换等场合。
1.采用MOVCA,@A+DPTR指令查表程序的设计方法(1)在程序存储器中建立相应的函数表(设自变量为X)。(2)计算出这个表中所有的函数值Y。将这群函数值按顺序存放在起始(基)地址为TABLE的程序存储器中。(3)将表格首地址TABLE送入DPTR,X送入A,采用查表指令MOVCA,@A+DPTR完成查表,就可以得到与X相对应的Y值于累加器A中。编辑ppt2.采用MOVCA,@A+PC指令查表程序的设计方法
当使用PC作为基址寄存器时,由于PC本身是一个程序计数器,与指令的存放地址有关,查表时其操作有所不同。(1)在程序存储器中建立相应的函数表(设自变量为X)。(2)计算出这个表中所有的函数值Y。将这群函数值按顺序存放在起始(基)地址为TABLE的程序存储器中。(3)X送入A,使用ADDA,#data指令对累加器A的内容进行修正,偏移量data由公式data=函数数据表首地址PC1确定,即data值等于查表指令和函数表之间的字节数。(4)采用查表指令MOVCA,@A+PC完成查表,就可以得到与X相对应的Y值于累加器A中。编辑ppt[例题8]利用查表的方法编写Y=X2(X=0,1,2,…,9)的程序。解:设变量X的值存放在内存30H单元中,求得的Y的值存放在内存31H单元中。平方表存放在首地址为TABLE的程序存储器中。方法一:采用MOVCA,@A+DPTR指令实现,查表过程如下图2.所示。
编辑ppt程序如下:
ORG1000H START:MOVA,30H ;将查表的变量X送入A MOVDPTR,#TABLE;将查表的16位基地址TABLE送DPTR MOVCA,@A+DPTR;将查表结果Y送A MOV31H,A ;Y值最后放入31H中
SJMP$
TABLE:DB0,1,4,9,16 DB25,36,49,64,81 END 方法二:采用MOVCA,@A+PC指令实现,查表过程如下页图所示。程序如下:编辑ppt
ORG1000H START:MOVA,30H;将查表的变量X送入A ADDA,#04H;定位修正
MOVCA,@A+PC;将查表结果Y送A MOV31H,A ;Y值最后放入31H中
SJMP$
TABLE:DB0,1,4,9,16 DB25,36,49,64,81 END
编辑pptP84例2.67将存放在片内RAM40H单元的1位16进制数转换为ASCII码,分别用查表和计算法完成。方法1:用查表求解。(略)方法2:计算求解:ORG0000HLP1:ADDA,#0AHLJMPSTARTADDA,30HORG0030HLP2:MOV40H,ASTART:MOVA,40HSJMP$ANLA,#0FHENDCLRCSUBBA,#0AHJCLP1ADDA,#0AHADDA,37HSJMPLP2编辑ppt2.4.6子程序设计子程序:能够完成确定任务,并能为其他程序反复调用的程序段称为子程序。特点:子程序可以多次重复使用,避免重复性工作,缩短整个程序,节省程序存储空间,有效地简化程序的逻辑结构,便于程序调试。
主程序:调用子程序的程序叫做主程序或称调用程序。主程序子程序….AD1:PUSHPSWMOVA,20HPUSH06HLCALLAD1RLA●MOV30H,ARLA….POP06HPOPPSWRET编辑ppt1.子程序的调用与返回主程序调用子程序的过程:在主程序中需要执行这种操作的地方执行一条调用指令(LCALL或ACALL),转到子程序,而完成规定的操作后,再在子程序最后应用RET返回指令返回到主程序断点处,继续执行下去。编辑ppt
(1)子程序的调用子程序的入口地址:子程序的第一条指令地址称为子程序的入口地址,常用标号表示。子程序的调用过程:单片机执行ACALL或LCALL指令时,首先将当前的PC值(调用指令的下一条指令的首地址)压入堆栈保存(低8位先进栈,高8位后进栈),然后将子程序的入口地址送入PC,转去执行子程序。(2)子程序的返回主程序的断点地址:子程序执行完毕后,返回主程序的地址称为主程序的断点地址,它在堆栈中保存。子程序的返回过程:子程序执行RET指令时,将栈顶的内容(返回地址)弹回给PC(先弹回PC的高8位,后弹回PC的低8位),使程序回到原先被中断的主程序地址(断点地址)去继续执行。编辑ppt注意:中断服务程序是一种特殊的子程序,它是在计算机响应中断时,由硬件完成调用而进入相应的中断服务程序。RETI指令与RET指令相似,区别在于RET是从子程序返回,RETI是从中断服务程序返回。
2.保存与恢复寄存器内容(1)保护现场
主程序转入子程序后,保护主程序的信息不会在运行子程序时丢失的过程称为保护现场。保护现场通常在进入子程序的开始时,由堆栈完成。如:
PUSHPSWPUSHACC…编辑ppt(2)恢复现场
从子程序返回时,将保存在堆栈中的主程序的信息还原的过程称为恢复现场。恢复现场通常在从子程序返回之前将堆栈中保存的内容弹回各自的寄存器。如:
…POPACCPOPPSW3.子程序的参数传递主程序在调用子程序时传送给子程序的参数和子程序结束后送回主程序的参数统称为参数传递。入口参数:子程序需要的原始参数。主程序在调用子程序前将入口参数送到约定的存储器单元(或寄存器)中,然后子程序从约定的存储器单元(或寄存器)中获得这些入口参数。出口参数:子程序根据入口参数执行程序后获得的结果参数。子程序在结束前将出口参数送到约定的存储器单元(或寄存器)中,然后主程序从约定的存储器单元(或寄存器)中获得这些出口参数。编辑ppt(3)传送子程序参数的方法
①应用工作寄存器或累加器传递参数。优点是程序简单、运算速度较快,缺点是工作寄存器有限。②应用指针寄存器传递参数。优点是能有效节省传递数据的工作量,并可实现可变长度运算。③应用堆栈传递参数。优点是简单,能传递的数据量较大,不必为特定的参数分配存储单元。④利用位地址传送子程序参数。4.子程序的嵌套
在子程序中若再调用子程序,称为子程序的嵌套。MCS-51单片机允许多重嵌套。如下页图所示。编辑ppt5.编写子程序时应注意的问题
①子程序的入口地址一般用标号表示,标号习惯上以子程序的任务命名。例如,延时子程序常以DELAY作为标号。
②主程序通过调用指令调用子程序,子程序返回主程序之前,必须执行子程序末尾的一条返回指令RET。
③
单片机能自动保护和恢复主程序的断点地址。但对于各工作寄存器、特殊功能寄存器和内存单元的内容,则必须通过保护现场和恢复现场实现保护。
④子程序内部必须使用相对转移指令,以便子程序可以放在程序存储器64KB存储空间的任何子域并能为主程序调用,汇编时生成浮动代码。
⑤子程序的参数传递方法同样适用于中断服务程序。
编辑ppt[例题9]
编制程序实现c=a2+b2,(a,b均为1位十进制数)。解:计算某数的平方可采用查表的方法实现,并编写成子程序。只要两次调用子程序,并求和就可得运算结果。设a,b分别存放于片内RAM的30H,31H两个单元中,结果c存放于片内RAM的40H单元。程序流程图如右图所示。编辑ppt主程序如下:
ORG1000H SR:MOVA,30H ;将30H中的内容a送入A ACALLSQR ;转求平方子程序SQR处执行
MOVR1,A ;将a2结果送R1 MOVA,31H ;将31H中的内容b送入A ACALLSQR ;转求平方子程序SQR处执行
ADDA,R1 ;a2+b2结果送A MOV40H,A ;结果送40H单元中
SJMP$ ;程序执行完,“原地踏步”求平方子程序如下(采用查平方表的方法):
SQR:INCA MOVCA,@A+PC RET TABLE:DB0,1,4,9,16 DB25,36,49,64,81 END 编辑pptP88例2.69编写子程序,将由R0和R1所指的片内RAM中的两个3字节无符号数相加,结果送到R0所指的片内RAM中。入口参数:R0,R1分别指向两个加数的低字节。出口参数:R0指向结果的高位字节子程序功能:将由R0和R1所指的片内RAM中的两个3字节无符号数相加,结果送到R0所指的片内RAM中。编辑ppt程序:
ORG0100HNADD:MOVR7,#03CLRCNADD1:MOVA,@R0
ADDCA,@R1MOV@R0,AINCR0INCR1DJNZR7,NADD1DECR0RETEND编辑pptP102作业题20
ORG0100HMOVR0,#30HMOVR7,#08HMOVA,
#00HL1:ADDA,@R0INCR0DJNZR7,L1MOV
B,#08HDIVABMOV3AH,AMOV3BH,BSJMP$END
编程计算片内RAM30H—37H这8个单元中的数的算术平均值,结果存放在3AH单元中。编辑ppt2.5程序设计举例2.5.1多字节算术运算程序例2.70已知片内RAM以BLOCK1和BLOCK2为起始的单元中,分别存有5字节无符号被减数和减数(低位在前,高位在后)。编程序求差值,并把结果存入以BLOCK1为起始地址的片内RAM中。解:两个5字节的数做减法,需要用循环结构设计程序。编辑ppt程序
ORG0100HSYSUB:MOVR0,#BLOCK1MOVR1,#BLOCK2MOVR2,#05HCLRCLOOP:MOVA,@R0SUBBA,@R1MOV@R0,AINCR0INCR1DJNZR2,LOOPRETEND编辑ppt[例2.71]编制程序实现两个16位二进制数乘法运算:
(R7R6)16×(R5R4)16→(R3R2R1R0)16
R7R6
×R5R4R4×R6R1R0
R4×R7R2R1
R5×R6R2R1R5×R7R3R2编辑pptP89程序解:MCS-51乘法指令只能完成两个8位无符号数相乘,因此16位无符号数求积必须将它们分解成8位数相乘来实现。其方法有先乘后加和边乘边加两种。现以边乘边加为例设计。程序如下
ORG1000H DMUL:MOVA,R6;第一个因数的低位送A MOVB,R4;第二个因数的低位送B MULAB ;第一个因数的低位乘以第二个因数的低位
R4×R6编辑ppt
MOVR0,A ;积的低位送R0 MOVR1,B ;积的高位送R1MOVA,R7 ;第一个因数的高位送A
MOVB,R4
;第二个因数的低位送B MULAB ;R4×R7
ADDA,R1
;部分积相加,形成进位Cy MOVR1,A ;部分积相加送R1 MOVA,B ;部分积的进位Cy加到高位
ADDCA,#00H MOVR2,A MOVA,R6 ;第一个因数的低位送A MOVB,R5 ;第二个因数的高位送B MULAB ;R5×R6
ADDA,R1 ;部分积相加,形成进位Cy MOVR1,A ;回送部分积
MOVA,R2 编辑ppt
ADDCA,B ;部分积相加
MOVR2,A ;回送部分积
MOVA,#00H ;部分积的进位Cy加到高位
ADDCA,#00H MOVR3,A ;回送部分积
MOVA,R7 ;第一个因数的高位送A MOVB,R5 ;第二个因数的高位送B MULAB ;R5×R7
ADDA,R2 ;部分积相加,形成进位Cy MOVR2,A ;回送部分积
MOVA,R3 ADDCA,B ;部分积相加
MOVR3,A ;回送部分积
RET END 编辑ppt2.5.2数制转换程序例2.72将4位压缩BCD码(十进制数)转换为二进制数。a3a2a1a0=a3×1000+a2×100+a1×10+a0=(a3×10+a2)×100+(a1×10+a0)公因式(ai×10+aj),可用双重嵌套子程序的方法将公因式用内层子程序编写。(ai为高4位,aj为低4位)外层子程序入口参数:4位压缩BCD码存R6R5。外层子程序出口参数:转换后的二进制数存R6R5。内层子程序入口参数:待转换的BCD存R2。内层子程序出口参数:转换后的二进制数存R2。编辑ppt程序(a3×10+a2)×100+(a1×10+a0)
ORG0100HBCDBIN2:MOVA,R6
MOVR2,AACALLBCDBIN1MOVA,R2MOVB,#100MULABMOVR6,BMOVR4,AMOVA,R5MOVR2,AACALLBCDBIN1MOVA,R2ADDA,R4MOVR5,AMOVA,R6
ADDCA,#00MOVR6,ARETBCDBIN1:MOVA,R2ANLA,#0F0HMOVB,#10SWAPAMULABMOVR3,AMOVA,R2ANLA,#0FHADDA,R3MOVR2,ARETEND编辑ppt[例2.73]将双字节二进制数转换成BCD码(十进制数)。解:将二进制数转换成BCD码的数学模型为:(a15a14…a1a0)2=(a15×215+a14×214+…+a1×21+a0×20)10上式右侧即为欲求的BCD码。它可作如下变换
(a15×214+a14×213+…+a1)×2+a0括号里的内容可变为:(a15×213+a14×212+a13×211+…+a2)×2+a1括号里的内容可变为:(a15×212+a14×211+a13×210+…+a3)×2+a2……
经过16次的变换后,括号里的内容可变为:
(0×2+a15)×2+a14
所以括号里的内容的通式为ai+1×2+ai,即为二进制数转换成BCD码的公因式。编辑ppt
在程序设计中,可利用左移指令(乘以2)实现ai+1×2,采用循环计算16次公因式的方法来完成二进制数转换成BCD码。入口参数:16位无符号数送R3,R2。出口参数:共有5位BCD数,万位→R6;千、百位→R5;十、个位→R4位。程序流程图如右图所示。编辑ppt程序如下:
ORG1000H BINBCD1:CLRA ;A清0 MOVR4,A ;清0出口参数寄存器
MOVR5,A MOVR6,A MOVR7,#10H ;设置循环次数16LOOP:CLRC ;标志位Cy清0,为二进制数×2作准备
MOVA,R2 ;ai+1×2 RLCA MOVR2,A MOVA,R3 RLCA MOVR3,A MOVA,R4 编辑ppt
ADDCA,R4 ;带进位自身相加,相当于乘2 DAA MOVR4,A MOVA,R5 ADDCA,R5 DAA MOVR5,A MOVA,R6 ADDCA,R6 MOVR6,A ;双字节十六进制数的万位数不超过6,不用调整
DJNZR7,LOOP ;若16位未循环完,转向LOOP继续循环,否则继续执行
RET END 编辑ppt2.5.3散转程序
散转程序:是一种并行分支程序(多分支程序),它是根据某种输入或运算结果,分别转向各个处理程序。在MCS-51中用JMP@A+DPTR指令来实现程序的散转。转移的地址最多为256个。其结构如图下所示。编辑ppt散转程序的设计方法:(1)应用转移指令表实现的散转程序直接利用转移指令(AJMP或LJMP)将欲散转的程序组形成一个转移表,然后将标志单元内容读入累加器A,转移表首址送入DPTR中,再利用散转指令JMP@A+DPTR实现散转。(2)应用地址偏移量表实现的散转程序直接利用地址偏移量形成转移表,特点是程序简单、转移表短,转移表和处理程序可位于程序存储器的任何地方。(3)应用转向地址表的散转程序直接使用转向地址表。其表中各项即为各转向程序的入口。散转时,使用查表指令,按某单元的内容查找到对应的转向地址,将它装入DPTR,然后清累加器A,再用JMP@A+DPTR指令直接转向各个分支程序。编辑ppt(4)应用RET指令实现散转程序用子程序返回指令RET实现散转。其方法是:在查找到转移地址后,不是将其装入DPTR中,而是将它压入堆栈中(先低位字节,后高位字节,即模仿调用指令)。然后通过执行RET指令,将堆栈中的地址弹回到PC中实现程序的转移。[例题12]
编制程序用单片机实现四则运算。解:在单片机的键盘上设置“+、-、×、÷”四个运算按键。其键值存放在寄存器R2中,当(R2)=00H时做加法运算,当(R2)=01H时做减法运算,当(R2)=02H时做乘法运算,当(R2)=03H时做除法运算。
P1口输入被加数、被减数、被乘数、被除数,输出商或运算结果的低8位;
P3口输入加数、减数、乘数、除数,输出余数或运算结果的高8位。编辑ppt程序简化流程图如下图所示。
程序如下:
ORG1000H START:MOVP1,#DATA1H;给P1口、P3口送入数据DATA1,DATA2,用于计算
MOVP3,#DATA2H 编辑ppt
MOVDPTR,#TABLE;将基址TABLE送DPTR CLRC;Cy清0MOVA,R2;将运算键键值送ASUBBA,#04H ;将键值和04H相减,用于产生Cy标志
JNCERROR ;若输入按键不合理,程序转ERROR处;否则,按键合理,程序继续执行
ADDA,#04H ;还原键值
CLRC ;Cy清0 RLA ;将A左移,即键值×2,形成正确的散转偏移量
JMP@A+DPTR ;程序跳到(A)+(DPTR)形成的新地址TABLE:AJMPPRG0 ;程序跳到PRG0处,将要做加法运算
AJMPPRG1 ;程序跳到PRG1处,将要做减法运算
AJMPPRG2 ;程序跳到PRG2处,将要做乘法运算
AJMPPRG3 ;程序跳到PRG3处,将要做除法运算ERROR:(按键错误的处理程序)(略) 编辑ppt
PRG0:MOVA,P1 ;被加数送A ADDA,P3 ;做加法运算,结果送入A,并影响进位Cy MOVP1,A ;和的低8位结果送P1 CLRA ;A清0 ADDCA,#00H ;将进位Cy送入A,作为和的高8位
MOVP3,A ;和的高8位结果送P3 RET ;返回开始程序
PRG1:MOVA,P1 ;被减数送A CLRC ;Cy清0 SUBBA,P3 ;做减法运算,结果送入A,并影响借位Cy MOVP1,A ;差的低8位结果送P1 CLRA ;A清0 RLCA ;将借位C
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 乡镇转让店铺合同范例
- 全款购车合同范例
- 亚克力安装合同范例
- 众筹合伙合同范例
- 公路安保工程合同范例
- 买房经济服务合同范例
- 公司委托他人经营合同范例
- 公寓买房定金合同范例
- 出租丧葬用品合同范例
- 代理小汽车租赁合同范例
- TCCIIP 001-2024 绿色低碳园区标准
- GB/T 20972.2-2025石油天然气工业油气开采中用于含硫化氢环境的材料第2部分:抗开裂碳钢、低合金钢和铸铁
- 美团供应链管理案例分析
- 2025广东深圳证券交易所及其下属单位信息技术专业人员招聘笔试参考题库附带答案详解
- 陕西省西安市西咸新区2024年九年级下学期中考一模数学试题(含答案)
- 2025年内蒙古乌兰察布盟单招职业适应性测试题库新版
- 2025年宜春幼儿师范高等专科学校单招职业倾向性测试题库含答案
- 《钠离子电池产业发展白皮书》
- 全国交管12123驾驶证学法减分考试题附答案
- 2025中考作文预测
- 油气田开发专业危害因素辨识与风险防控
评论
0/150
提交评论