最新单片机培训四汇编语言程序设计.ppt

上传人:文库蛋蛋多 文档编号:2206103 上传时间:2023-01-30 格式:PPT 页数:70 大小:1.13MB
返回 下载 相关 举报
最新单片机培训四汇编语言程序设计.ppt_第1页
第1页 / 共70页
最新单片机培训四汇编语言程序设计.ppt_第2页
第2页 / 共70页
最新单片机培训四汇编语言程序设计.ppt_第3页
第3页 / 共70页
最新单片机培训四汇编语言程序设计.ppt_第4页
第4页 / 共70页
最新单片机培训四汇编语言程序设计.ppt_第5页
第5页 / 共70页
点击查看更多>>
资源描述

《最新单片机培训四汇编语言程序设计.ppt》由会员分享,可在线阅读,更多相关《最新单片机培训四汇编语言程序设计.ppt(70页珍藏版)》请在三一办公上搜索。

1、1,第4章 汇编语言程序设计,周剑峰,2,汇编语言简介,汇编语言格式,计算机所能执行的每条指令都对应一组二进制代码。为了容易理解和记忆计算机的指令,人们用一些英语的单词和字符以及数字作为助记符来描述每一条指令的功能。用助记符描述的指令系统,称为机器的汇编语言系统,简称汇编语言。汇编语言也是面向机器的,每种计算机系统也都有它自己的汇编语言,用汇编语言编写的程序,称为汇编语言源程序或汇编源程序。,由操作助记符和操作数字段组成汇编指令指能汇编成机器语言代码的指令。格式:操作码 操作数1,操作数2,操作数3,3,汇编伪指令,伪指令:汇编时不产生机器语言代码的指令,仅提供汇编控制信息。,一、定位伪指令,

2、ORG m m:一般为十六进制数。m指出在该伪指令后的指令的汇编地址,即生成的机器指令起始存贮器地址。显然,当使用多条ORG m伪指令时,应注意其后生成的机器指令存放地址不应重叠。例如:ORG 0START:SJMP MAIN ORG 0BH LJMP PTFO ORG 40H MAIN:,4,二、定义字节伪指令 标号:DB X1、X2 Xn,例如:ORG 1000HDB 0AAH SR-DATA:DB25,25H DZX-DATA:DBMCS-51经汇编后,从地址1000H处存贮器的内容为:(1000H)=AAH(1001H)=19H(1002H)=25H(1003H)=4DH(1004H)

3、=43H(1005H)=53H(1006H)=2DH(1007H)=35H(1008H)=31H,5,三、字定义伪指令 标号:DW Y1、Y2 Yn,通知汇编程序从当前ROM地址开始,保留存贮单元,并存入DW后面的数据。存放时高8位在前,低8位在后。例如:ORG 1000H DW1234HSR_DATA:DW56H,2000经汇编后,从地址1000H处存贮器的内容为:(1000H)=12H(1001H)=34H(1002H)=00H(1003H)=56H(1004H)=07H(1005H)=D0H,6,四、EQU 赋值伪指令 字符名称 EQU 项(数或汇编符号),EQU伪指令是把“项”赋给“字

4、符名称”,注意这里的“字符名称”不同于标号(其后没有冒号),但它是必须的。用EQU赋过值的符号名可以用作数据地址、代码地址、位地址或是一个立即数。,例如:AAEQUR1MOVA,AA D10EQU10ADD_YEQU07ABHMOVA,D10LCALLADD_Y,7,五、DS定义存贮空间伪指令 DS 表达式,在汇编时,从指定地址开始保留DS之后“表达式”的值所规定的存贮单元。,例如:ORG1000HDS07HDB20H,20 DW12H 经汇编后,从地址1000H开始保留7个单元,然后从1007H处存贮器的内容为:(1007H)=20H(1008H)=14H(1009H)=00H(100AH)

