资源描述:
《单片机原理与应用 教学课件 作者 邱丽芳 第4章.ppt》由会员上传分享,免费在线阅读,更多相关内容在应用文档-天天文库。
1、第4章MCS-51系列单片机汇编语言程序设计汇编语言程序设计的基本方法4.1汇编语言程序设计举例4.24.1汇编语言程序设计的基本方法当给定一个题目、进行程序设计时,一般应按以下几个步骤进行:分析题目;确定算法;程序结构的设计;编写源程序;汇编和调试。1.分析题目2.确定算法3.程序结构的设计4.编写源程序5.汇编和调试4.2汇编语言程序设计举例4.2.1顺序结构程序设计【例4-1】单字节十进制加法。假设两个十进制数x1、x2分别存放于片内RAM50H、51H单元中,其和存于片内RAM60H、61H单元中。程序如下:ORG1000HMOVA,50HADDA,
2、51HDAA;十进制调整MOV60H,A;个位和十位存于60H单元中CLRAADDCA,#00HMOV61H,A;百位存于61H单元中SJMP$END4.2.2分支结构程序设计图4-1例4-4程序流程图在程序应用中,程序不可能始终是顺序执行的。通常需要根据实际问题中给定的条件,判断条件是否满足,从而产生一个或多个分支,以决定程序的流向。分支程序的特点是程序中含有转移指令,根据不同的条件,执行不同的程序段。【例4-4】比较两个无符号数的大小。设片内RAM的20H、21H两个单元中存放两个无符号数,试比较它们的大小,并将较大数存于20H单元中,较小数存于21H单
3、元中。程序流程图如图4-1所示。程序如下:ORG2000HCLRCMOVA,20HSUBBA,21HJNCMAX;若20H单元中的数大,则转移MOVA,20HXCHA,21HMOV20H,AMAX:SJMPMAXEND图4-1例4-4程序流程图例4-4程序中,用减法指令SUBB来比较两数的大小。由于这是一条带借位的减法指令,所以在执行该指令前,先要把进位C清零。用减法指令通过借位(CY)的值来判断两数的大小,是比较两个无符号数大小的常用方法。用减法指令比较大小,会破坏累加器A的内容。执行JNC指令后,形成了程序分支。执行SJMP指令,则是实现分支程序的汇合。
4、4.2.3循环程序循环程序一般由以下3部分组成。①初始化部分。这是循环程序的准备部分,如给循环次数计数器、地址指针和某些变量赋初值。②循环体部分。这部分是由重复执行部分和循环控制部分组成。是循环程序的主体。重复执行部分要求编写得尽可能简洁,以提高程序的执行速度。循环控制部分也在循环体内,由修改循环控制变量和条件转移语句等组成,用于控制循环次数或判断循环结束的条件。③结束部分。用于存放程序执行结果。循环程序分为单循环和多重循环,下面分别举例说明。1.单循环程序(1)循环次数已知。【例4-7】在片内RAM的20H~2FH连续16个单元中存放单字节无符号数,求16
5、个无符号数之和。【解】这是重复相加问题,16个单字节数的和最大不会超过两个字节,设和存放于41H、40H中,R7中存放循环次数,R0作加数指针。程序流程图如图4-3所示。ORG2000HMOVR7,#0FH;循环次数初值送R7MOVR0,#21H;设加数地址指针MOV41H,#00HMOVA,20HLOOP1:ADDA,@R0MOV40H,AJNCLOOP2INC41H;有进位,和的高8位加1LOOP2:INCR0;地址指针加1DJNZR7,LOOP1;判断循环结束条件SJMP$END(2)循环次数未知。以上两例都是循环次数已知的情况,以计数器的值变到零作为
6、循环结束条件。另外,有些循环程序事先不知道循环次数,这时需要根据判断循环条件的成立与否,或用建立标志的方法,来控制循环程序的结束。【例4-9】假设从片内RAM的50H单元开始,连续存放一串字符,以回车符(其ASCII为ODH)作为结束标志,要求测出该字符串的长度。测试方法可采用将该字符串中的每一个字符与回车符依次相比,若不相等,则将统计字符串长度的计数器加1,继续比较;若比较相等,则表示该字符串结束,这时计数器中的值就是字符串的长度。程序如下:ORG8000HCLRA;计数器清0MOVR0,#50H;设地址指针L0:CJNE@R0,#0DH,L1;比较SJM
7、P$;相等,结束L1:INCA;不相等,计数器加1INCR0;修改地址指针SJMPL02.多重循环程序【例4-10】编制用软件方法延时1ms的程序。软件延时时间的长短与两个因素有关,一是单片机工作的晶振频率,另一个是延时程序中的循环次数。如果使用12MHz晶振,一个机器周期为1s,如果延时时间较长,单循环安排不了,可以采用多重循环。源程序如下:ORG1000HDELY:MOVR1,#02HDL0:MOVR2,#0F8HDJNZR2,$DJNZR1,DL0RET这是一个二重循环程序。前2条指令的机器周期数为1,后3条指令的机器周期数为2。执行内循环所用的机器
8、周期数为248×2=496,执行外循环所用的机器周期