第4章80C51的汇编语言程序设计m.ppt_第1页
第4章80C51的汇编语言程序设计m.ppt_第2页
第4章80C51的汇编语言程序设计m.ppt_第3页
第4章80C51的汇编语言程序设计m.ppt_第4页
第4章80C51的汇编语言程序设计m.ppt_第5页
已阅读5页,还剩18页未读 继续免费阅读

下载本文档

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

文档简介

1、2020/8/3,1,第4章 80C51的汇编语言程序设计,程序编制的方法和技巧,4.1,源程序的编辑和汇编,4.2,基本程序结构,4.3,子程序及其调用,4.4,简单I/O设备的并口直接驱动示例,4.5,4.1程序编制的方法和技巧,4.1.1程序编制步骤,一、任务分析 二、算法设计 三、流程描述,标号是指令的符号地址,通常作转移指令的操作数; 由1-31个字符组成,由字母、数字、“-”、“?”等组成,不能由数字开头; 不能用已定义的保留字; 必须后跟英文冒号”:”,4.1.3汇编语言的语句格式,标号:指令助记符操作数1,操作数2,操作数3;注释,指令助记符是指令功能的英文缩写,不可空缺。,操

2、作数是指令要操作的数据或数据的地址 操作数可以空缺,或者一项、两项、三项或者多项; 各项之间用英文逗号隔开; 操作数可以是数据(二进制、十六进制、ASCII码等)、符号(符号名、标号或特定符号$)、表达式组成; 表达式由运算符和数据构成的算式。 如:4*(5+6)、2 shl 2等,注释只是对语句的说明,以增加程序的可读性,以英文分号”;”开头。,例:tab: db 20h,4*(2+6),40h,50h,10h ;定义一串数据,起始地址为tab mov dptr,#tab,2020/8/3,4,4.2.1 源程序编辑与汇编,一、源程序的编辑.asm 二、源程序的汇编A51.exe 三、目标文

3、件的连接BL51.exe,由符号转换器OH51.exe转换成*.hex文件,4.2源程序的编辑和汇编,2020/8/3,5,4.2.2 伪指令,伪指令,也叫汇编命令。仅对汇编过程进行指示 伪指令无对应的单片机可执行代码,起始地址设定伪指令ORG,ORG 表达式,表达式通常为十六进制地址,例:,ORG 8000H START:MOV A,#30H ,ORG可多次使用,但地址值的顺序要由小到大顺序设置,结束汇编伪指令END,END,该伪指令位于源程序的最后一行。,2020/8/3,6,定义字节数据表伪指令DB,定义字数据表伪指令DW,1000H,标号: DB 字节数据表,如: ORG 1000H

4、DB -2,-4,-6,8,10,18,1001H,标号: DW 字数据表,ORG 1400H DATA1:DW 324AH,3CH ,1400H,1401H,1402H,1403H,大端模式,2020/8/3,7,定义常值为符号名伪指令EQU,符号名 EQU 常值表达式,LEN EQU 10 SUM EQU 21H BLOCK EQU 22H CLR A MOV R7,LEN MOV R0,BLOCK LOOP:ADD A,R0 INC R0 DJNZ R7,LOOP MOV SUM,A,符号名为: 地址 常数 段名 字符串 寄存器名 位名,比较:标号只能是地址,符号名可以代表地址、常数、段

5、名等,注:用EQU定义的符号名一经定义便不能重新定义和改变,2020/8/3,8,定义位地址为符号名伪指令BIT,符号名 BIT 位地址表达式,如: ST BIT P1.0 ;将P1.0的位地址赋给符号名ST CF BIT 0D7H ;将位地址为D7H的位定义为符号名,用BIT定义的“符号名”一经定义便不能重新定义和改变 其它一些伪指令参见教材表4.2,程序设计流程,4.3基本程序结构,明确要求和要达到的目的 确定解决问题的计算方法和步骤 画出流程图 按流程图编写程序 上机汇编、调试、修改及最后确定源程序,4.3基本程序结构,4.3.1 顺序程序 顺序程序是无分支无循环的程序。 【例4-1】设

6、片内RAM的21H单元存放一个十进制数据十位的ASCII码, 22H单元存放一个十进制数据个位的ASCII码,编写程序将该数据转换成压缩BCD码存放在20H单元,程序: ORG 0000H LJMP START ORG 0040H START: MOV A,21H ANL A,#0FH SWAP A MOV 20H,A MOV A,22H ANL A,#0FH ORL 20H,A SJMP $ END,4.3.2 分支程序 根据需要改变程序的执行顺序。单分支、多分支等 【例4-2】设变量x以补码形式存在片内RAM的30H单元,变量y与x的关系是: 当x0时,y=x; 当x=0时,y=20H;