5、=12H,8,六、DATA数据地址赋值伪指令 字符名称 DATA 表达式,这里的“字符名称”与标号不同(其后没有冒号),但它是必须的,其功能是把“表达式”的值赋给左边的“字符名称”。DATA伪指令与EQU伪指令的主要区别是:EQU定义的“字符名称”必须先定义后使用,而DATA定义的“字符名称”没有这种限制,故DATA伪指令通常用在源程序的开头或末尾。,例如:ORG0100H AA DATA 35H DPTRA DATA0AA00H MOVA,AA;(35H)A MOVDPTR,#DPTRA;0AA00H DPTR,9,七、BIT定义位地址符号伪指令 字符名称 BIT 位地址,这里的“字符名称”

6、与标号不同(其后没有冒号),但它是必须的,其功能是把BIT之后的“位地址”值赋给“字符名称”。,例如:P11BITP1.1A2BIT02HMOVC,P11MOVA2,C,八、汇编结束伪指令 END指出汇编结束,其后即使还有指令,汇编程序也不作处理。,10,汇编语言程序设计,汇编语言程序设计方法,程序设计步骤,根据设计任务要求,采用汇编语言编制程序的过程。,应用程序设计步骤:1.拟定任务书 2.建立数学模型 3.建立算法 4.绘制程序流程图 5.编制汇编语言源程序 6.上机调试,注意:汇编调试需要多次试验,往往调试占整个任务的大部分时间,11,程序设计要求及基本方法,可靠性高、可读性好、效率高、

7、占用存储容量小和执行速度快,汇编程序结构设计的基本方法:,汇编程序结构设计的基本要求:,1.顺序程序的设计 2.分支程序设计 3.循环程序设计 4.子程序设计5.查表程序设计6.散转程序设计,12,一、顺序程序,顺序程序是最简单的程序结构,在顺序程序中没有任何的转移指令,以下是一个典型的例子。例1:字节(双字)加法。将内部RAM 30H开始的4个单元中存放的4字节十六进制数和内部RAM 40H单元开始的4个单元中存放的4字节十六进制数相加,结果存放到40H开始的单元中。(如0a0ab234fh存放在片内RAM30h开始的4个单元如图所示),13,题意分析示意图,(1)题意分析。题目的要求如图所

8、示。,14,ORG0200HMOVA,30HADD A,40HMOV40H,A;最低字节加法并送结果MOVA,31HADDC A,41HMOV41H,A;第二字节加法并送结果,(2)汇编语言源程序。按照双字节加法的思路,实现4字节加法的源程序如下:,15,MOVA,32HADDC A,42HMOV42H,A;第三字节加法并送结果MOVA,33HADDCA,43HMOV43H,A;第四字节加法并送结果,进位 位在CY中 SJMP$END,16,分支程序,分支程序可以分为:单分支双分支多分支,17,单分支,单分支程序的基本结构:,18,双分支,双分支程序的基本结构:,19,多分支,多分支程序的基本

9、结构:,20,例:如图所示,设计一段程序实现功能:如果(A)中1的个数为奇数,所有的二极管发光;如果全0,则只让VD0-VD3发光;否则全灭。,单分支程序举例,21,ORG 0200H JB P,JISHU JZ QUAN MOV P2,#00H SJMP TOendJISHU:MOV P2,#0FFH SJMP TOendQUAN:MOV P2,#0FHTOend:SJMP$END,流程图:,源程序:,判断奇偶标志位的值,判断(A)的值是否为0,(A)有偶数个1,二极管灭,(A)有奇数个1,二极管全亮,(A)为0,VD0-VD3亮,注意:在MCS-51单片机中,实现单分支常用的指令有:JZ、

