1、连接连接/定位器定位器L51汇编语言汇编语言源程序源程序汇编器汇编器A51符号转换程序符号转换程序OHS51绝对地址绝对地址目标程序目标程序.BINC语言程序语言程序浮浮动动地地址址目目标标程程序序编译器编译器C51 HEX图图 3-1 两种语言源程序转换成目标程序两种语言源程序转换成目标程序 汇编:汇编:将汇编语言源程序转换成机器语言目标程序的过程将汇编语言源程序转换成机器语言目标程序的过程称为汇编。称为汇编。(翻译翻译汇编程序:汇编程序:能将汇编语言源程序转换成机器语言目标程序的系能将汇编语言源程序转换成机器语言目标程序的系统软件称为汇编程序。统软件称为汇编程序。(翻译官翻译官 汇编语言源
2、程序:用户用汇编语言助记符编的应用程序。汇编语言源程序:用户用汇编语言助记符编的应用程序。2.机器汇编机器汇编 用计算机中的汇编程序对用户源程序进行汇编。用计算机中的汇编程序对用户源程序进行汇编。用机器汇编要提供给汇编一些信息,遵循汇编程序的用机器汇编要提供给汇编一些信息,遵循汇编程序的一些约定。这些由伪指令指定。一些约定。这些由伪指令指定。目前很多公司将编辑器、汇编器、编译器、连接目前很多公司将编辑器、汇编器、编译器、连接/定位器、符号转换程序做成集成软件包,用户进入该定位器、符号转换程序做成集成软件包,用户进入该集成环境,编辑好程序后,只需点击相应菜单就可以集成环境,编辑好程序后,只需点击
3、相应菜单就可以完成上述的各步,如完成上述的各步,如WAVE、KEIL。WAVE、KEIL集成软件的使用见教材附录。集成软件的使用见教材附录。1.确定方案和计算方法确定方案和计算方法2.了解应用系统的硬件配置、性能指标。了解应用系统的硬件配置、性能指标。3.建立系统数学模型,确定控制算法和操作步骤。建立系统数学模型,确定控制算法和操作步骤。4.画程序流程图画程序流程图,确定程序的流向。确定程序的流向。5.编制源程序。编制源程序。1合理分配存储器单元和了解合理分配存储器单元和了解I/O接口地址。接口地址。2按功能设计程序,明确各程序之间的相互关系。按功能设计程序,明确各程序之间的相互关系。3用注释
4、行说明程序,便于阅读和修改调试和修改。用注释行说明程序,便于阅读和修改调试和修改。4保存字节保存字节 标号:标号:DS 数值表达式数值表达式作用:作用:指示在程序存储器中保存以标号为起始地址指示在程序存储器中保存以标号为起始地址的假设干字节单元,其单元个数由数值表达式指定。的假设干字节单元,其单元个数由数值表达式指定。例如例如 L1:DS 32;从从L1地址开始保存地址开始保存32个存储单元。个存储单元。7.汇编结束汇编结束 END作用:作用:指示源程序段结束。指示源程序段结束。END指令放在程序的最后。指令放在程序的最后。A51汇编程序还有一些其它的伪指令,列在教材表汇编程序还有一些其它的伪
5、指令,列在教材表3-1中,以备查阅。中,以备查阅。顺序结构顺序结构是按照逻辑操作顺序,从某一条指令开始逐条顺序是按照逻辑操作顺序,从某一条指令开始逐条顺序执行,直至某一条指令为止。执行,直至某一条指令为止。MOV A,R2SWAP A ;十位换到低半字节;十位换到低半字节ANL A,#0FHINC R0MOV R0,A;保存数据十位;保存数据十位SJMP$例例3-5 设变量放在片内设变量放在片内RAM的的20H单元单元,其值为其值为00H05H之间之间,要求编查表程序要求编查表程序,查出变量的平方值查出变量的平方值,并放入片内并放入片内RAM的的21H单元。单元。分析分析:在程序存储器安排一张
6、平方表,首地:在程序存储器安排一张平方表,首地址为址为TAB,以,以DPTR指向表首址,指向表首址,A存放变量存放变量值,利用查表指令值,利用查表指令MOVC A,A+DPTR,即,即可求得。可求得。表中数据用表中数据用BCD码存放符合人们的习惯码存放符合人们的习惯.ORG 0000H MOV DPTR,#TAB MOV A,20H MOVC A,A+DPTR;查表查表 MOV 21H,A SJMP$TAB2:DB 00H,01H,04H,09H,16H,25H ENDDPTRA条件满足条件满足?N影响条件影响条件Y处理段处理段条件满足条件满足?N影响条件影响条件Y处理处理1处理处理2G3+(
7、G-5)2;当当G5M=G3 ;当;当G5 3G因重复使用,先暂存在因重复使用,先暂存在R2。流程。流程见左见左,程序如下:程序如下:有一类分支程序有一类分支程序,它根据不同的输入条件或不同的运算它根据不同的输入条件或不同的运算结果结果,转向不同的处理程序转向不同的处理程序,称之为散转程序。称之为散转程序。多分支散转程序的设计多分支散转程序的设计 这类程序通常利用这类程序通常利用JMP A+DPTR间接转移指令实现转移。间接转移指令实现转移。有如下两种设计方法:有如下两种设计方法:1.查转移地址表查转移地址表:将将转移地址转移地址列成表格,将表格的内容作转移的目标地址。列成表格,将表格的内容作
8、转移的目标地址。2.查转移指令表查转移指令表:将转移到不同程序的将转移到不同程序的转移指令转移指令列成表格,判断条件后查表,列成表格,判断条件后查表,转到表中指令执行转到表中指令执行,下面用两个例子说明。下面用两个例子说明。PR1 EQU 0220HPR2 EQU 0330HTABTAB+2DPH DPL例如例如 R3=1的操作的操作0220例例2:通过查转移指令表实现多分支程序转移举例。:通过查转移指令表实现多分支程序转移举例。由由40H单元中动态运行结果值来选择分支程序单元中动态运行结果值来选择分支程序 40H0,转处理程序,转处理程序0 40H1,转处理程序,转处理程序1 .40Hn,转
9、处理程序,转处理程序n 其程序段如下:其程序段如下:START:MOV DPTR,ADDR16;多分支转移指令表首址送;多分支转移指令表首址送 ;DPTR MOV A,40H ;40H单元内容送单元内容送A CLR C ;清;清CY RLC A ;A内容左移一位内容左移一位 JNC TABLE ;假设;假设CY0转转TABEL INC DPH ;假设;假设CYl,DPH内容十内容十1 TABEL:JMP A十十DPTR ;多分支转移;多分支转移ADDR16:AJMP LOOP0;转分支程序;转分支程序0 AJMP LOOP1;转分支程序;转分支程序1 AJMP LOOPn;转分支程序;转分支程
10、序n-循环结构循环结构-循环结构循环结构先先执执行行后后判判断断 先先判判断断后后执执行行 111122内循环内循环DL1到指令到指令DJNZ R1,DL1的计算:的计算:1+1+22SMT=1000S MT=125=7DH将将7DH代入上面程序的代入上面程序的MT,计算总的延时时间:,计算总的延时时间:1+1+1+1+2125+2*102S假设需要延时更长时间,可以采用多重循环。假设需要延时更长时间,可以采用多重循环。机器周期数机器周期数内内外外例:设单片机晶振频率6M,编写一段程序,大约延时1秒钟。分析:由于DJNZ指令最多的循环次数是256次,而1S256256 约等于15S,晶振频率6
11、MHZ,那么1个机器周期为2S,我们把内循环定为8个机器周期16S。那么16S250250=1S。Delay:MOV R7,#0FAHLOOP:MOV R6,#0FAHLOOP1:NOPNOPNOPNOPNOPNOPDJNZ R6,LOOP1DJNZ R7,LOOP 实际执行时间为:6+2250+2+1250+1=500751个机器周期,需秒。外循环中循环内循环外循环内循环外循环内循环内循环(a)嵌套正确(b)嵌套正确(c)交叉不正确多重循环示意图多重循环示意图 345 H 0A H 32 H 28 H 2B H 1E H 20B H位相加。以位相加。以R7作字节数计数。作字节数计数。编程如下
12、:编程如下:ORG 0000H CLR C ;清进位位;清进位位C MOV R1,#20H ;R1指示地址指示地址 MOV R2,#00H ;存积的高八位存放器;存积的高八位存放器R2清清0SH10:MOV A,R1 ;取一字节送;取一字节送A MOV B,#0AH ;10送送B PUSH PSW MUL AB ;字节乘;字节乘10 POP PSW ADDC A,R2 ;上次积高八位加本次积低八位;上次积高八位加本次积低八位 MOV R1,A ;送原存储单元;送原存储单元 MOV R2,B ;积的高八位送;积的高八位送R2 INC R1 ;指向下一字节;指向下一字节 DJNZ R7,SH10
13、;未乘完去;未乘完去SH10,否那么向下执行,否那么向下执行 MOV R1,B ;存最高字节积的高位;存最高字节积的高位 SJMP$不交换不交换(0)12 23 65 09 1912 23 65 09 19交换交换(1)12 23 09 65 19不交换不交换(0)交换交换(1)12 23 09 19 65最大最大交换交换(1)不交换不交换(0)12 23 09 19 65 12 09 23 19 65 交换交换(1)12 09 19 23 65不交换不交换(0)交换交换(1)12 09 19 23 65最大最大12 09 19 23 6509 12 19 23 6509 12 19 23 6
14、509 12 19 23 6509 12 19 23 65结束清0 0 位作为标记取出下一单元数置位0 0 位两数互换预置循环次数开始已比较1 0 0 次?从3 0 H 单元取数取出大数该单元数大于下一单元?NNNYYY0 0 位为0?3.6 位操作程序设计位操作程序设计 其中和分别是端口线上的信息其中和分别是端口线上的信息,TF0和和IE1分别是定时分别是定时器定时溢出标志和外部中请求标志器定时溢出标志和外部中请求标志,25H和和26H分别是两个分别是两个位地址位地址,运算结果由端口线输出运算结果由端口线输出.程序如下:程序如下:ORL C,TF0 MOV F0,C MOV C,IE1 OR
15、L C,/25H ANL C,F0 ANL C,/26H MOV P1.3,C SJMP$-子程序子程序-子程序子程序-参数传递参数传递-参数传递参数传递例例3-16 用程序实现用程序实现c=a2+b2,设,设a,b均小于均小于10。a存放在存放在31H单元,单元,b存放在存放在32H单元,把单元,把c存入存入34H和和33H单元。单元。和要求为和要求为BCD码。码。解:因该算式两次用到平方值,所以在程序中采用把求解:因该算式两次用到平方值,所以在程序中采用把求平方编为子程序的方法。求平方采用查表法平方编为子程序的方法。求平方采用查表法,主程序和子程主程序和子程序编写如下:序编写如下:ADDBIN:CLR CLOOP1:MOV A,R0;取被加数取被加数 ADDC A,R1;两数相加两数相加,带进位带进位 MOV R0,A ;存结果存结果 INC R0 INC R1 DJNZ R2,LOOP1;未加完转未加完转LOOP1 JNC LOOP2;无进位转无进位转LOOP2 MOV R0,#01H RETLOOP2:DEC R0 RET
侵权处理QQ:3464097650--上传资料QQ:3464097650
【声明】本站为“文档C2C交易模式”,即用户上传的文档直接卖给(下载)用户,本站只是网络空间服务平台,本站所有原创文档下载所得归上传人所有,如您发现上传作品侵犯了您的版权,请立刻联系我们并提供证据,我们将在3个工作日内予以改正。