单片机课件-第四章汇编语言_第1页
单片机课件-第四章汇编语言_第2页
单片机课件-第四章汇编语言_第3页
单片机课件-第四章汇编语言_第4页
单片机课件-第四章汇编语言_第5页
已阅读5页,还剩25页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、第4章 MCS51汇编语言程序设计知识4.1 汇编语言的格式4.2 伪指令 4.3 汇编语言源程序的汇编过程4.4 MCS51汇编语言实用程序举例下一页上一页4.1 汇编语言的格式 ORG 0000H ; 整个程序起始地址 AJMP MAIN ; 跳向主程序 ORG 0030H ; 主程序起始地址 MAIN: CLR C ; MAIN为程序标号 LOOP: MOV A , R0 ADDC A, R1 INC R0 DJNZ R1, LOOP ;相对转移 SJMP NEXT MOV R1, #03H NEXT: DEC R0 SJMP $ ;相当于 LOOP1: SJMP LOOP1 END ;

2、 结束标记下一页上一页 汇编语言格式: 地址 机器码 源程序 注释 ORG 0000H ; 整个程序起始地址0000 20 00 30 LJMP MAIN ; 跳向主程序 ORG 0030H ; 主程序起始地址0030 C3 MAIN: CLR C ; MAIN为程序标号0031 E6 LOOP: MOV A , R00032 37 ADDC A, R10033 08 INC R00034 DA FB DJNZ R1, LOOP ;相对转移0036 80 03 SJMP NEXT0038 78 03 MOV R0, #03H003A 18 NEXT: DEC R0003B 80FE SJMP

3、$ ;HERE: SJMP HERE END ; 结束标记下一页上一页返回4.2 伪操作指令一、定位伪指令ORG(Origin) (设置程序起始地址)格式: 标号: ORG nnnn:16位二进制数,代表地址。功能:规定伪指令后面程序的汇编地址。下一页上一页二、定义字节伪指令DB(Define Byte)格式: 标号: DB 项或项表:单字节二进制、十进制、十六进制数,或以 括起来的字符串。功能:把项或项表的数值(字符用ASCII码)存入从标号开始的连续的程序存储器单元。例三、定义字伪指令DW(Define Word)格式: 标号: DW 项或项表:双字节二进制、十进制、十六进制数,或以 括起

4、来的字符串。功能:同DB,不同的是为16位数据功能:同DB,不同的是为16位数据。 ORG 1000HSEG1: DB 53H,74H,78H,1 ,2SEG2: DB 23H,DAY END(1000H)=53H(1001H)=74H(1002H)=78H(1003H)=31H(1004H)=32H(1005H)=23H(1006H)=44H(1007H)=41H(1008H)=59H下一页上一页四、预留存储区DS(Define Storage)格式:标号: DS 功能:由标号指定单元开始,定义一个存储区,存储区预留存储单元数由表达式的值决定。五、赋值命令EQU格式: EQU 功能:将一个数

5、或特定的汇编符号赋给规定的字符名称。先定义后使用。下一页上一页六、数据地址赋值命令DATA格式: DATA 功能:将数据地址或代码地址赋给规定的字符名称 先赋值,后使用!七、汇编结束命令END格式:标号: END功能:END是汇编语言源程序的汇编结束标志,在它后面所写的指令均不予处理。八、位地址赋值命令BIT格式: BIT 位地址功能:把BIT右边的位地址赋给它左边的字符名称。下一页上一页4.2 汇编语言源程序的汇编过程源程序交叉汇编程序列表文件 .LST目标文件 .HEX单片机调试运行串行通信单片机指令伪指令.ASM编辑软件下一页上一页图片4.4 MCS51汇编语言实用程序举例一、汇编语言程