10、JNZ、DJNZ、CJNE、JC、JNC、JB、JNB、JBC等。,虚线框代表一个单分支,22,双分支程序设计例:内部RAM的40H单元和50H单元各存放了一个8位无符号数,请比较这两个数的大小,比较结果用发光二极管显示(LED为低有效):若(40H)(50H),则P1.0管脚连接的LED1发光;若(40H)(50H),则P1.1管脚连接的LED2发光。,23,题意分析:本例是典型的分支程序,根据两个无符号数的比较结果(判断条件),分别点亮相应的发光二极管。比较两个无符号数常用的方法是将两个数相减,然后判断有否借位CY。若CY=0,无借位,则XY;若CY=1,有借位,则XY。程序的流程图如下图

11、所示。,24,两数比较流程图,25,源程序如下:X DATA 40H;数据地址赋值伪指令DATA Y DATA 50H ORG1000H MOV A,X;(X)A CLRC;CY=0 SUBBA,Y;带借位减法,A-(Y)-CYA,26,JC L1;CY=1,转移到L1 CLRP1.0;CY=0,(40H)(50H),点亮P1.0 连 接的LED1 SJMP FIN;直接跳转到结束等待 L1:CLR P1.1;(40H)(50H),点亮P1.1接的LED2 FIN:SJMP$END,27,多分支程序举例,例:在某单片机系统中,按下一按键,键值(代表哪个键被按下)存放在内部RAM的40H单元内。

12、设计一段程序实现功能:如果(40H)=00H,调用子程序SUB1;如果(40H)=01H,调用子程序SUB2;如果(40H)=02H,调用子程序SUB3;如果(40H)=03H,调用子程序SUB4;如果(40H)=04H,调用子程序SUB5。,28,流程图,29,程序清单,MOV 40H,A MOV DPTR,#TAB RL A ADD A,40H JMP A+DPTR TAB:LCALL SUB1 LCALL SUB2 LCALL SUB3 LCALL SUB4 LCALL SUB5,设定表格首地址,40H3 传送给A,查表转移,转移地址表,30,循环程序设计,循环程序设计,循环程序的特点是

13、程序中含有可以重复执行的程序段,该程序段通常称为循环体。例如,求100个数的累加和是没有必要连续安排100条加法指令的,可以只用一条加法指令并使之循环执行100次。循环程序设计不仅可以大大缩短所编程序长度和使程序所占存储单元数最少,也能使程序结构紧凑和可读性变好。应注意循环程序设计并不能缩短完成任务的程序执行时间。,循环程序的组成(四部分):.循环初始化 循环初始化程序段位于循环程序开头,用于完成循环前的准备工作,例如:循环体中循环计数器和各工作寄存器设置初值,其中循环计数器用于控制循环次数。,.循环处理 这部分程序位于循环体内,是循环程序的工作程序,需要重复执行。要求编写得尽可能简练,提高程

14、序执行速度。,31,.循环控制 循环控制程序也在循环体内,常常由修改循环计数器内容的语句和条件转移语句等组成,用于控制循环执行次数。,.循环结束 这部分程序用于存放执行循环程序所得结果以及恢复各工作单元循环前的初值。,循环程序通常有两种编制方法:一种是先循环处理后循环控制(即先处理后判断),如图4-3(a)所示;另一种是先循环控制后循环处理(即先判断后处理),如图4-3(b)所示。,32,(a)先处理后判断(b)先判断后处理 循环程序结构类型,33,例1:设计一段程序实现功能:统计(A)中1的个数,把结果存入30H单元中。,循环程序举例,解题思路:要统计1的个数,可以利用RLC指令把A带上Cy

15、循环左移,如果移入Cy的是1,就让(30H)加1,重复8次,可以统计出结果。,MOV 30H,#00H MOV R2,#08H LOOP:RLC A JNC NEXT INC 30H NEXT:DJNZ R2,LOOP,30H赋初始值,置循环次数,移位,判断Cy是否为1,为1则30H自加1,判断是否结束,34,例:将内部RAM单元中20H单元到2FH单元的数传到外部RAM中的2000H到200FH单元中.,R2 10H,R0 20HDPTR 2000H,N,A R0 DPTR AR0(R0)+1DPTR(DPTR)+1,(R2)-1=0?,END,Y,流程图:,35,源程序:ORG 1000H

