第4章 mcs-51单片机汇编语言程序设计

上传人:aa****6 文档编号:54733369 上传时间:2018-09-18 格式:PPT 页数:54 大小:1.79MB
返回 下载 相关 举报
第4章 mcs-51单片机汇编语言程序设计_第1页
第1页 / 共54页
第4章 mcs-51单片机汇编语言程序设计_第2页
第2页 / 共54页
第4章 mcs-51单片机汇编语言程序设计_第3页
第3页 / 共54页
第4章 mcs-51单片机汇编语言程序设计_第4页
第4页 / 共54页
第4章 mcs-51单片机汇编语言程序设计_第5页
第5页 / 共54页
点击查看更多>>
资源描述

《第4章 mcs-51单片机汇编语言程序设计》由会员分享,可在线阅读,更多相关《第4章 mcs-51单片机汇编语言程序设计(54页珍藏版)》请在金锄头文库上搜索。

1、第3章 MCS-51单片机汇编语言程序设计,武汉科技大学信息科学与工程学院,内容提要, 概述 伪指令 顺序程序设计 分支程序设计 循环程序设计 位操作程序设计 子程序 小结,3.1 概述,MCS-51单片机的编程语言可以是汇编语言也可以是高级语言(如C语言),高级语言编程快捷,但程序长,占用存储空间大,执行慢;汇编语言产生的目标程序简短,占用存储空间小,执行快,能充分发挥计算机的硬件功能。 无论是高级语言还是汇编语言,源程序都要转换成目标程序(机器语言)单片机才能执行。,图 3-1 两种语言源程序转换成目标程序,汇编:将汇编语言源程序转换成机器语言目标程序的过程称为汇编。汇编程序:能将汇编语言