6、序设计的基本步骤1、分析题意,明确要求;2、建立思路,确定算法;3、编制框图,绘出流程;4、编写程序,上机调试;1)合理分配存储器单元和了解I/O接口地址。 2)按功能设计程序,明确各程序之间的相互关系。 3)用注释行说明程序,便于阅读、修改和调试。画流程图 画流程图是指用各种图形、符号、指向线等来说明程序设计的过程。国际通用的图形和符号说明如下:下一页上一页椭圆框:起止框,在程序的开始和结束时使用。矩形框:处理框,表示要进行的各种操作。菱形框:判断框,表示条件判断,以决定程序的流向。指向线:流程线,表示程序执行的流向。圆 圈:连接符,表示不同页之间的流程连接。各种几何图形符号如下图所示。下一

7、页上一页二、实用程序举例1. 延时1ms程序 ORG 2000H MOV A, #0A6HLOOP: DEC A JNZ LOOP NOP END(一)循环程序设计指令周期(Tp)1121定时时间: 1 (12)1661 2s1000 s1ms下一页上一页2. 延时Nms程序(入口:设定时时间Nms送入R0)DLY: MOV A, #0A6HLOOP: DEC A JNZ LOOP DJNZ R0,DLY RET1122定时时间:(1) 1(12)1662 (R0) 22sNms(2N4) s2DLY: MOV A, #0A5H NOP LOOP: DEC A JNZ LOOP NOP DJN

8、Z R0,DLY RET1122211(2) 2(12)1653 (R0) 22sNms4 s下一页上一页3. 多重循环延时程序DLY: MOV R6, #data1DLY1: MOV R5, #data2DLY2: MOV R4, #data3 DJNZ R4,$ DJNZ R5,DLY2 DJNZ R6,DLY1 RET1122定时时间:211 1(R4)22 (R5) 2(R6)2 2 s12下一页上一页(二)查表程序的设计查表就是根据自变量x,在表格中寻找y,使y=f(x)。用于查表的指令有两条:MOVC A,APC;MOVC A,ADPTR;例、设计二位十六进制数与ASCII码的转换

9、程序。设数值在R2中,结果低位存在R2中,高位存在R3中。分析:对于2位16进制数必须进行2次查表,因此,取数后通过屏蔽的方法来实现高低位分开。下一页上一页;(A)(A)+(DPTR)(PC)(PC)+1,(A)(A)+(PC)(1)利用PC作基址的参考程序如下:HEXA: MOV A,R2ANL A,#0FHADD A,#DIS1 MOVC A,A+PC ;查表 1XCH A, R2 2 ANL A, #0F0H 1SWAP A 2ADD A,#DIS2 1MOVC A,A+PC ;查表 1MOV R3,A 1RET TABLE: DB 0 ,1 ,F ;ASCII表02H09H下一页上一页

10、(PC)当(PC)当+1(PC)当+3(PC)当+4(PC)当+6(PC)当+7(PC)当+8(PC)当+9 MOVC A,+DPTR 这条指令的应用范围较为广泛,一般情况下,大多使用该指令,使用该指令时不必计算偏移量,使用该指令的优点是表格可以设在64K程序存储器空间内的任何地方,而不像 MOVC A,A+PC那样只设在PC下面的256个单元中,使用较方便。 上面的程序可改成如下形式:(2)利用DPTR作基址的参考程序如下 HEXASC: MOV DPTR,#TABLE MOV A,R2ANL A,#0FH MOVC A,A+DPTR;查表 XCH A, R2 ANL A, #0F0HSWA

11、P A; MOVC A,A+DPTR;查表 MOV R3,A RETTABLE:DB 30H,31H,32H,33H,34H;ASCII表 DB 35H,36H,37H,38H,39H DB 41H,42H,43H,44H,45H,46H下一页上一页例4-1 将40H存放的4位二进制数,转换为ASCII码,结果存放在41H。ORG 2000H START: MOV A, 40H ;取二进制数放入AANL A, #0FH ;屏蔽高4位CLR CPUSH ACCSUBB A, #0AH ;CJNE A,#0AH,L1POP ACCL1:JC NEXT ;该数10,则转到NEXTADD A, #07