16、 MOV R0,#20H MOV DPTR,#2000H MOV R2,#10HLOOP:MOV A,R0 MOVX DPTR,A INC R0 INC DPTR DJNZ R2,LOOP SJMP$END,设置进行数据传送的内部和外部RAM的首地址,利用ACC进行数据传送,设定循环次数,RAM地址加“1”,循环次数判定,36,查表程序设计,查表是根据存放在ROM中数据表格的项数来查找和它对应的表中值。方法简便,可缩短程序长度和提高程序执行效率。,注意:MOVC A,A+DPTR指令可以实现64K地址范围内的数据查寻,而MOVC A,A+PC指令只能实现256字节范围内的数据查寻。,例 已知B

17、LOCK1为起始地址的数据块(数据块长度在LEN单元),数块中每个存储单元中的高、低4位分别为两个十六进制数,请编程把它们转换为相应ASCII码,并存放在BLOCK2开始的连续存储单元(低4位ASCII码在前,高4位ASCII码在后)。,37,解:由于每个存储单元中放有两个十六进制数,因此每个存储单元中十六进制数应分别转换成ASCII码。这就需要两次使用查表指令MOVC A,A+PC,这两条查表指令在程序中位置是不相同的,故两次对PC调整的值也不相同。在编程时,可以先把整个程序编完,然后再计算两条加法指令中的data修正值并填入相应位置。,相应参考程序为:ORG 1000H LEN DATA

18、30H BLOCK1 DATA 31H BLOCK2 DATA 51H MOV R0,#BLOCK1;BLOCK1送R0 MOV R1,#BLOCK2;BLOCK2送R1 LOOP:MOV A,R0;取源数据块中数 ANL A,#0FH;取出低4位,38,ADD A,#17;第一次地址调整 MOVC A,A+PC;第一次查表 MOV R1,A;存第一次转换结果 MOV A,R0;重新取出被转换数 SWAP A;高4位调入低4位 ANL A,#0FH;取出低4位 ADD A,#09;第二次地址调整 MOVC A,A+PC;第二次查表 INC R1;修改目的数据块指针 MOV R1,A;存第二次转

19、换结果 INC R0;修改源数据块指针 INC R1;修改目的数据块指针 DJNZ LEN,LOOP;若未转换完,则转LOOP SJMP$ASCTAB:DB 0,1,2,3,4 DB 5,6,7,8,9 DB A,B,C,D,E,F END,39,子程序设计,40,在实际问题中,常常会遇到在一个程序中多次用到相同的运算或操作,若每遇到这些运算或操作,都从头编起,将使程序繁琐、浪费内存。因此在实际中,经常把这种多次使用的程序段,按一定结构编好,存放在存储器中,当需要时,可以调用这些独立的程序段。,子程序设计,41,子程序设计,子程序是指完成确定任务并能为其他程序反复调用的程序段。调用子程序的程序

20、叫做主程序或称调用程序。只要在主程序中安排程序的主要线索,在需要调用某个子程序时采用LCALL或ACALL调用指令,便可从主程序转入相应子程序执行,CPU执行到子程序末尾的RET返回指令,即可从子程序返回主程序断点处执行。在工程上,几乎所有实用程序都是由许多子程序构成的。子程序可以构成子程序库,集中存放在某一存储空间,任凭主程序随时调用。采用子程序设计能使整个程序结构简单,缩短程序设计时间,减少对存储空间的占用。,42,例如:如果某一实用程序需要10次调用某一子程序,那么只要在主程序的相应地安排10条调用指令就可以避免把同一子程序编写10遍,内存空间几乎可以减少9倍子程序的长度。主程序和子程序