7、当x0时,y=x+5。编制程序,根据x的大小求y并送回原单元。,程序: ORG 0000H LJMP START ORG 0040H START: MOV A,30H JZ NEXT ANL A,#80H JZ DONE MOV A,#05H ADD A,30H MOV 30H,A SJMP DONE NEXT: MOV 30H,#20H DONE: SJMP DONE END,4.3.3 循环程序 按某种控制规律重复执行的程序。 【例4-4】编写程序,将内部30H至3FH单元初始化为00H。,程序: ORG 0000H LJMP MAIN ORG 0040H MAIN: MOV R0,#30

8、H MOV A,#00H MOV R7,#16 LOOP: MOV R0,A INC R0 DJNZ R7,LOOP SJMP $ END,【例4-5】将内部RAM中起始地址为60H的数据串传送到外部RAM中起始地址为1000H的存储区域内,直到发现$字符停止传送。,程序: ORG 0000H LJMP MAIN ORG 0040H MAIN: MOV R0,#60H MOV DPTR,#1000H LOOP0: MOV A,R0 CJNZ A,#24H,LOOP1 SJMP DONE LOOP1: MOV DPTR,A INC R0 INC DPTR SJMP LOOP0 DONE: SJM

9、P DONE END,4.4 子程序及其调用,目的:具有通用性的问题如数制转换、数值计算等,在一个程序中要使用多次,可以将其设计成通用的子程序供随时使用,利用子程序可以使程序结构紧凑,使程序阅读和调试更加方便。 特点:能完成确定任务,并能为其他程序反复调用的程序段.要求子程序在结构上具有通用性和独立性;它的执行要由其他程序来调用,执行完后要返回到调用程序。 注意:现场的保护与恢复、主程序与子程序之间的参数传递。,4.4.1 现场保护与恢复,一、在主程序中实现,如: PUSH PSW PUSH ACC PUSH B MOV PSW,#10H LCALL ADDR16 POP B POP ACC

10、POP PSW,二、在子程序中实现,如:SUB1:PUSH PSW PUSH ACC PUSH B MOV PSW,#10H POP B POP ACC POP PSW RET,注意:顺序的对应关系,4.4.2 参数传递(入口参数及出口参数传递),利用累加器或寄存器 利用存储器(指针R0、R1、DPTR) 利用堆栈,当相互传递的数据较少时,采用寄存器传递方式可以获得较快的传递速度;当数据较多时,宜采用存储器或堆栈方式传递;如果是子程序嵌套时,最好采用堆栈方式。,4.4.3 常用子程序示例,查表子程序,【例4-11】利用子程序实现 , 设a、b、c分别存于内部RAM的30H、31H、32H三个单

11、元中。 子程序入口: (A)=预平方数; 子程序出口: (A)=平方值;,子程序: SQR:MOV DPTR,#TAB MOVC A,A+DPTR RET TAB:DB 0,1,4,9,16,25,36,49,64,81,验证程序如下: MAIN:MOV 30H,#4 MOV 31H,#5 MOV A,30H ACALL SQR MOV R1,A MOV A,31H ACALL SQR ADD A,R1 MOV 32H,A SJMP $,4.4.3 常用子程序示例,延时子程序,【例4-15】编写1ms延时子程序 若晶振频率为12MHz,则一个机器周期为1us,执行一条DJNZ 指令为2us。实

12、现程序如下: D1ms:MOV R6,#249 ;循环外指令,1us DL:NOP ; 1us NOP ; 1us DJNZ R6,DL ; 2us,循环内共(1+1+2)x249x1us=996us RET ; 循环外指令,2us。共996+1+2=999us,若延时时间要求更长一点,可以采用循环嵌套或子程序嵌套的方法实现。,2020/8/3,19,4.5 简单I/O设备的并口直接驱动示例,4.5.1 独立式键盘与LED显示示例,【例4-17】数据端与P0口正序连接。编写程序,分别实现功能:上电后数码管显示“P”,按下任何键后,显示从“0”开始每隔1秒加1,加至“F”后,数码管显示“P”,进

13、入等待按键状态。,2020/8/3,20,2020/8/3,21,TEMP EQU 30H ORG 0000H JMP START ORG 0100H START:MOV SP,#5FH MOV P0,#8CH;显示P MOV P3,#0FFH NOKEY:MOV A,P3;键盘扫描 CPL A JZ NOKEY ;无键按下 MOV TEMP,P3 ;有键按下 CALL D_10ms MOV A,P3 CJNE A,TEMP,NOKEY;去抖 MOV R7,#16;显示字符个数 MOV R2,#0;需显示的数,LOOP:MOV A,R2 MOV DPTR,#C_P0 MOVC A,A+DPTR MOV P0,A INC R2 SETB RS0 ;切换组 CALL D_1S CLR RS0 DJNZ R7,LOOP JMP START,D_1S:(子程序)D_10ms:(子程序),C_P0:DB 0C0H,0F9H,0A4H,0B0H DB 99H,92H,82H,0F8H DB 80H,90H,88H,83H, DB 0C6H,0A1H,86H,8EH,END,2020/8/3,22,4.5.2 矩阵式键盘与LED显示示例,步骤:判有无键按下、判按下哪

温馨提示

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

评论

0/150

提交评论