2、源程序转换成机器语言目标程序的系统软件称为汇编程序。,汇编的方法:汇编的方法有两种 1.手工汇编:人工查指令表,查出程序中每条指令对应的机器代码。早期的计算机使用。 2.机器汇编:用计算机中的汇编程序对用户源程序进行汇编。用机器汇编要提供给汇编一些信息,遵循汇编程序的一些约定。这些由伪指令指定。,1)确定程序中每条汇编语言指令的指令机器码 2)确定每条指令在存储器中的存放地址 3)提供错误信息 4)提供目标执行文件(*.OBJ/*.HEX)和列表文件(*.LST),地址 机器码 源程序 ORG 2000H 2000H 78 30 MAIN: MOV R0,#30H2002H E6 MOV A,

3、R0,1. 机器指令:指令系统中的全部指令。每条机器指令都有对应的机器代码,可以被CPU执行。 2. 伪指令: 汇编控制指令,没有指令代码,只用于汇编过程,为汇编程序提供汇编信息。,一、汇编语言指令类型,宏汇编功能:将需要反复多次执行的程序段定义成一个宏指令名(宏定义)。编程时,可在程序中使用宏指令名来替代被定义的程序段(宏调用)。,3.2伪指令,宏定义过程:,宏调用过程:宏指令名 实际参数宏指令名 实际参数,宏指令名 MACRO 形式参数 ;被定义的程序段ENDM,二伪指令 常用伪指令及功能:,1.起始指令 ORG nn 功能:定义程序或数据块的起始地址。指示此语句后面的程序或数据块以nn为

4、起始地址,连续存放在程序存储器中。 指令地址 机器码 源程序 ORG 2000H 2000H 78 30 MAIN: MOV R0,#30H2002H E6 MOV A,R0,ORG 3000H3000H 23 TAB: DB 23H,100,A 3001H 643002H 41,2.字节定义 标号: DB(字节常数,或字符或表达式) 功能:指示在程序存储器中以标号为起始地址的单元里存放的数为字节数据(八位二进制数)。 例如 LN:DB 32,C,25H,-1;LNLN+2 地址单元依次存放20H , 43H , 25H ,FFH,3. 字定义 标号:DW (字常数或表达式) 作用: 指示在程

5、序存储器中以标号为起始地址的单元里存放的数为字数据(即16位的二进制数),例如: GH :DW 1234H,5678H,08,5. 等值指令 标号 EQU(数值表达式) 表示EQU两边的量等值,用于为标号或标识符赋值。 例如: X1 EQU 2000H X2 EQU 0FH MAIN: MOV DPTR,#X1 ; DPTR=2000H ADD A,#X2 ; A=A+0FH,4保留字节 标号:DS (数值表达式) 作用: 指示在程序存储器中保留以标号为起始地 址的若干字节单元,其单元个数由数值表达式指定。 例如 L1:DS 32 ; 从L1地址开始保留32个存储单元。,6. 位定义 标号 B

6、IT 位地址 作用: 同EQU指令,不过定义的是位操作地址。 例如 AIC BIT P1.1。,7.汇编结束 END 作用: 指示源程序段结束。END指令放在程序的最后。 A51汇编程序还有一些其它的伪指令,列在教材表3-1中,以备查阅。,MCS-51单片机的汇编语言程序设计的步骤与其他 微机相同,本章通过编程实例,使读者进一步熟悉和 掌握单片机的指令系统及编程的方法和技巧,提高单 片机程序的编程能力。为方便上机调试,本章不涉及 中断,所以均以ORG 0000H作起始指令,上机调试方 法见本教材的试验部分。,33 顺序程序设计 例31 将外部数据存储器的000EH和000FH单元的内容相交换。

7、 编程如下:ORG 0000HMOV P2, #0H ;送地址高8位至P2口MOV R0, #0E ;R0=0EHMOV R1, #OFH ;R1=0FHMOVX A, R0 ;A=(000EH)MOV 20H, A ;(20H)=(000EH) MOVX A, R1 ;A=(000FH)XCH A, 20H ;(20H) A,A=(000EH),(20H)=(000FH)MOVX R1, A MOV A, 20HMOVX R0, A ;交换后的数送各单元SJMP $END,例32 将内部数据存储器的(31H)(30H)中的16位数求其补码后放回原单元。 编程如下:ORG 0000HMOV A

8、,31HJB ACC.7,CPLL ;如有负数转CPLLSJMP $ ;为正数,补码原码CPLL: MOV A,30HCPL AADD A,#1 ;低8位取反加1MOV 30H,AMOV A,31HCPL A ;高8位取反,ADDC A,#0 ;加低8位的进位 ORL A,#80H ;恢复负号MOV 31H,ASJMP $END,例33设变量放在片内RAM的20H单元,取值范围为00H,01H,02H,03H,04H,05H,要求编制查表程序,查出变量的平方值,并放入片内RAM的21H单元。分析: 在程序存储器的一指定地址单元,安排一张平方表,以DPTR指向表首址,A存放变量值,利用查表指令M

9、OVC,即可求得,表中用BCD码存放,合乎人们的习惯。程序如下: ORG 0000HMOV DPTR, #TAB2MOV A, 20HMOVC A, A+DPTRMOV 21H,ASJMP $ TAB2:DB 00H,01H,04H,09H,16H,25H ;平方表END查表技术是汇编语言程序设计的一个重要技术,通过查表避免了复杂的计算和编程。如查平方表、立方表、函数表、数码管显示的段码表等,所以查表技术应熟练掌握。,例34 设内部RAM的ONE地址单元存放着一个8位无符号二进制数,要求将其转化为压缩BCD码,将百位发拿过在HUND地址单元、十位和个位放在TEN地址单元。 分析 8位无符号二进

10、制数范围在0255之间,将此数除以100,商即为百位,将其余数除以10得十位,余数即为个位。程序设计如下:,ORG 0000H MOV A, ONE MOV B, #64H DIV AB MOV HUND, A MOV A, #0AH XCH A, B DIV AB,SWAP AADD A, BMOV TEN, ASJMP $ ONE EQU 20H HUND EQU 22H TEN EQU 23HEND,3.4 分支程序设计,例35 在内部RAM 的40H和44H地址单元中,有2各无符号数,试编程比较这两数的大小,将大数存于内部RAM的GR单元,小数存于LE地址单元,如两数相等,则分别送入G

11、R和LE地址单元。 分析 采用CJNE指令,既可以判断相等与否,还可以通过Cy标志判断大小。 程序如下:ORG 0000HMOV A,40HCJNE A,41H,NOEQ ;两数不等转NOEQMOV GE,A ;两数相等,GR单元和LE单元均存次数MOV LE,ASJMP $ NOEQ: JC LESS ;A小则转LESSMOV GR,A ;A大,大数存GR单元MOV LE,41H ;小数存LE单元SJMP $GR EQU 30HLE EQU 31HEND,例36 设变量X以补码的形式存放在片内RAM的30H单元,函数y与x 有如下关系式:,试编制程序,根据X的大小求出Y并放回原单元。 分析

12、取出变量后先作取值范围的判断,对符号的判断可用位操作类指令,也可用逻辑运算类指令实现,此处用逻辑运算指令。流程见图31,程序如下:,ORG 0000HMOV A, 30HJZ NEXT ;判断是否为零ANL A, #80H ;判断符号位JZ ED ;X0转EDMOV A, #05H ;X0 完成X+5ADD A, 30HMOV 30H, ASJMP ED NEXT: MOV 30H, #20H ;X0 ED: SJMP $,图31 例36程序流程图,加例 x, y均为8位二进制数, 设 x存入R0, y存入R1, 求解:,程序如下: START: CJNE R0, 00H, SUL1 ; R0

13、中的数与00比较不等转移 MOV R1, 00H ; 相等, R1 0SJMP SUL2 SUL1: JC NEG ; 两数不等, 若(R0)0, 则 R101HSJMP SUL2NEG: MOV R1, 0FFH ; (R0)0, 则 R10FFHSUL2: RET,图 32,有一类分支程序,它根据不同的输入条件或不同的运算结果,转向不同的处理程序,称之为散转程序。这种程序通常利用JMP A+DPTR 间接转移指令实现。有如下两种方法:1) 查转移地址表。将转移地址列地址列成表格,将表格的内容作转移的目标地址。2) 查转移指令表。将转移到不同程序的转移指令列成表,判断条件后查表,转到表中执行,下面用两个例子说明。1 利用转移地址表实现转移 例37 根据R3的内容转向对应的程序,处理程序的入口分别为PR0PRn(R3的内容128,nAADD A, A ;A*2MOV DPTR, #TAB PUSH AMOVC A, A+DPTR ;取地址表中的高字节MOV B, A ;暂存于BINC DPLPOP AMOVC A, A+DPTR ;取地址表中的的字节MOV DPL, AMOV DPH, B ;DPTR为表中地址CLR A ;A=0JMP A+DPTR ;JMP PRn TAB: DW PR0,PR1,PR2,,PRnEND,

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 大杂烩/其它

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号