21、是相对的,没有主程序也不会有子程序。同一程序既可以作为另一程序的子程序,也可以有自己的子程序。即子程序是允许嵌套的,嵌套深度和堆栈区的大小有关。总之,子程序是一种能完成某一专用任务的程序段,其资源需要为所有调用程序共享,因此,子程序在结构上应具有通用性和独立性,在编写子程序时应注意以下问题。,43,主程序与子程序的关系,子程序SUB,主程序MAIN,LCALL SUB,调用子程序,子程序入口地址,RET,44,ORG1000H MAIN:MOVA,#0FEH;送显示初值 LP:MOVR0,#10;送闪烁次数 LP0:MOVP1,A;点亮LEDLCALLDELAY;延时MOVP1,#0FFH;熄

22、灭灯LCALLDELAY;延时DJNZR0,LP0 RLA SJMPLP END,实例:LED灯的闪烁点亮(一),45,子程序嵌套,子程序嵌套(或称多重转子)是指在子程序执行过程中,还可以调用另一个子程序。,子程序SUB1,主程序MAIN,LCALL SUB1,RET,子程序SUB2,RET,LCALL SUB2,46,子程序嵌套范例:LED灯闪烁(二),ORG 1000H MAIN:MOV A,#0FEH;送显示初值 COUN:ACALL FLASH;调闪烁子程序 RL A;A左移,下一个灯闪烁 SJMP COUN;循环不止 FLASH:MOV R0,#10;送闪烁次数FLASH1:MOV

23、P1,A;点亮LED LCALL DELAY;延时 MOV P1,#0FFH;熄灭灯 LCALL DELAY;延时 DJNZ R0,FLASH1;闪烁次数不够10次,继续 RET DELAY:MOV R3,#0FFH;延时子程序 DEL2:MOV R4,#0FFH DEL1:NOP DJNZ R4,DEL1 DJNZ R3,DEL2 RET END,47,子程序的调用与返回,问题:子程序调用、返回到主程序中的正确位置,并接著执行主程序中的后续指令呢?为了解决这个问题,我们采用了堆栈技术。,子程序SUB1,主程序MAIN,RET,子程序SUB2,RET,2010,2013,2110,2113,2

24、100,2200,20 13,20,13,PC,21 13,13,21,堆栈指针SP,堆栈,LCALL SUB1,LCALL SUB2,21,13,20,13,48,子程序的参数传递 范例:计算平方和c=a2+b2 ORG1000H;主程序MOVSP,#3FH;设置栈底MOVA,31H;取数a存放到累加器A中作为入口参数LCALL SQR;计算a2MOVR1,A;出口参数平方值存放在A中MOVA,32H;取数b存放到累加器A中作为出口参数LCALL SQR;计算b2ADDA,R1;求和MOV33H,A;存放结果SJMP$,49,;子程序:SQR;功能:通过查表求出平方值y=x2;入口参数:x存

25、放在累加器A中;出口参数:求得的平方值y存放在A中;占用资源:累加器A,数据指针DPTRSQR:PUSH DPH;保护现场,将主程序中DPTR的高八位放入堆栈 PUSH DPL;保护现场,将主程序中DPTR的低八位放入堆栈 MOV DPTR,#TABLE;在子程序中重新使用DPTR,表首地址DPTR MOVC A,A+DPTR;查表 POP DPL;恢复现场,将主程序中DPTR的低八位从堆栈中弹出 POP DPH;恢复现场,将主程序中DPTR的高八位从堆栈中弹出 RETTABLE:DB 0,1,4,9,16,25,36,49,64,81,50,使用注意事项:1)子程序的第一条指令地址称为子程序

26、的始地址或入口地址。该指令前必须有标号,标号应以子程序任务定名,以便一看就一目了然。例如:延时程序常以DELAY作为标号。2)主程序调用子程序是通过安排在主程序中的调用指令实现的,子程序返回主程序一般执行安排在子程序末尾的一条RET返回指令。3)主程序调用子程序和从子程序返回主程序,计算机能自动保护和恢复主程序的断点地址。但对于各工作寄存器、特殊功能寄存器和内存单元中内容,如果需要保护和恢复,就必须在子程序开头和末尾(RET指令前)安排一些能够保护和恢复它们的指令。,51,使用注意事项,4)为使所编子程序可以放在64KB内存的任何区域并能为主程序调用,子程序内部一般使用相对转移指令而不使用其他