12、HNEXT: ADD A, #30HMOV 41H, A ; ASCII码存入41HSJMP $END(三) 分支程序设计基本分支程序:(1)若(A) 14H, 转NEXT, 否则继续执行 (A) 14H相当于(A) 14H相当于(A) 15H CJNE A, #15H, LOOPLOOP: JNC NEXT CJNE A, #14H, LOOPLOOP: JNC NEXT CJNE A, #14H, LOOPLOOP: JC NEXT CJNE A,#data,rel;(A)=#data,继续 Cy0(A)#data, 转 Cy0(A)#data, 转 Cy1特点:只有时,Cy1下一页上一页

13、例1:按下面公式编写程序, x为无符号数,存在20h单元 y存放在21h单元。 ORG 0030H MOV A, 20H CJNE A, # 21H, LOOP1LOOP1: JC NEXT1 CJNE A, #40H, LOOP2LOOP2: JNC NEXT2 MOV B, #2 MUL AB AJMP NEXT2NEXT1: CPL ANEXT2: MOV 21H, A END最终结果存在 21h中分支程序例1下一页上一页例 在一个以MCS-51为核心的温度控制器中,温度传感器输出的电压与温度为非线性关系,传感器输出的电压已由A/D转换为10位二进制数。 根据测得的不同温度下的电压值数据

14、构成一个表,表中放温度值y,x为电压值数据。设测得的电压值x放入R2R3中,根据电压值x,查找对应的温度值y,仍放入R2R3中。本例的x和y均为双字节无符号数。程序如下: LTB2:MOV DPTR,#TAB2 MOV A,R3 CLR C RLC A MOV R3, A XCH A, R2 RLC A XCH R2, A ADD A, DPL ;(R2R3)+(DPTR)(DPTR)MOV DPL,A MOV A,DPH ADDC A,R2 MOV DPH,A CLR A MOVC A,A+DPTR ;查第一字节 MOV R2,A ;第一字节存入R2中 CLR A INC DPTR MOVC

15、 A,A+DPTR ;查第二字节 MOV R3,A ;第二字节存入R3中 RET TAB2:DW ;温度值表例设有一个巡回检测报警装置,需对16路输入进行检测,每路有一最大允许值,为双字节数。运行时,需根据测量的路数,找出每路的最大允许值。看输入值是否大于最大允许值,如大于就报警。根据上述要求,编一个查表程序。 取路数为x(0 x15),y为最大允许值,放在表格中。设进入查表程序前,路数x已放于R2中,查表后最大值y放于R3R4中。本例中的x为单字节数,y为双字节数。查表程序如下:TB3:MOV A,R2 ADD A,R2 ;(R2)*2(A) MOV R3,A ;保存指针 ADD A,#6

16、;加偏移量MOVC A,A+PC ;查第一字节XCH A,R3 ADD A,#3 MOVC A,A+PC ;查第二字节 MOV R4,ARET TAB3: DW 1520,3721,42645,7580 ;最大值 ;表 DW 3483,32657,883,9943 DW 10000,40511,6758,8931 DW 4468,5871,13284,27808例4 一批单字节无符号数,以R0为首地址指针,R2中为字节数,将这批数进行升序排列。程序框图如图所示。SORT:MOV A,R0 ;MOV R1,AMOV A,R2;字节数送入R5MOV R5,ACLR F0;互换标志位F0清零DEC R5;MOV A,R1; LOOP:MOV R3,A;INC R1;CLR C;MOV A,R1;比较大小SUBB A,R3;JNC LOOP1;SETB F0;互换标志位F0置1MOV A,R3;XCH A,R1;两个数互换DEC R1;XCH A,R1;INC R1 LOOP1:MOV A,R1 DJNZ R5,LOOP JB F0,SORT RET(四)散转程序设计根据R7中的内容,转向各个子程序。 R70,转入Prog0

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

最新文档

评论

0/150

提交评论