资源描述
单片机原理与片机原理与应用用Principle&Application of MCU第第4 4章章 80C5180C51单片机汇编语言程序设计单片机汇编语言程序设计1教学内容及要求教学内容及要求n n教学内容教学内容教学内容教学内容n n汇编语汇编语言程序的基本言程序的基本言程序的基本言程序的基本结结构形式、子程序构形式、子程序构形式、子程序构形式、子程序结结构形式构形式构形式构形式n n80C5180C51单单片机片机片机片机汇编语汇编语言言言言伪伪指令指令指令指令n n80C5180C51单单片机片机片机片机汇编语汇编语言程序言程序言程序言程序设计举设计举例例例例n n教学要求教学要求教学要求教学要求n n掌握掌握掌握掌握顺顺序序序序结结构程序、分支程序、循构程序、分支程序、循构程序、分支程序、循构程序、分支程序、循环环程序和子程序等程序和子程序等程序和子程序等程序和子程序等结结构程序的构程序的构程序的构程序的设计设计等等等等n n熟悉熟悉熟悉熟悉单单片机片机片机片机汇编汇编程序常用的程序常用的程序常用的程序常用的伪伪指令指令指令指令n n了解了解了解了解汇编语汇编语言程序的格式言程序的格式言程序的格式言程序的格式2 2汇编语言源程序的言源程序的编辑和和汇编3 3机器机器编辑交叉交叉汇编串行串行传送送4 4地址地址地址地址机器码机器码机器码机器码标号标号标号标号助记符指令助记符指令助记符指令助记符指令80008000800080007820782078207820SORT:SORT:SORT:SORT:MOV R0,#20HMOV R0,#20HMOV R0,#20HMOV R0,#20H80028002800280027F077F077F077F07MOV R7,#07HMOV R7,#07HMOV R7,#07HMOV R7,#07H*.ASM*.ASM编辑、汇编n n编辑编辑:n n编编写写写写程序的程序的程序的程序的过过程称程称程称程称为编辑为编辑。n n机器机器机器机器编辑编辑指借助于指借助于指借助于指借助于微型机微型机微型机微型机进进行行行行单单片机的程序片机的程序片机的程序片机的程序设计设计,通常都是使用,通常都是使用,通常都是使用,通常都是使用编编辑软辑软件件件件进进行源程序的行源程序的行源程序的行源程序的编辑编辑。n n编辑编辑完成后,生成一个由完成后,生成一个由完成后,生成一个由完成后,生成一个由汇编汇编指令和指令和指令和指令和伪伪指令构成的指令构成的指令构成的指令构成的扩扩展名展名展名展名为为”.ASM.ASM”的的的的ASCIIASCII码码文件。文件。文件。文件。n n汇编汇编:n n汇编语汇编语言源程序言源程序言源程序言源程序不能在不能在不能在不能在单单片机中直接片机中直接片机中直接片机中直接执执行,必行,必行,必行,必须须将其将其将其将其“翻翻翻翻译译”为为用二用二用二用二进进制代制代制代制代码码(机器(机器(机器(机器语语言)表示的言)表示的言)表示的言)表示的目目目目标标程序程序程序程序才能才能才能才能执执行。行。行。行。这这个个个个“翻翻翻翻译译”过过程称程称程称程称为汇编为汇编。n n机器机器机器机器汇编汇编指由指由指由指由计计算机算机算机算机通通通通过过汇编汇编程序程序程序程序完成从完成从完成从完成从汇编语汇编语言源程序言源程序言源程序言源程序到到到到机器机器机器机器语语言目言目言目言目标标程序程序程序程序的的的的“翻翻翻翻译译”工作。工作。工作。工作。n n交叉交叉交叉交叉汇编汇编指使用指使用指使用指使用一种一种一种一种计计算机算机算机算机(PC)(PC)的的的的汇编汇编程序程序程序程序为为另一种另一种另一种另一种计计算机算机算机算机(单单片片片片机机机机)的源程序的源程序的源程序的源程序进进行行行行汇编汇编n n即运行即运行即运行即运行汇编汇编程序程序程序程序进进行行行行汇编汇编的是一种的是一种的是一种的是一种计计算机,而算机,而算机,而算机,而汇编汇编得到的目得到的目得到的目得到的目标标程序是程序是程序是程序是另一种另一种另一种另一种计计算机用的。算机用的。算机用的。算机用的。5 580C51单片机片机汇编语言言伪指令指令n n汇编时汇编时,源程序,源程序,源程序,源程序须须向向向向汇编汇编程序程序程序程序发发出一些指示信息,出一些指示信息,出一些指示信息,出一些指示信息,协协助完成助完成助完成助完成汇编汇编工作,工作,工作,工作,这这一工作是由一工作是由一工作是由一工作是由伪伪指令来完成的。指令来完成的。指令来完成的。指令来完成的。n n汇编汇编起始地址命令起始地址命令起始地址命令起始地址命令ORG(Origin)ORG(Origin)n n定定定定义义字字字字节节命令命令命令命令DB(Define Byte)DB(Define Byte)n n定定定定义义数据字命令数据字命令数据字命令数据字命令DW(Define Word)DW(Define Word)n n预预留存留存留存留存储储区命令区命令区命令区命令DS(Define Storage)DS(Define Storage)n n位定位定位定位定义义命令命令命令命令BITBITn n赋值赋值命令命令命令命令EQU(Equate)EQU(Equate)n n数据地址数据地址数据地址数据地址赋值伪赋值伪指令指令指令指令DATADATAn n汇编终汇编终止命令止命令止命令止命令END(End of assembly)END(End of assembly)n n注注注注意意意意!伪伪指指指指令令令令仅仅供供供供汇汇编编程程程程序序序序将将将将源源源源程程程程序序序序翻翻翻翻译译成成成成目目目目标标程程程程序序序序,本本本本身身身身并并并并不形成机器不形成机器不形成机器不形成机器码码。6 6汇编起始地址命令起始地址命令ORG(Origin)n n规规定程序或数据的起始存放地址。定程序或数据的起始存放地址。定程序或数据的起始存放地址。定程序或数据的起始存放地址。n n出出出出现现在每段源程序或数据在每段源程序或数据在每段源程序或数据在每段源程序或数据块块的开始的开始的开始的开始n n 项项是是是是1616位位位位绝对绝对地址地址地址地址,或者,或者,或者,或者标标号,或者表达式。号,或者表达式。号,或者表达式。号,或者表达式。n n在一个在一个在一个在一个汇编语汇编语言源程序中允言源程序中允言源程序中允言源程序中允许许使用多条定位使用多条定位使用多条定位使用多条定位伪伪指令,但其指令,但其指令,但其指令,但其值应值应从小到大,并与前面的从小到大,并与前面的从小到大,并与前面的从小到大,并与前面的存放地址不重叠存放地址不重叠存放地址不重叠存放地址不重叠。n n如果程序的开始不放如果程序的开始不放如果程序的开始不放如果程序的开始不放ORGORG,则汇编则汇编程序将从程序将从程序将从程序将从0000H0000H单单元元元元开开开开始放目始放目始放目始放目标标程序代程序代程序代程序代码码。ORG ORG ORG ORG 7 7ORG 0000HORG 0000HORG 0000HORG 0000H;从从从从0000H0000H0000H0000H单元开始存放下面的指令单元开始存放下面的指令单元开始存放下面的指令单元开始存放下面的指令LJMP 0030HLJMP 0030HLJMP 0030HLJMP 0030HORG 0030HORG 0030HORG 0030HORG 0030H;从从从从0030H0030H0030H0030H单元开始存放下面的指令单元开始存放下面的指令单元开始存放下面的指令单元开始存放下面的指令MAIN:MAIN:MAIN:MAIN:MOV SP,#50HMOV SP,#50HMOV SP,#50HMOV SP,#50HORG 0040HORG 0040HORG 0040HORG 0040H;从从从从0040H0040H0040H0040H单元开始存放下面的数据单元开始存放下面的数据单元开始存放下面的数据单元开始存放下面的数据TABTABTABTAB:DB 23,89DB 23,89DB 23,89DB 23,89定定义字字节命令命令DB(Define Byte)n n在程序存在程序存储器中器中定定义字字节数据数据。n nXnXn可可可可以以以以是是是是一一一一字字字字节节常常常常数数数数;用用用用双双双双引引引引号号号号或或或或者者者者单单引引引引号号号号括括括括起起起起来来来来的的的的字符或字符串;各个数之字符或字符串;各个数之字符或字符串;各个数之字符或字符串;各个数之间间用逗号隔开。用逗号隔开。用逗号隔开。用逗号隔开。DBDBDBDBX1,X2,X1,X2,X1,X2,Xn,Xn,Xn8 8ORG 1000HORG 1000HA1:DB 01001010B,23A1:DB 01001010B,23o o,23,78H,23,78H,A2:DB A2:DB 5 5,”12AB12AB”,12D,-2,12D,-2(1000H)=01001010B=4AH,(1000H)=01001010B=4AH,(1001H)=23(1001H)=23o o=13H=13H,(1002H)=23=17H,(1002H)=23=17H,(1003H)=78H,(1003H)=78H,(1004H)=35H(5(1004H)=35H(5的的ASCIIASCII码码),),(1005H)=31H(1(1005H)=31H(1的的ASCIIASCII码)码),(1006H)=32H(2(1006H)=32H(2的的ASCIIASCII码码),),(1007H)=41H(A(1007H)=41H(A的的ASCIIASCII码)码),(1008H)=42H(B(1008H)=42H(B的的ASCIIASCII码码),),(1009H)=12D=0CH(1009H)=12D=0CH(100AH)=-2=0FEH(100AH)=-2=0FEH【例例例例】定定义数据字命令数据字命令DW(DefineWord)n n在程序存在程序存储器中器中定定义16位的数据字位的数据字。n n存存存存放放放放时时,数数数数据据据据字字字字的的的的高高高高8 8位位位位在在在在低低低低地地地地址址址址,低低低低8 8位位位位在在在在后后后后高地址。高地址。高地址。高地址。n n通常,通常,通常,通常,DBDB用来定用来定用来定用来定义义数据,数据,数据,数据,DWDW用来定用来定用来定用来定义义地址地址地址地址。DWDWY1,Y2,YnDW DW DW DW“AAAAAAAA”;存入存入存入存入41H41H41H41H,41H41H41H41HDW DW DW DW“A A A A”;存入存入存入存入00H00H00H00H,41H41H41H41HDW DW DW DW“ABCABCABCABC”;不合法,因为超过了两个字节不合法,因为超过了两个字节不合法,因为超过了两个字节不合法,因为超过了两个字节DW 100H,1ACH,-804DW 100H,1ACH,-804DW 100H,1ACH,-804DW 100H,1ACH,-804;按顺序存入按顺序存入按顺序存入按顺序存入01H01H01H01H、00H00H00H00H、01H01H01H01H、0ACH0ACH0ACH0ACH、0FCH0FCH0FCH0FCH、0DCH0DCH0DCH0DCH9 9【例例例例】预留存留存储区命令区命令DS(Define Storage)n n在程序存在程序存储器中保留指定数目的器中保留指定数目的单元作元作为预留存留存储区区,供程序运行使用。,供程序运行使用。【例例】ADDRTAB:DS 20ADDRTAB:DS 20;从标号从标号ADDRTABADDRTAB代表的地址开始,预留代表的地址开始,预留2020个个;连续的地址单元。连续的地址单元。DS DS DBDB、DWDW、DSDS只能对于程序存储器使用只能对于程序存储器使用1010位定位定义命令命令BITn n把位地址把位地址赋给字符名称。字符名称。【例例例例】:AQ BIT P1.0AQ BIT P1.0AQ BIT P1.0AQ BIT P1.0;把把把把P1.0P1.0P1.0P1.0的位地址赋给字符名的位地址赋给字符名的位地址赋给字符名的位地址赋给字符名AQAQAQAQ,在其后,在其后,在其后,在其后;的编程中的编程中的编程中的编程中AQAQAQAQ可以作为位地址使用。可以作为位地址使用。可以作为位地址使用。可以作为位地址使用。BIT BIT 1111赋值命令命令EQU(Equate)n n给数或符号数或符号赋给字符字符n n 可以是常数、地址、可以是常数、地址、可以是常数、地址、可以是常数、地址、标标号或表达式。号或表达式。号或表达式。号或表达式。n n赋赋值值以以以以后后后后的的的的字字字字符符符符既既既既可可可可以以以以作作作作地地地地址址址址使使使使用用用用,也也也也可可可可以以以以作作作作立即数使用。立即数使用。立即数使用。立即数使用。【例例】CS EQU 0FFFFHCS EQU 0FFFFHA1 EQU R1A1 EQU R1A2 EQU 10H A2 EQU 10H DELAY EQU 0708HDELAY EQU 0708HA1A1A1A1可作为寄存器可作为寄存器可作为寄存器可作为寄存器R1R1R1R1来使用,来使用,来使用,来使用,A2A2A2A2可作为可作为可作为可作为8 8 8 8位直接地址或立即数使用,位直接地址或立即数使用,位直接地址或立即数使用,位直接地址或立即数使用,DELAYDELAYDELAYDELAY可作为可作为可作为可作为16161616位地址或者立即数使用。位地址或者立即数使用。位地址或者立即数使用。位地址或者立即数使用。字符名字符名字符名字符名 EQU EQU EQU EQU 数或汇编符号数或汇编符号数或汇编符号数或汇编符号1212数据地址数据地址赋值伪指令指令DATAn n将表达式的将表达式的值赋给字符。字符。n表达式可以是一个数据或地址,也可以是一个表达式可以是一个数据或地址,也可以是一个包含所定包含所定义字符名在内的表达式,但不能是一字符名在内的表达式,但不能是一个个汇编符号(如符号(如R0R7)。)。n与与EQU的区的区别:nEQU必必须先定先定义后使用。后使用。nDATA无此限制,所以无此限制,所以DATA伪指令可以放在源程序指令可以放在源程序的开的开头或末尾或末尾MOV R0,ADDRESSMOV R0,ADDRESSMOV R1,#ADDRESSMOV R1,#ADDRESSADDRESS DATA 31HADDRESS DATA 31H将将31H31H单元内容送单元内容送R0,(R1)=31HR0,(R1)=31H。字符名字符名字符名字符名 DATA DATA 表达式表达式表达式表达式1313汇编终止命令止命令END(End of assembly)n n用用于于终止止源源程程序序的的汇编工工作作,在在一一个个源源程程序序中中只只能能有有一一条条END命命令令,并并且且位位于于程程序序的最后的最后。n n如如果果END命命令令出出现在在程程序序中中间,则其其后后面面的源程序将不予的源程序将不予处理。理。1414一般一般汇编调试工具要求的工具要求的汇编格式格式n n一般用一般用一般用一般用汇编语汇编语言言言言编编写的程序,要求指出写的程序,要求指出写的程序,要求指出写的程序,要求指出该该程序存程序存程序存程序存放于放于放于放于内存地址的位置内存地址的位置内存地址的位置内存地址的位置,并且将用到的数据和需要,并且将用到的数据和需要,并且将用到的数据和需要,并且将用到的数据和需要预预留存放数据的空留存放数据的空留存放数据的空留存放数据的空间间用用用用伪伪指令定指令定指令定指令定义义好好好好n n然后然后然后然后编编写程序代写程序代写程序代写程序代码码n n最后用最后用最后用最后用原地踏步或返回起始位置循原地踏步或返回起始位置循原地踏步或返回起始位置循原地踏步或返回起始位置循环环作作作作为结为结束。束。束。束。ORGORGSJMP$SJMP$ENDEND【例例】程序格式如下:程序格式如下:1515汇编语言程序的基本言程序的基本结构形式构形式1616分支分支结构构n n使用条件使用条件转移指令移指令对程序的程序的执行行结果果进行判断行判断n nJZJZ、JNZJNZ、CJNECJNE、DJNZDJNZn nJCJC、JNCJNC、JBJB、JNBJNB、JBCJBC1717【例例例例】二分支。在外部二分支。在外部二分支。在外部二分支。在外部RAMRAM中有中有中有中有ST1ST1、ST2ST2和和和和ST3ST3共共共共3 3个个个个连续单连续单元,其中元,其中元,其中元,其中ST1ST1和和和和ST2ST2单单元中存放着两个元中存放着两个元中存放着两个元中存放着两个无符号二无符号二无符号二无符号二进进制数,要求找出其中的大数并存入制数,要求找出其中的大数并存入制数,要求找出其中的大数并存入制数,要求找出其中的大数并存入ST3ST3单单元中。元中。元中。元中。1818【例例】三分支三分支-多次二多次二选一。一。设变量量x存入存入30H单元,求得函数元,求得函数y存入存入31H单元。按下式元。按下式要求要求给y赋值:x-1(x5)0(5x 10)x+1(x10)Y=要根据要根据x的大小来决定的大小来决定y值,在判断值,在判断x5和和y10时,采用时,采用CJNE和和JC以及以及CJNE和和JNC指令进行判断。指令进行判断。1919ORG 1000HMOV A,30H;取取xCJNE A,#5,NEXT1;与与5比较比较NEXT1:JC NEXT3;x5,则转,则转NEXT3CJNE A,#10,NEXT2;与与10比较比较NEXT2:JNC NEXT4;x10,则转,则转NEXT4MOV R0,#0;5x 10,y=0SJMP NEXT5NEXT3:MOV R0,ADEC R0;x5,y=x-1SJMP NEXT5NEXT4:MOV R0,AINC R0;x10,y=x+1NEXT5:MOV 31H,R0;存结果存结果SJMP$END2020多分支多分支转移移n n使用使用变址址寻址址转移指令移指令(散散转指令指令)n nJMP A+DPTR ;PC(A)+(DPTR)JMP A+DPTR ;PC(A)+(DPTR)n n数据表、数据表、数据表、数据表、转转移指令表、堆移指令表、堆移指令表、堆移指令表、堆栈栈操作操作操作操作2121通通过数据表数据表实现程序多分支程序多分支2222MOV MOV A,#kA,#k;分支序号分支序号分支序号分支序号k k送送送送A AMOV DPTR,#BRTABMOV DPTR,#BRTAB;表首址表首址表首址表首址MOVC A,A+DPTRMOVC A,A+DPTR;查表后,查表后,查表后,查表后,(A)=BRk-BRTAB(A)=BRk-BRTABJMP A+DPTRJMP A+DPTR;散转指令散转指令散转指令散转指令,(PC)=BRk,(PC)=BRkBRTAB:BRTAB:DB DB BR0-BRTABBR0-BRTAB;数据表数据表数据表数据表,BRTAB+0,BRTAB+0DBDBBR1-BRTABBR1-BRTAB;分支入口地址与表首址之差分支入口地址与表首址之差分支入口地址与表首址之差分支入口地址与表首址之差,BRTAB+1,BRTAB+1DBDBBRn-BRTABBRn-BRTAB;BRTAB+n;BRTAB+nBR0:BR0:;各个分支程序各个分支程序各个分支程序各个分支程序BR1:BR1:BRn:BRn:通通过转移指令表移指令表实现程序多分支程序多分支2323MOV A,#k;分支序号分支序号k送送ARL A;分支序号乘以分支序号乘以2MOV DPTR,#BRTAB;表首址表首址JMP A+DPTR;(PC)=BATAB+2kBRTAB:AJMP BR0;转分支程序转分支程序0,BRTABAJMP BR1;转分支程序转分支程序1,BRTAB+2AJMP BRn;转分支程序转分支程序n,BRTAB+2nBR0:BR0:;各个分支程序各个分支程序各个分支程序各个分支程序BR1:BR1:BRn:BRn:使用使用长转移指令移指令LJMP时,MOV A,#kRL AADD A,R3MOV DPTR,#BRTABJMP A+DPTRBRTAB:LJMP BR0;BRTABLJMP BR1;BRTA+3 LJMP BRn;BRTAB+3n2424通通通通过过堆堆堆堆栈栈操作操作操作操作实现实现程序多分支程序多分支程序多分支程序多分支2525MOV DPTR,#BRTAB;MOV DPTR,#BRTAB;分支程序入口地址表首址分支程序入口地址表首址分支程序入口地址表首址分支程序入口地址表首址MOV MOV A,#kA,#k;分支序号放入分支序号放入分支序号放入分支序号放入A A中中中中RL ARL A;分支序号值乘以分支序号值乘以分支序号值乘以分支序号值乘以2 2MOV R1,AMOV R1,A;暂存暂存暂存暂存A A值入值入值入值入R1R1INC AINC A;A;A指向低位地址指向低位地址指向低位地址指向低位地址MOVC A,A+DPTRMOVC A,A+DPTR;取低位地址取低位地址取低位地址取低位地址BRn 7-0BRn 7-0PUSH ACCPUSH ACC;低位地址入栈低位地址入栈低位地址入栈低位地址入栈MOV A,R1MOV A,R1;恢复恢复恢复恢复A A值值值值MOVC A,A+DPTRMOVC A,A+DPTR;取高位地址取高位地址取高位地址取高位地址BRn 15-8BRn 15-8PUSH ACCPUSH ACC;高位地址入栈高位地址入栈高位地址入栈高位地址入栈RETRET;分支入口地址装入分支入口地址装入分支入口地址装入分支入口地址装入PCPCBRTAB:BRTAB:DW BR0DW BR0;分支程序入口地址表分支程序入口地址表分支程序入口地址表分支程序入口地址表,BRTAB,BRTAB、BRTAB+1BRTAB+1DW BR1DW BR1;BRTAB+2;BRTAB+2、BRTA+3BRTA+3DW BRnDW BRn;BRTAB+2n;BRTAB+2n、BRTAB+2n+1BRTAB+2n+1RETRETPCPC15158 8(SP),SP(SP)-1(SP),SP(SP)-1PCPC7 70 0(SP),SP(SP)-1(SP),SP(SP)-1循循环结构构n n初始化部分初始化部分初始化部分初始化部分n n对对于循于循于循于循环环次数次数次数次数计计数器、地址指数器、地址指数器、地址指数器、地址指针赋针赋初初初初值值,对对于使用到于使用到于使用到于使用到的寄存器或者存的寄存器或者存的寄存器或者存的寄存器或者存储单储单元元元元赋赋初初初初值值,为为循循循循环环作准作准作准作准备备。n n循循循循环环体部分体部分体部分体部分n n为为下一次循下一次循下一次循下一次循环创环创造条件:造条件:造条件:造条件:修改循修改循修改循修改循环环次数次数次数次数计计数器、地址数器、地址数器、地址数器、地址指指指指针针,避免死循,避免死循,避免死循,避免死循环环。n n循循循循环环的判断与控制:判断的判断与控制:判断的判断与控制:判断的判断与控制:判断循循循循环环次数次数次数次数计计数器数器数器数器,或者,或者,或者,或者检查检查判断循判断循判断循判断循环环条件条件条件条件。n n可以直接由循可以直接由循可以直接由循可以直接由循环环体内体内体内体内转转到循到循到循到循环环体外或外体外或外体外或外体外或外层层循循循循环环;不能;不能;不能;不能从循从循从循从循环环体外直接跳体外直接跳体外直接跳体外直接跳转转到循到循到循到循环环体内,只能从外体内,只能从外体内,只能从外体内,只能从外层层向内向内向内向内层层一一一一层层进层层进入入入入。n n循循循循环结环结束束束束处处理:理:理:理:n n结结果保存等。果保存等。果保存等。果保存等。2626【例例】单循循环。编程程实现把外部把外部RAM中从中从8000H开始的开始的100个字个字节数据数据传送到送到8100H开开始的始的单元中。元中。MOV R7,#100MOV R7,#100MOV DPL,#00HMOV DPL,#00HLOOP:LOOP:MOV DPH,#80HMOV DPH,#80HMOVX A,DPTRMOVX A,DPTRMOV DPH,#81HMOV DPH,#81HMOVX DPTR,AMOVX DPTR,AINC DPLINC DPLDJNZ R7,LOOPDJNZ R7,LOOPMOV R0,#00MOV R0,#00LOOP:LOOP:MOV P2,#80HMOV P2,#80HMOVX A,R0MOVX A,R0MOV P2,#81HMOV P2,#81HMOVX R0,AMOVX R0,AINC R0INC R0CJNE R0,#100,LOOPCJNE R0,#100,LOOP或或27272727【例例例例】由循环内部跳出循环。把长度为由循环内部跳出循环。把长度为由循环内部跳出循环。把长度为由循环内部跳出循环。把长度为10H10H10H10H的字符串从内部的字符串从内部的字符串从内部的字符串从内部RAMRAMRAMRAM缓冲缓冲缓冲缓冲区区区区inbufinbufinbufinbuf向位于外部向位于外部向位于外部向位于外部RAMRAMRAMRAM的输出缓冲区的输出缓冲区的输出缓冲区的输出缓冲区outbufoutbufoutbufoutbuf传送,一直进行遇到回传送,一直进行遇到回传送,一直进行遇到回传送,一直进行遇到回车符车符车符车符CRCRCRCR或整个字符串传送完毕。或整个字符串传送完毕。或整个字符串传送完毕。或整个字符串传送完毕。START:START:MOV R7,#10H MOV R7,#10H MOV R0,#inbufMOV R0,#inbufMOV DPTR,#outbufMOV DPTR,#outbufLOOP:LOOP:MOV A,R0MOV A,R0CJNE A,#0D0H,CONTINUECJNE A,#0D0H,CONTINUESJMP FINISHSJMP FINISHCONTINUE:CONTINUE:MOVX DPTR,AMOVX DPTR,AINC R0INC R0INC DPTRINC DPTRDJNZ R7,LOOPDJNZ R7,LOOPFINISH:FINISH:SJMP$SJMP$ENDEND2828子程序子程序n n在主程序中在主程序中调用子程序用子程序n nLCALL/ACALL LCALL/ACALL 标标号号号号;调调用子程序用子程序用子程序用子程序时时,断点入,断点入,断点入,断点入栈栈保存保存保存保存n n由子程序返回主程序由子程序返回主程序n nRET;RET;子程序返回子程序返回子程序返回子程序返回时时,断点出,断点出,断点出,断点出栈栈从而回到主程序。从而回到主程序。从而回到主程序。从而回到主程序。n n子程序中,子程序中,视情况情况进行行现场保保护和和现场恢复恢复n n1 1、使用堆、使用堆、使用堆、使用堆栈栈:PUSH/POPPUSH/POPn n2 2、暂暂存到其它存存到其它存存到其它存存到其它存储单储单元中,最元中,最元中,最元中,最终终恢复即可恢复即可恢复即可恢复即可2929调用延用延时子程序子程序DELAY。n n主程序:主程序:主程序:主程序:n n子程序:子程序:子程序:子程序:n n该该子程序根本子程序根本子程序根本子程序根本不需要主程序提供入口参数不需要主程序提供入口参数不需要主程序提供入口参数不需要主程序提供入口参数,从,从,从,从进进入子程序开入子程序开入子程序开入子程序开始,到子程序返回,始,到子程序返回,始,到子程序返回,始,到子程序返回,这这个个个个过过程花程花程花程花费费CPUCPU一定的一定的一定的一定的时长时长。n n循循循循环环体只能体只能体只能体只能执执行有限次,避免行有限次,避免行有限次,避免行有限次,避免“死循死循死循死循环环”。DELAY:DELAY:DELAY:DELAY:PUSH 06HPUSH 06HPUSH 06HPUSH 06HPUSH 07HPUSH 07HPUSH 07HPUSH 07HMOV R7,#100MOV R7,#100MOV R7,#100MOV R7,#100DLY0:DLY0:DLY0:DLY0:MOV R6,#98MOV R6,#98MOV R6,#98MOV R6,#98NOPNOPNOPNOPDLY1:DLY1:DLY1:DLY1:DJNZ R6,DLY1DJNZ R6,DLY1DJNZ R6,DLY1DJNZ R6,DLY1DJNZ R7,DLY0DJNZ R7,DLY0DJNZ R7,DLY0DJNZ R7,DLY0POP 07HPOP 07HPOP 07HPOP 07HPOP 06HPOP 06HPOP 06HPOP 06HRETRETRETRETLCALL DELAYLCALL DELAYLCALL DELAYLCALL DELAY303080C51单片机汇编语言程序设计举例n n定定时时程序程序n n查查表程序表程序n n求平方求平方n n极极值查值查找程序找程序n n查查找关找关键键字字n n扩扩展展n n阶阶乘乘计计算算n n压缩压缩和解和解压压程序程序n n算算术术运算:加、减、乘、除运算:加、减、乘、除n n数据排序数据排序n n数制与数制与编码转换编码转换程序程序n nLEDLED的的简单简单控制控制n nKEY+LEDKEY+LED的的简单简单控制控制3131单循循环定定时程序程序DELAY:DELAY:MOV R5,#TIMEMOV R5,#TIME;1;1LOOP:LOOP:NOPNOP;1;1NOPNOP;1;1DJNZ R5,LOOPDJNZ R5,LOOP;2;2RETRET;2;21+(1+1+2)*R5+2*1+(1+1+2)*R5+2*1+(1+1+2)*R5+2*1+(1+1+2)*R5+2*机器周期机器周期机器周期机器周期12M12M12M12M 机器周期机器周期机器周期机器周期=1us=1us=1us=1us定时时长为:定时时长为:定时时长为:定时时长为:3232如何调整定时时长?如何调整定时时长?如何调整定时时长?如何调整定时时长?较长时间的定的定时程序程序DELAY:DELAY:MOV R5,#TIME1MOV R5,#TIME1;1;1LOOP2:LOOP2:MOV R4,#TIME2MOV R4,#TIME2;1;1LOOP1:LOOP1:NOPNOP;1;1NOPNOP;1;1DJNZ R4,LOOP1DJNZ R4,LOOP1;2;2DJNZ R5,LOOP2DJNZ R5,LOOP2;2;2RETRET;2;21+1+(1+1+2)*R4+2*R5+2*1+1+(1+1+2)*R4+2*R5+2*1+1+(1+1+2)*R4+2*R5+2*1+1+(1+1+2)*R4+2*R5+2*机器周期机器周期机器周期机器周期3333通通过一个基本延一个基本延时程序程序产生不同的定生不同的定时MOV R0,#05HMOV R0,#05H;5ms;5msLOOP1:LOOP1:LCALL DELAYLCALL DELAY;1ms;1msDJNZ R0,LOOP1DJNZ R0,LOOP1MOV R0,#OAHMOV R0,#OAH;10ms;10msLOOP2:LOOP2:LCAL DELAYLCAL DELAYDJNZ R0,LOOP2DJNZ R0,LOOP2MOV R0,#14HMOV R0,#14H;20ms;20msLOOP3:LOOP3:LCALL DELAYLCALL DELAYDJNZ R0,LOOP3DJNZ R0,LOOP33434查表指令表指令n n按按按按顺顺序序序序读读出存出存出存出存储储器中的数据器中的数据器中的数据器中的数据称称称称为查为查表。先确定好表。先确定好表。先确定好表。先确定好PCPC或或或或DPTRDPTR的内的内的内的内容,然后有容,然后有容,然后有容,然后有规规律地改律地改律地改律地改变变A A的内容,就可以的内容,就可以的内容,就可以的内容,就可以进进行程序存行程序存行程序存行程序存储储器中表格器中表格器中表格器中表格数据的数据的数据的数据的读读出。出。出。出。n nMOVC A,A+DPTR MOVC A,A+DPTR 可在可在可在可在64KB64KB范范范范围围内内内内查查表表表表,长查长查表指令。表指令。表指令。表指令。n nMOVC A,A+PC MOVC A,A+PC 查查距本指令距本指令距本指令距本指令256256个字个字个字个字节节以内的数据,短以内的数据,短以内的数据,短以内的数据,短查查表指令。表指令。表指令。表指令。n nPC=PC=当前当前当前当前查查表指令地址表指令地址表指令地址表指令地址+1+1n n变变址址址址调调整整整整值值,即,即,即,即该该指令指令指令指令执执行后的地址到表格首址之行后的地址到表格首址之行后的地址到表格首址之行后的地址到表格首址之间间的距离的距离的距离的距离n注意:如果数据表存放在外部注意:如果数据表存放在外部ROM中,中,执行行查表指令表指令时,会在,会在控制引脚控制引脚PSEN上上产生一个程序存生一个程序存储器器读信号。信号。3535查表程序表程序n n功能:复功能:复杂计算、非算、非线性性计算、非数算、非数值计算的算的处理。理。n n查表:把事先表:把事先计算或算或测得的数据按得的数据按顺序序编制成表格存放在程序存制成表格存放在程序存储器器ROM中(中(伪指指令令DB或或DW););查表程序根据被表程序根据被测数据,数据,查出表格中出表格中对应的的结果。果。n n优点:点:编程程简单、执行速度快、适合于行速度快、适合于实时控制。控制。3636【例例】分别用两条查表指令编写一段子程序,功能为:根分别用两条查表指令编写一段子程序,功能为:根据累加器据累加器A A中的数(中的数(0 09 9之间)查找平方表,求出相应的之间)查找平方表,求出相应的平方数,放在平方数,放在A A中。中。SQUARE:SQUARE:MOV DPTR,#TABMOV DPTR,#TABMOVC A,A+DPTRMOVC A,A+DPTRRETRETTAB:TAB:DB DB 0,1,4,9,16,25,36,49,64,810,1,4,9,16,25,36,49,64,81SQUARE:SQUARE:ADD A,#1ADD A,#1MOVC A,A+PCMOVC A,A+PCRETRET;1;1TAB:TAB:DB 0,1,4,9,16,25,36,49,64,81DB 0,1,4,9,16,25,36,49,64,81或或或或37373737【例例】子程序。子程序。编程程实现运算式运算式c=a2+b2。假定。假定a、b、c分分别存放在内部存放在内部RAM的的30H、31H、32H单元元中中ORG 0000HORG 0000HSJMP MAINSJMP MAINORG 0030HORG 0030H MAIN:MOV A,30HMAIN:MOV A,30HLCALL SQUARELCALL SQUAREMOV 30H,AMOV 30H,AMOV A,31HMOV A,31HLCALL SQUARELCALL SQUAREADD A,30HADD A,30HMOV 32H,AMOV 32H,ASJMP$SJMP$3838【例例】阶乘乘计算算求求Y=n!(n=0,1,2,9
展开阅读全文