27、转移指令,以便汇编时生成浮动代码。5)子程序参数可以分为入口和出口参数两类:入口参数是指子程序需要的原始数,由调用它的主程序通过约定的工作寄存器R0R7、特殊功能寄存器SFR、内存单元或堆栈等预先传送给子程序使用:出口参数是由子程序根据入口参数执行程序后获得的结果参数,应由子程序通过约定的R0R7、SFR、内存单元或堆栈等传递给主程序使用。,52,传送子程序参数的方法通常有以下几种:1)利用寄存器或片内RAM传送子程序参数 对于某些简单子程序、入口参数和出口参数通常较少。常可采用本传送参数的方式。例如:CPU可以预先在主程序中把乘数和被乘数送入R0 R7,转入乘法子程序执行后得到的乘积也可通过

28、R0R7传送给主程序。2)利用寄存器传送子程序参数的地址 如果上述方法不太方便,CPU也可在主程序中把子程序入口参数地址通过R0R7传送给子程序,子程序根据R0R7中入口参数地址便可找到入口参数并对它们进行相应的操作,操作得到的出口参数也可把它们的地址通过寄存器R0R7传送给主程序。,53,3)利用堆栈传送子程序参数任何符合先进后出或后进先出原则的片内RAM区都可称为堆栈。堆栈中数据的存取是由堆栈指针SP指示的。因此,堆栈也可用来传送子程序参数。例如:CPU可以通过主程序中的PUSH指令把入口参数压入堆栈传送给子程序,子程序的出口参数也可通过堆栈传送给主程序。4)利用位地址传送子程序参数如果子

29、程序的入口参数是字节中的某些位,那么利用本方法传送入口和出口参数也有方便之处,传送参数过程和上述诸方法类似。子程序参数的上述传递方法也适用于中断服务程序的编制。,54,单片机常见汇编语言程序设计举例:数制转换程序算术和逻辑运算类程序设计定时程序,常见汇编语言程序设计,55,1、数制转换,例1:将20H单元的两个压缩BCD码拆开变成ASCII码,存入21H、22H单元。(假设20H中的BCD码为00110100),什么是BCD码?什么是ASCII码?,0011,压缩BCD码,0011,0011,0100,低四位ASCII码,高四位ASCII码,56,方法1:将BCD码除以10H,恰好是将BCD码

30、分别移到了A、B的低4位。然后再各自与30H相或,即成为ASCII码。,方法2:利用半字节交换指令来实现。,57,ORG 1000HMOV A,20HMOV B,#10HDIV ABORL B,#30HMOV 22H,BORL A,#30HMOV 21H,ASJMP$END,数制转换程序1-方法1,源程序如下:,0011,0100,PC,PC,0011 0100,0001 0000,PC,0011,0000,0000 0100,PC,0011 0100,PC,PC,PC,0011,PC,58,ORG 1000H MOV R0,#20H MOV A,#30H XCHD A,R0 MOV 21H,

31、A MOV A,R0 SWAP A ANL A,#0FH ORL A,#30H MOV 22H,A SJMP$END,简单程序例1-方法2,PC,PC,PC,PC,PC,PC,PC,PC,源程序如下:,0011,0010 0000,0011,0100,0000,0100,0011,0100,0011,0000,0011,0000,0011,PC,0011,PC,59,BCD码十进制转换成二进制例:假如在内部RAM 40H单元中存储有一个压缩BCD编码的两位十进制数,设计一段程序把这个数转换成二进制数并存入41H单元中。,60,程序清单,ORG1000HMOVA,40HMOVB,#16DIV A

