《第3章程序设计(本科).ppt》由会员分享,可在线阅读,更多相关《第3章程序设计(本科).ppt(49页珍藏版)》请在第壹文秘上搜索。
1、单片机微型计算机与单片机微型计算机与接口技术接口技术连接连接/定位器定位器L51汇编语言汇编语言源程序源程序汇编器汇编器A51符号转换程序符号转换程序OHS51绝对地址绝对地址目标程序目标程序 .BINC语言程序语言程序浮浮动动地地址址目目标标程程序序编译器编译器C51 HEX图图 3-1 两种语言源程序转换成目标程序两种语言源程序转换成目标程序 汇编:将汇编语言汇编:将汇编语言源程序源程序转换成机器语言转换成机器语言目标目标程序的程序的过程称为汇编。过程称为汇编。( (翻译)翻译) 汇编程序:能将汇编语言汇编程序:能将汇编语言源程序源程序转换成机器语言转换成机器语言目标目标 程序的系统软件称
2、为汇编程序。程序的系统软件称为汇编程序。 (翻译官)翻译官) 汇编语言源程序:用户用汇编语言助记符编的应用程汇编语言源程序:用户用汇编语言助记符编的应用程 序。序。目标程序:计算机能识别的机器码程序目标程序:计算机能识别的机器码程序4保留字节保留字节 标号:标号:DS (数值表达式)(数值表达式)作用:作用: 指示在程序存储器中保留以标号为起始地指示在程序存储器中保留以标号为起始地址的若干字节单元,其单元个数由数值表达式指定。址的若干字节单元,其单元个数由数值表达式指定。例如例如 L1:DS 32 ; 从从L1地址开始保留地址开始保留32个存储单元。个存储单元。7. 汇编结束汇编结束 END作
3、用:作用: 指示源程序段结束。指示源程序段结束。 END 指令放在程序的最后。指令放在程序的最后。A51 汇编程序还有一些其它的伪指令,列在教材表汇编程序还有一些其它的伪指令,列在教材表 3-1中,以备查阅。中,以备查阅。000EH000FH000EH000FH000EH000FH000EH000FH分析分析: 外部数据存储器的数外部数据存储器的数据操作只能用据操作只能用MOVX指令,指令,且只能和且只能和A之间传送,因此之间传送,因此必须用一个中间环节作暂存,必须用一个中间环节作暂存,设用设用20H单元。用单元。用R0、R1指指示两单元的低八位地址,高示两单元的低八位地址,高八位地址由八位地
4、址由P2指示。编程过指示。编程过程如左图:程如左图: 000EH000FH000EH000FH000EH000FH例例3-3 分析分析 :变量变量X放在片内放在片内RAM的的20H单元单元,其值为其值为00H05H之间之间, 在片内在片内RAM的的21H单元,单元,在程序存储器安排一张平在程序存储器安排一张平方表,方表,通过查表通过查表这样比完成这样比完成 X*X 编程简便多了。编程简便多了。表表 ORG 0000H MOV DPTR,#TAB MOV A, 20H ;取;取X MOVC A,A+DPTR ; 查表查表 MOV 21H,A ; 存于存于Y SJMP $TAB: DB 00H,0
5、1H,04H,09H,16H,25H END 首地址为首地址为TAB,以,以DPTR指向表首址,利用查表指令指向表首址,利用查表指令MOVC A,A+DPTR,即可求得。,即可求得。表中数据用表中数据用BCD码存放合乎人们的习惯码存放合乎人们的习惯. 如果平方值为两个字节,程序应如何编。如果平方值为两个字节,程序应如何编。DPTRA片内片内RAM42H41H40H65MOV A,R2SWAP A ;十位换到低半字节;十位换到低半字节ANL A,#0FHINC R0MOV R0,A;保存数据十位;保存数据十位SJMP $条件满足条件满足?N影响条件影响条件Y处理段处理段条件满足条件满足?N影响条
6、件影响条件Y处理处理1处理处理2例例 3-6】 设变量设变量X以补码形式存放在片内以补码形式存放在片内RAM的的30H单元,单元, 函数函数Y与与X有如下关系式:有如下关系式: X X0Y= 20H X=0 X+5 X 00H(30H) +05H (30H)结束结束20H (30H)YNYNG3 + (G-5)2; 当当G5M=G3 ;当;当G5 3G因重复使用,先暂存在因重复使用,先暂存在R2。流程见左流程见左, 程序如下:程序如下: 多分支散转程序的设计多分支散转程序的设计 有一类分支程序有一类分支程序,它根据不同的输入条件或不同的它根据不同的输入条件或不同的运算结果运算结果,转向不同的处
7、理程序转向不同的处理程序,称之为散转程序。这类称之为散转程序。这类程序通常利用程序通常利用JMPA+DPTR间接转移指令实现转移。间接转移指令实现转移。有如下两种设计方法:有如下两种设计方法: 1. 查转移地址表查转移地址表: 将将转移地址转移地址列成表格,将表格的内容作转移的目标列成表格,将表格的内容作转移的目标地址。地址。 2. 查转移指令表查转移指令表: 将转移到不同程序的将转移到不同程序的转移指令转移指令列成表格,判断条列成表格,判断条件后查表,转到表中指令执行件后查表,转到表中指令执行,下面用两个例子说明。下面用两个例子说明。 TABTAB+2DPH DPL例如例如 R3=1的操作的
8、操作0220分析分析: 将键码排成表,将键码表中的值和将键码排成表,将键码表中的值和B中的键编码比中的键编码比对,记下在键码表中和对,记下在键码表中和B中的键编码相等的序号,另安排中的键编码相等的序号,另安排一个转移表一个转移表,安排安排AJMP指令指令(机器码机器码),因每条,因每条AJMP指令指令占二字节,将刚才记下的序号乘占二字节,将刚才记下的序号乘2即为转移表的偏移地址,即为转移表的偏移地址,利用利用JMP A+DPTR执行表内的执行表内的AJMP指令,从而实现多指令,从而实现多分支转移,分支转移,设转移表表头设转移表表头JPT的地址为的地址为001AH、PR0入口地址为入口地址为01
9、10H、 ,参考,参考2.4.2节,求节,求AJMP PR0的的机器码机器码 0110H -0000 0001 0001 0000a10 . a0 机器码机器码2110h001 00001 0001 0000 ,AJMP PR0AJMP PR1AJMP PR2转移指令表转移指令表JPT键码表键码表TAB65HABA2=4A=1A=2A=065H65H001AH001CH 当程序中的某些指令需要反复执行多次时,采用循环程当程序中的某些指令需要反复执行多次时,采用循环程序的方式,这样会使程序缩短,节省存储单元(并不节省序的方式,这样会使程序缩短,节省存储单元(并不节省执行时间)。执行时间)。 循环
10、次数的控制,有两种控制方式循环次数的控制,有两种控制方式:第一种方法第一种方法 先判断再处理先判断再处理,即先判断满不满足循环条件,如不即先判断满不满足循环条件,如不满足,就不循环,多以循环条件控制。满足,就不循环,多以循环条件控制。第二种方法第二种方法先处理再判断,即循环执行一遍后,下一轮还需不需先处理再判断,即循环执行一遍后,下一轮还需不需要进行,多以计循环次数控制。循环可以有单重循环和多要进行,多以计循环次数控制。循环可以有单重循环和多重循环,在多重循环中,内、外循环不能交叉,也不允许重循环,在多重循环中,内、外循环不能交叉,也不允许外循环跳入内循环。下面通过几个实例说明循环程序的设外循
11、环跳入内循环。下面通过几个实例说明循环程序的设计方法。计方法。3.5 循循 环环 程程 序序 设设 计计111122内循环内循环DL1到指令到指令DJNZ R1,DL1的计算:的计算: (1+1+2)2SMT=1000S MT=125=7DH将将7DH代入上面程序的代入上面程序的MT,计算总的延时时间:,计算总的延时时间: 1+1+(1+1+2)125+28102S =10062S=10.062mS若需要延时更长时间,可以采用多重循环。若需要延时更长时间,可以采用多重循环。机器周期数机器周期数内内外外 345 H * 0A H 32 H+ 28 H 2B H+ 1E H 20B H分析:分析:
12、为了把为了把10个单元中的数按从小到大排序,可从个单元中的数按从小到大排序,可从30H单元开始,相邻两数逐次进行比较,如果前面的单元开始,相邻两数逐次进行比较,如果前面的数大于后面的数,两数交换,保存小数,取出大数数大于后面的数,两数交换,保存小数,取出大数, 且只要有地址单元内容的互换就置位标志。多次循环且只要有地址单元内容的互换就置位标志。多次循环后,若两数比较不再出现有单元互换的情况,就说明后,若两数比较不再出现有单元互换的情况,就说明从从30H39H单元中的数已全部从小到大排列完毕。单元中的数已全部从小到大排列完毕。到这一片单元中。到这一片单元中。不交换不交换(0)12 23 65 0
13、9 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 6509 12 19 23 6509 12 19 23 65不交换不交换(0)不交换不交换(0)不交换不交换(0)最小最大最小最大结束结束清00位作为标记清00位作为标记取
14、出下一单元数取出下一单元数置位00位置位00位两数互换两数互换预置循环次数预置循环次数开始开始已比较100次?已比较100次?从30H单元取数从30H单元取数取出大数取出大数该单元数大于该单元数大于下一单元?下一单元?N NN NN NY YY YY Y00位为0?00位为0? ORG 0000HSTART: CLR 00H ;00H位作交换标志位位作交换标志位 CLR C MOV R7, #0AH ;比较次数;比较次数 MOV R0, #30H ;地址;地址 MOV A, R0 ;取数到;取数到ALOOP: INC R0 ;指向新的下一单元;指向新的下一单元 MOV R2, A ;R2 暂存
15、大数暂存大数 SUBB A, R0 ;比较,;比较,A中为差,谁大反映在中为差,谁大反映在C. MOV A, R2 ;还原成单元中的数;还原成单元中的数 JC NEXT ;A中数小不交换中数小不交换 SETB 00H ; A中数大交换,置交换标志中数大交换,置交换标志 XCH A, R0 ;交换,;交换, A中大数置于高地址单元中大数置于高地址单元 DEC R0 XCH A, R0 ;小数置于低地址单元;小数置于低地址单元 INC R0 ;指向已比较过的高地址单元;指向已比较过的高地址单元NEXT: MOV A, R0 ;取数;取数 DJNZ R7, LOOP JB 00H, START ;交
16、换标志位为;交换标志位为1,重新进行下一轮比较,重新进行下一轮比较 SJMP $3.6 位操作程序设计位操作程序设计P1.311&1P1.1P2.2TF0IE125H(位)26H(位) 其中其中P1.1和和P2.2分别是端口线上的信息分别是端口线上的信息,TF0和和IE1分别是定时器定时溢出标志和外部中请求标志分别是定时器定时溢出标志和外部中请求标志, 25H和和26H分别是两个位地址分别是两个位地址, 运算结果由端口线运算结果由端口线P1.3输出。输出。 图图3-7 硬件逻辑运算电路硬件逻辑运算电路3.7 子程序子程序 当一段程序需多次应用当一段程序需多次应用,或为多人应用时或为多人应用时,这这段程序编为子程序段程序编为子程序.例例3-1 用程序实现用程序实现 c = a2 + b2,设,设a,b均小于均小于10。a存放存放在在31H单元,单元,b存放在存放在32H单元,把单元,把 c 存入存入34H和和33H单元。(和要求为单元。(和要求为BCD码)。码)。 解:因该算式两次用到平方值,所以在程序中解:因该算式两次用到平方值,所以在程序中采用把求平方编为子程序的方法。求平方采用查采