MCS-51单片机指令系统与汇编语言程序设计.ppt
《MCS-51单片机指令系统与汇编语言程序设计.ppt》由会员分享,可在线阅读,更多相关《MCS-51单片机指令系统与汇编语言程序设计.ppt(79页珍藏版)》请在三一办公上搜索。
1、,2.3.5 位操作指令,位操作(布尔变量操作):操作数不是字节,而是字节中的某个位。每位的取值只能取0或1。指令的寻址范围:片内RAM位寻址区20H2FH,SFR中的11个可位寻址特殊寄存器中的83个可寻址位。特点:以进位标志Cy作为位累加器,可以实现布尔变量的传送、运算和控制转移等功能。指令中的位地址的表达方式:直接地址方式(如0AFH)、特殊功能寄存器名.位序号(如PSW.3)、字节地址.位序号(如0D0H.0)、位名称方式(如F0)和用户定义名称等几种方式。,http:/,1.位数据传送指令(2条)特点:在可寻址位与位累加器Cy之间进行的。不能在两个可寻址位间直接进行传送。指令格式:M
2、OV C,bit;(Cy)(bit)MOV bit,C;(bit)(Cy)例:比较 MOV A,20H;片内RAM 20H单元内容送A,传送8位二进制数 MOV C,20H;位地址为20H的位送C,传送1位二进制数P71 例2.55,http:/,2.位逻辑操作指令(6条),指令格式:操作码 C,其中:操作码包括ANL、ORL;包括bit、bit。CPL;dest 包括Cy、bit。功能:位逻辑操作指令用于位逻辑操作,还可用于对组合逻辑电路的模拟。采用位操作指令进行组合逻辑电路的设计比采用字节型逻辑指令节约存储空间,运算操作十分方便。P71 例2.56,http:/,3.位状态(置位、清0)控
3、制指令(4条)指令格式:CLR;0 SETB;1 其中:包括Cy、bit。4.位条件(控制)转移指令(5条)特点:以位的状态作为实现程序转移的判断条件。指令格式:(1)以进位标志位Cy内容为条件的转移指令 JC rel;若(Cy)=1,则转移(PC)(PC)+2+rel,否则顺序执行 JNC rel;若(Cy)=0,则转移(PC)(PC)+2+rel,否则顺序执行,http:/,(2)以位地址bit内容为条件的转移指令指令格式:JB bit,rel;若(bit)=1,则转移(PC)(PC)+3+rel,否则顺序执行 JNB bit,rel;若(bit)=0,则转移(PC)(PC)+3+rel,
4、否则顺序执行 JBC bit,rel;若(bit)=1,则转移(PC)(PC)+3+rel,且(bit)0,否则顺序执行,http:/,P73 例2.58,ORG 0100H MOV DPTR,#DATA MOV R0,#30H MOV R1,#40HLOOP:MOVX A,DPTR CJNE A,#0DH,LOOP1 SJMP$LOOP1:JB ACC.7,LOOP2 MOV R0,A INC R0 INC DPTR AJMP LOOP,LOOP2:MOV R1,A INC R1 INC DPTR AJMP LOOP END,http:/,2.4 汇编语言及程序设计,程序设计:就是编制计算机
5、的程序,即应用计算机所能识别的、接受的语言把要解决的问题的步骤有序地描述出来。程序设计语言的种类:(1)机器语言:机器语言是用二进制代码表示的计算机惟一能识别和执行的最原始的程序设计语言。(2)汇编语言:利用指令助记符来描述的程序设计语言。(3)高级语言:高级语言接近于人的自然语言,是面向过程而独立于机器的通用语言。汇编语言的指令类型:MCS-51单片机汇编语言,包含两类不同性质的指令。(1)指令:即指令系统中的指令。它们都是机器能够执行的指令,每一条指令都有对应的机器码。(2)伪指令:汇编时用于控制汇编的指令。它们都是机器不执行的指令,无机器码。,http:/,汇编语言的语句格式:汇编语言源
6、程序是由汇编语句(即指令)组成的。典型的汇编语句格式如下:标号:操作码 操作数,操作数;注释数据的表示方法:(1)二进制数:由0、1组成,“逢2进1”的数制。如:01011110B(01 后缀:B/b)(2)十六进制数:便于读写记忆的二进制数的简写形式。(09,AF 后缀:H/h)(3)十进制数:可用二进制数表示(也称为BCD码,09表示为:00001001B),也可用十进制数表示(后缀:D/d或无后缀)。,http:/,2.4.1 汇编语言程序设计的步骤,汇编语言程序设计:根据任务要求,采用汇编语言编制程序的过程称为汇编语言程序设计。汇编语言程序设计的步骤:(1)拟订设计任务书(2)建立数学
7、模型(3)确定算法(4)分配内存单元,编制程序流程图(5)编制源程序 进一步合理分配存储器单元和了解I/O接口地址;按功能设计程序,明确各程序之间的相互关系;用注释行说明程序,便于阅读和修改调试和修改。(6)上机调试(7)程序优化,http:/,编制程序流程图:是指用各种图形、符号、指向线等来说明程序设计的过程。国际通用的图形和符号说明如下:椭圆框:开始和结束框,在程序的开始和结束时使用。矩形框:处理框,表示要进行的各种操作。菱形框:判断框,表示条件判断,以决定程序的流向。流向线:流程线,表示程序执行的流向。圆 圈:连接符,表示不同页之间的流程连接。各种几何图形符号如下图所示。,http:/,
8、2.4.2 顺序程序设计,特点:顺序结构程序是最简单、最基本的程序。程序按编写的顺序依次往下执行每一条指令,直到最后一条。它能够解决某些实际问题,或成为复杂程序的子程序。例题2 将片内RAM 30H单元中的两位压缩BCD码转换成二进制数送到片内RAM 40H单元中。,解:两位压缩BCD码转换成二进制数的算法为:(a1a 0)BCD=10a1a0 程序流程图如右图所示。如:25=210+5用BCD码:(00100101)BCD=00101010+0101=11001,http:/,程序如下:ORG 1000HSTART:MOV A,30H;取两位BCD压缩码a1a0送A ANL A,#0F0H;
9、取高4位BCD码a1 SWAP A;高4位与低4位换位 MOV B,#0AH;将二进制数10送入B MUL AB;将10a1送入A中 MOV R0,A;结果送入R0中保存 MOV A,30H;再取两位BCD压缩码a1a0送A ANL A,#0FH;取低4位BCD码a0 ADD A,R0;求和10a1+a0 MOV 40H,A;结果送入40H保存 SJMP$;程序执行完,“原地踏步”END,http:/,例题3利用查表指令将内部RAM中20H单元的压缩BCD码拆开,转换成相应的ASCII码,存入21H、22H中,高位存在22H。解:BCD码的09对应的ASCII码为30H39H,将30H39H按
10、大小顺序排列放入表TABLE中,先将BCD码拆分,将拆分后的BCD码送入A,表首址送入DPTR,然后领用查表指令MOVC A,A+DPTR,查表即得结果,然后存入21H、22H中。程序如下:ORG 1000H START:MOV DPTR,#TABLEMOVA,20HANLA,#0FHMOVCA,A+DPTRMOV21H,A,http:/,MOVA,20HANLA,#0F0HSWAPAMOVCA,A+DPTRMOV22H,ASJMP TABLE:DB 30H,31H,32H,33H,34H DB 35H,36H,37H,38H,39H END,http:/,2.4.3 分支程序设计,特点:根据
11、不同的条件,确定程序的走向。它主要靠条件转移指令、比较转移指令和位转移指令来实现。分支程序的结构如右图所示。,分支程序的设计要点如下:(1)先建立可供条件转移指令测试的条件。(2)选用合适的条件转移指令。(3)在转移的目的地址处设定标号。,http:/,解:此题有三个条件,所以有三个分支程序。这是一个三分支归一的条件转移问题。X是有符号数,判断符号位是0还是1可利用JB或JNB指令。判断X是否等于0则直接可以使用累加器A的判0指令。程序流程图如右图所示。,例题4 求符号函数的值。已知片内RAM的 40H单元内有一自变量X,编制程序按如下条件求函数Y的值,并将其存入片内RAM 的41H单元中。1
12、 X0Y=0 X=0-1X0,http:/,ORG 1000HSTART:MOV A,40H;将X送入A中 JZ COMP;若A为0,转至COMP处 JNB ACC.7,POST;若A第7位不为1(X为正数),则程序转到 POST处,否则(X为负数)程序往下执行 MOV A,#0FFH;将1(补码)送入A中 SJMP COMP;程序转到COMP处POST:MOV A,#01H;将+1送入A中COMP:MOV 41H,A;结果存入Y SJMP$;程序执行完,“原地踏步”END,http:/,P76 例2.61,已知片内RAM的30H单元中存的有符号二进制数,求其补码,将补码存回30H单元。ORG
13、 0000H LJMP CMPT ORG 0030HCMPT:MOV A,30H JNB ACC.7,NCH;若A中为正数,不求补 CPL A;若A中为负数,求补码 ADD A,#01;A中数求反加1 ORL A,#80H;在符号位拼1 MOV 30H,ANCH:SJMP$END,http:/,2.4.4 循环程序设计,特点:程序中含有可以重复执行的程序段(循环体),采用循环程序可以有效地缩短程序,减少程序占用的内存空间,使程序的结构紧凑、可读性好。组成:循环程序一般由下面四部分组成。(1)循环初始化。位于循环程序开头,用于完成循环前的准备工作,如设置各工作单元的初始值以及循环次数。(2)循环
14、体。循环程序的主体,位于循环体内,是循环程序的工作程序,在执行中会被多次重复使用。要求编写得尽可能简练,以提高程序的执行速度。(3)循环控制。位于循环体内,一般由循环次数修改、循环修改和条件语句等组成,用于控制循环次数和修改每次循环时的参数。(4)循环结束。用于存放执行循环程序所得的结果,以及恢复各工作单元的初值。,http:/,循环程序的结构:(1)先循环处理,后循环控制(即先处理后控制)。如左下图所示。(2)先循环控制,后循环处理(即先控制后处理)。如右下图所示。,http:/,循环程序按结构形式,有单重循环与多重循环。1单重循环程序定义:循环体内部不包括其他循环的程序称为单重循环程序。,
15、例题5 已知片内RAM 30H3FH单元中存放了16个二进制无符号数,编制程序求它们的累加和,并将其和数存放在R4,R5中。解:每次求和的过程相同,可以用循环程序实现。16个二进制无符号数求和,循环程序的循环次数应为16次(存放在R2中),它们的和放在R4,R5中(R4存高8位,R5存低8位)。程序流程图如右图所示。,http:/,程序如下:ORG 1000HSTART:MOV R0,#30H MOV R2,#10H;设置循环次数(16)MOV R4,#00H;和高位单元R4清0 MOV R5,#00H;和低位单元R5清0LOOP:MOV A,R5;和低8位的内容送A ADD A,R0;将R0
16、与R5的内容相加并产生进位Cy MOV R5,A;低8位的结果送R5 CLR A;A清0 ADDC A,R4;将R4的内容和Cy相加 MOV R4,A;高8位的结果送R4 INC R0;地址递增(加1)DJNZ R2,LOOP;若循环次数减1不为0,则转到LOOP处循环;否则,循环结束 SJMP$END,http:/,例题6 编制程序将片内RAM的30H4FH单元中的内容传送至片外RAM的2000H开始的单元中。,解:每次传送数据的的过程相同,可以用循环程序实现。30H4FH共32个单元,循环次数应为32次(保存在R2中),为了方便每次传送数据时地址的修改,送片内RAM数据区首地址送R0,片外
17、RAM数据区首地址送DPTR。程序流程图如右图所示。,http:/,程序如下:ORG 1000H START:MOV R0,#30H MOV DPTR,#2000H MOV R2,#20H;设置循环次数 LOOP:MOV A,R0;将片内RAM数据区内容送A MOVX DPTR,A;将A的内容送片外RAM数据区 INC R0;源地址递增 INC DPTR;目的地址递增 DJNZ R2,LOOP;若R2的不为0,则转到LOOP处继续循 环;否则循环结束 SJMP$END,http:/,2多重循环程序,定义:若循环中还包括有循环,称为多重循环(或循环嵌套)。例题7 编制程序设计50ms延时程序。解
18、:延时程序与MCS-51指令执行时间(机器周期数)和晶振频率fOSC有直接的关系。当fOSC=12MHz时,机器周期为1s,执行一条DJNZ指令需要2个机器周期,时间为2s。50ms 2s255,因此单重循环程序无法实现,可采用双重循环的方法编写50ms延时程序。,http:/,程序如下:ORG 1000H DELAY:MOV R7,#200;设置外循环次数(此条指令需要1个机器周期)DLY1:MOV R6,#123;设置内循环次数 DLY2:DJNZ R6,DLY2;(R6)1=0,则顺序执行,否则转回 DLY2继续循环,延时时间为2s123=246s NOP;延时时间为1s DJNZ R7
19、,DLY1;(R7)1=0,则顺序执行,否则转回DLY1继续循环,延时时间为(246211)20021=50.003ms RET;子程序结束 END,http:/,3设计循环程序时应注意的问题(1)循环程序是一个有始有终的整体,它的执行是有条件的,所以要避免从循环体外直接转到循环体内部。(2)多重循环程序是从外层向内层一层一层进入,循环结束时是由内层到外层一层一层退出的。在多重循环中,只允许外重循环嵌套内重循环。不允许循环相互交叉,也不允许从循环程序的外部跳入循环程序的内部。(3)编写循环程序时,首先要确定程序结构,处理好逻辑关系。一般情况下,一个循环体的设计可以从第一次执行情况入手,先画出重
20、复执行的程序框图,然后再加上循环控制和置循环初值部分,使其成为一个完整的循环程序。(4)循环体是循环程序中重复执行的部分,应仔细推敲,合理安排,应从改进算法、选择合适的指令入手对其进行优化,以达到缩短程序执行时间的目的。,http:/,4排序程序设计(冒泡法),例题7 设MCS-51单片机内部RAM起始地址为30H的数据块中共存有64个无符号数,编制程序使它们按从小到大的顺序排列。解:设64个无符号数在数据块中的顺序为:e64,e63,e2,e1,使他们从小到大顺序排列的方法很多,现以冒泡法为例进行介绍。冒泡法又称两两比较法。它先使e64和e63比较,若e64e63,则两个存储单元中的内容交换
21、,否则就不交换。然后使e63和e62比较,按同样的原则决定是否交换。一直比较下去,最后完成e2和e1的比较及交换,经过N1=63次比较(常用内循环63次来实现)后,e1的位置上必然得到数组中的最大值,犹如一个气泡从水低冒出来一样,如下页图所示(图中只画出了6个数的比较过程)。,http:/,http:/,第二次冒泡过程和第一次完全相同,比较次数也可以是63次(其实只需要62次,因为e1的位置上是数据块中的最大数,不需要再比较),冒泡后在e2的位置上得到数组中的次大数,如上页图所示。如此冒泡(即大循环)共63次(内循环6363次)便可完成64个数的排序。实际编程时,可通过设置“交换标志”用来控制
22、是否再需要冒泡,若刚刚进行完的冒泡中发生过数据交换(即排序尚未完成),应继续进行冒泡;若进行完的冒泡中未发生过数据交换(即排序已经完成),冒泡应该停止。例如:对于一个已经排好序的数组:1,2,3,63,64,排序程序只要进行一次循环便可根据“交换标志”的状态而结束排序程序的再执行,这自然可以减少631=62次的冒泡时间。冒泡法程序流程图如下页图所示。,http:/,http:/,程序如下:ORG 1000HMOV R0,#30H;数据区首地址送R0MOV R3,#63H;设置外循环次数在R3中LP0:CLR 7FH;交换标志位2FH.7清0MOV A,R3;取外循环次数MOV R2,A;设置内
23、循环次数LP1:MOV 20H,R0;数据区数据送20H单元中MOV A,R0;20H内容送AINC R0;修改地址指针(R0+1)MOV 21H,R0;下一个地址的内容送21HCLR C;Cy清0 SUBB A,21H;前一个单元的内容与下一个单元的内容比较JC LP2;若有借位(Cy=1),前者小,程序转移到LP2处执行,若无借位(Cy=0),前者大,不转移,程序往下执行,http:/,MOV R0,20H;前、后内容交换DEC R0MOV R0,21H INC R0;修改地址指针(R0+1)SETB 7FH;置位交换标志位2FH.7为1LP2:DJNZ R2,LP1;修改内循环次数R2(
24、减少),若R20,则程序转到LP1 处仍执行循环,若R2=0,程序结束循环,程序往下执行JNB 7FH,LP3;交换标志位2FH.7若为0,则程序转到LP3处结束循环DJNZ R3,LP0;修改外循环次数R3(减少),若R30,程序转到LP0处,执行仍循环,若R3=0,程序结束循环,往下执行LP3:SJMP$;程序执行完,“原地踏步”END,http:/,2.4.5 查表程序设计,查表:根据存放在ROM中数据表格的项数来查找与它对应的表中值。适用场合:主要应用于数码显示、打印字符的转换、数据转换等场合。1.采用MOVC A,A+DPTR指令查表程序的设计方法(1)在程序存储器中建立相应的函数表
25、(设自变量为X)。(2)计算出这个表中所有的函数值Y。将这群函数值按顺序存放在起始(基)地址为TABLE的程序存储器中。(3)将表格首地址TABLE送入DPTR,X送入A,采用查表指令MOVC A,A+DPTR完成查表,就可以得到与X相对应的Y值于累加器A中。,http:/,2.采用MOVC A,A+PC指令查表程序的设计方法 当使用PC作为基址寄存器时,由于PC本身是一个程序计数器,与指令的存放地址有关,查表时其操作有所不同。(1)在程序存储器中建立相应的函数表(设自变量为X)。(2)计算出这个表中所有的函数值Y。将这群函数值按顺序存放在起始(基)地址为TABLE的程序存储器中。(3)X送入
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- MCS 51 单片机 指令系统 汇编语言 程序设计
链接地址:https://www.31ppt.com/p-6512329.html