32、BMOV20H,BMOV B,#10HMULABADDA,20HMOV41H,ASJMP$END,取出40H数据除以16,商A,余B,将十位数的二进制数加上个位数,结果41H,将十位数乘以10H,其结果不会超过一个字节,在A中,61,算术和逻辑运算类程序设计,多字节BCD码十进制数相加例:假如在MCS-51单片机内部RAM中30H37H单元、38H3FH单元分别存放有两个8字节BCD码十进制数,设计一段程序将这两个数相加,并把结果存于2FH37H单元中,小地址存数据的高字节。解题思路:先清Cy位,把(37H)和(3FH)进行带Cy相加,在进行十进制调整,结果存于37H单元中;把(36H)和(3

33、EH)进行带Cy相加,在进行十进制调整循环至结束,结果把最高字节的Cy存入2FH单元。,62,极值查找程序例:在MCS-51单片机内部RAM的40H-47H单元中存有8个无符号数,设计一段程序找出其中的最大值,并存放到48H单元中。这是一个求最大值的问题。解题思路:先把(A)(40H),然后将(41H)和(A)进行比较,如果(41H)(A),则(A)(41H),然后和下一个字节进行比较,依次类推,最后(A)必定是最大值。,63,ORG1000H MOVR2,#07H MOVR0,#40H MOVA,R0LOOP:INCR0 MOVB,R0 CJNE A,B,NEXNEX:JNCNET MOVA

34、,BNET:DJNZR2,LOOP MOV 48H,A SJMP$END,设定循环次数R1,R0作为数据指针,指向数据区第一个字节,取出下一个字节,存入B,如果(A)(B),则(A)(B),次数到否,到则取出(A)48H,64,例:将片内RAM中20H-27H中的数据按照从小到大的顺序重新排列。解题思路:见下图,数据排序程序,65,程序流程:,66,程序清单:ORG 1000HMAIN:MOV R1,#20H MOV R3,#08HLOOP1:MOV A,R1;R0(R1)+1 INC A MOV R0,A MOV A,R3;R2(R3)-1 DEC A MOV R2,A MOV B,R1 L

35、OOP:MOV A,R0 CJNE A,B,MM MM:JNC SS;如果AB跳转 MOV B,A MOV 28H,R0;28h纪录最小值所在单元的编号 SS:INC R0 DJNZ R2,LOOP MOV R0,28H;最小值单元和20H单元内容互换 MOV A,R1;数据 MOV R0,A MOV R1,B INC R1 DJNZ R3,LOOP1 END,67,3.定时程序,单重循环延时例1:假设单片机的fosc=12MHz,计算单片机执行下面程序消耗的时间。DELAY:MOV R5,#TIME;1机器周期 MM:NOP;1机器周期 DJNZ R5,MM;2机器周期 RET;2机器周期执

36、行完以上4条语句,所花时间:T=(1+(1+2)TIME)+2 1s推广计算式:T(机器周期数)=(循环体机器周期数)循环次数+初始化机器周期数,68,多重循环延时例1:假设单片机的fosc=12MHz,计算单片机执行下面程序消耗的时间。DELAY2:MOV R3,#TIME1;1机器周期 LOOP1:MOV R2,#TIME2;1机器周期 LOOP2:NOP;1机器周期 DJNZ R2,LOOP2;2机器周期 DJNZ R3,LOOP1;2机器周期 RET;2机器周期 执行完以上6条语句,所花时间:T=(1+(1+(1+2)TIME2+2)TIME1+2)1s,69,本章小结,本章要求:掌握MCS-51单片机汇编语言程序的基本格式及伪指令;掌握程序的基本结构(顺序结构、分支结构、循环结构)和程序设计的基本方法;掌握子程序的设计方法及其参数传递方法;了解数制转换、算术运算、极值查找等典型程序的设计。,70,The End,

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 建筑/施工/环境 > 项目建议


备案号:宁ICP备20000045号-2

经营许可证:宁B2-20210002

宁公网安备 64010402000987号