第四章程序设计基础bhyb.pptx
《第四章程序设计基础bhyb.pptx》由会员分享,可在线阅读,更多相关《第四章程序设计基础bhyb.pptx(52页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、第4章程序设计基础4.1MCS-51单片机汇编语言的伪指令MCS-51单片机中除了前面讲述的指令系统中111条指令外,还有另一类指令,这类指令称为伪指令。例如在程序的开头处有ORG,程序结束处END,等等。这些指令在汇编后不产生机器码,只是在程序进行汇编时,向汇编软件提供程序中的一些特殊信息。比如,程序起止,定义的数据,表格存放位置等。下面介绍单片机汇编语言程序设计中,常用的伪指令有以下几种:1.起始伪指令起始伪指令ORGORG伪指令的功能是规定这条下面源程序和数据的起始地址格式为:ORGAddrl6.例如:ORG2000HSTART:MOVA即规定标号START所在地址为2000H,也就是第
2、一条指令从2000H开始存放。一般说来,ORGAddrl6,表示了一个源程序或数据块的起始地址。在一段程序中允许多次使用ORG指令,以规定不同的程序段或数据块的起始位置,并规定地址从小到大,不允许重叠。2结束伪指令ENDEND伪指令用来指示源程序到此全部结束,在汇编时,当汇编程序检测到源程序中的该指令时,它就认为源程序已经到此为止。对END后面的指令都不予汇编。因此一个源程序只能有一个END语句,且放在整个程序的末尾。3赋值伪指令赋值伪指令EQU格式:字符名称EQU常数或汇编符号EQU伪指令的功能是将一个常数和汇编符号赋给字符名称在使用中要注意:(1)字符名称不等于标号,不用“:”来作分隔符:
3、(2)和MOV传送指令不一样,用EQU赋值的常数和汇编符号,其值在整个程序中有效;(3)使用EQU伪指令时必须先赋值,后使用:(4)用EQU赋过值的符号名称可以用作数据地址,代码地址,位地址或是一个立即数。可以是8位或16位的。例如:ABCEQU30HDLYEQU8034HMOVA,ABCLCALLDLY这里ABC代表了30H的内存单元。DLY定义16位地址,实际是一个子程序的入口地址。4定义字符指令定义字符指令DB格式:DB8位二进制常数表DB伪指令的功能是从ROM的指定的地址单元开始存入DB后面的数据,这些数据可以是用逗号隔开的字节串或括在单引号中的ASCII字符串。例如:ORG 2000
4、HDB 54HTAB:DB 0B7H 34H 96HSTR:DB 6AB4定义字符指令定义字符指令DB经汇编后:(2000H)=54H(2001H)=B7H(2002H)=34H(2003H)=96H(2004H)=36H(2005H)=41H(2006H)=42H 其中36H,41H,42H分别是6、A、B的ASCII编码值。5定义字伪指令定义字伪指令DW格式:DW16位数据表该指令用于从指定地址开始,在程序储存器的连续单元中定义双字节的数据。例如:ORG 1000HTAB:DW 3456H,7BH,10H 汇编后(1000H)=34H (1001H)=56H(1002H)=00H (100
5、3H)=7BH(1004H)=00H (1005H)=10H 6定义储存空间伪指令定义储存空间伪指令DS格式:DS表达式在汇编时,从指令地址开始保留DS之后表达式的值所规定的储存单元以备后用。例如:ORG1000HDS08HDB30H汇 编 后,从 1000H保 留 8个 单 元,然 后(1008H)=30H。注意:以上DB,DW,DS只对程序储存器起作用,它们不能对数据储存器进行初始化。7位地址符号命令位地址符号命令BIT格式:字符名BIT位地址其功能是将BIT之后的位地址值赋给字符名。例如:A1BITP1.0A2BITP1.1SETBA1;(P1.0)1CLRA2;(P1.1)04.2 汇
6、编语言程序的基本结构汇编语言程序的基本结构汇编语言程序一般有4种结构形式:顺序结构,分支结构,循环结构利子程序结构。1顺序结构顺序结构顺序结构是最简单的程序结构,其特点:程序中的语句由前向后顺序执行,直到最后,这种程序中的无分支、循环和子程序调用。2分支程序分支程序分支程序是通过条件转移指令实现的,根据程序执行中的条件对程序进行判断,满足条件则进行程序转移,不满足条件就顺序执行。对于MCS-51单片机,能实现分支转移的指令有JZ,JNZ,CJNE,DJNZ和位状态条件判断指令JC,JNC,JB,JNB等。这些指令条件判断在指令系统中已经作了说明。分支程序又分为单分支和多分支结构:2分支程序分支
7、程序(1)单分支程序。单分支程序都是使用前述的条件转移指令实现的。例4.1:假设内部RAM40H与41H单元中有两个无符号数,现要求将其大者存入40H中,小者存入41H中。2分支程序分支程序源程序如下:MOVA,40HCLRCSUBBA41HJNCWAITMOVA,40HXCHA,41HMOV40H,AWAIT:SJMPWAIT2分支程序分支程序例4.2:设变量X存于内部RAM20H单元,函数值Y存于21H单元,试按照下式要求对Y赋值。X+3X0Y=20X=0XX0流程图如图4.2所示:2分支程序分支程序源程序如下:MOVA,20HJZZERO;(A)=0JBACC.7,STOREADDA,#
8、03HSJMPSTOREZERO:MOVASTORE:MOV21H(2)多分支程序例4.3在某单片机应用系统中,接有一键盘,键值(代表哪个键被按下)存放在内部RAM的40H单元内。设计一段程序实现如下功能:如果(40H)=00H,调用子程序SUBl;如果(40H)=01H,调用子程序SUB2:如果(40H)=02H,调用子程序SUB3;如果(40H)=03H,调用子程序SUB4;如果(40H)=04H,调用子程序SUB5。解:先画出本例的示意流程图如图4.3:(2)多分支程序程序如下:MOVA,40HMOVDPTR,#TABLERLA;(A)(A)2ADDA,40HJMPA+DPTRTABLE
9、:LCALLSUBlLCALLSUB2LCALLSUB3LCALLSUB4LCALLSUB5上例的这种结构通常又称为散转结构。在本例中,由于LCALL指令是3字节指令,为保证JMP指令执行后能正确调用相应子程序,所以JMP指令前要将(40H)乘3并存入A中。3循环结构循环结构程序设计中,经常需要连续重复执行某段程序,解决这种问题最好采用循环结构的程序来完成,这种设计方法可大大地简化程序。循环程序一般如下四部分组成:置循环初值用来设置循环初值,如:预置变量,计数器数据指针初值等,为循环作准备。循环体循环体指要求重复执行的程序段,通过它完成对数据进行实际处理的任务。3循环结构循环结构修改控制变量一
10、般用一个工作寄存器Rn作为对循环次数的计数,每循环一次计数器减一,即修改循环控制变量。循环控制部分控制循环次数,当循环一定的次数后当满足循环结束条件时,停止循环。(1)循环次数已知的单循环例4.4:设计一段程序,统计累加器A的8位数中1的个数,把结果存入30H单元中。解题思路:用RLC指令把A带上Cy循环左移8次,每移一次,判移入Cy的是否为1,若为1,(30H)+1。流程图如图4.5。MOV30H,#00H;循环初值MOVR2,#08HLOOP:RLCAJNCNEXTINC30HNEXT:DJNZR2(2).条件控制的单重循环例4.5设字符串存放在RAM31H开始的单元中,以“$”作为结束标
11、志,现要求计算该字符串的长度,并将其存放在20H中。程序如下:CRLAMOVR0,#31HLOOP:CJNER0,#24H,NEXT;与“$”(ASCII值为十六进制24)比较SJMPCOMP;找到“$”结束NEXT:INCA;不为“$”则计数器加1INCR0;修改地址指针SJMPLOOPCOMP:MOV20H,A;存结果4子程序子程序(1)子程序的概念在程序设计中,经常发生一些程序段被频繁使用,如一些数学函数的计算,二十进制转换,显示程序,延时程序等,为了避免重复节省内存,常把这些程序作为一种独立的,标准化的通用程序段,供需要时调用,这些独立程序段称为子程序。主程序可以通过专门的指令来调用子
12、程序,称子程序调用。当子程序执行完毕后,再由返主指令,返回到原程序,并带回结果。(2)子程序设计几点注意l子程序的第一条指令地址称为子程序的入口地址。该指令前必须要有标志,标号最好以子程序功能命名,以便主程序调用,这样会一目了然,例如延时程序常以DELAY作为标号。l主程序调用子程序是通过LCALL、ACALL指令完成的。例如LCALLDELAY执行调用延时子程序,子程序返回主程序是通过执行RET指令来完成的。l子程序内部如果有控制转移指令,最好使用相对转移指令,以便汇编时生成不随子程序的存放地址改变而改变的代码,子程序可以存放ROM空间的任意位置。l在子程序开始部分要注意现场保护,在退出子程
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 第四 章程 设计 基础 bhyb
限制150内