汇编语言程序设计及仿真调试课件.ppt

上传人:小飞机 文档编号:2159230 上传时间:2023-01-21 格式:PPT 页数:38 大小:496KB
返回 下载 相关 举报
汇编语言程序设计及仿真调试课件.ppt_第1页
第1页 / 共38页
汇编语言程序设计及仿真调试课件.ppt_第2页
第2页 / 共38页
汇编语言程序设计及仿真调试课件.ppt_第3页
第3页 / 共38页
汇编语言程序设计及仿真调试课件.ppt_第4页
第4页 / 共38页
汇编语言程序设计及仿真调试课件.ppt_第5页
第5页 / 共38页
点击查看更多>>
资源描述

《汇编语言程序设计及仿真调试课件.ppt》由会员分享,可在线阅读,更多相关《汇编语言程序设计及仿真调试课件.ppt(38页珍藏版)》请在三一办公上搜索。

1、第5章 汇编语言程序设计及仿真调试,5.1 汇编语言程序设计基础知识,5.2 汇编语言程序设计举例,5.3 利用Keil uVision2调试程序,5.4 ISP工具的使用,5.1.1 伪指令,一般来说,在汇编语言源程序中用MSC-51指令助记符编写的程序,都可以一一对应的产生目标程序。但还有一些指令,例如指定目标程序或数据存放的起始地址,给一些指定的标号赋值,在内存中予留工作单元,表示源程序结束等等。这些指令并不产生目标程序,不影响程序的执行,仅仅产生供汇编用的某些指令,以便在汇编时执行一些特殊操作,称之为伪指令。,5.1 汇编语言程序设计基础知识,1、设置起始地址ORG,ORG nn OR

2、G伪指令总是出现在每段源程序或数据块的开始。它可使程序员把程序、子程序或数据块存放在存贮器的任何位置。ORG 2000H MOV A,20H 表示后续目标程序从2000H单元开始存放。一般要求ORG定义空间地址由小到大,且不能重叠。在实际应用中,一般仅设置中断服务子程序的入口地址和主程序的起始存放地址,其他的程序或常数依次存放即可,汇编程序会自动进行存储空间的分配。,2、定义字节DB或DEFB,标号:DB 项或项表 其中项或项表是指一个字节,数或字符串,或以引号括起来的ASC码字符串(一个字符用ASC码表示,相当于一个字节)。该指令的功能是把项或项表的数值(字符则用它的ASC码)存入从标号开始

3、的连续单元中。SEG1:DB 53H,74H,78H,1,2 SEG2:DB 23H,DAY则:(1000H)=53H(1001H)=74H(1002H)=78H(1003H)=31H 数字1的ASC码(1004H)=32H 数字2的ASC码(1005H)=23H(1006H)=44H(1007H)=41HDAY 的ASC码(1008H)=59H,3、定义字DW或DEFW,标号:DW 项或项表 DW的基本含义与DB相同,但DB一般用于定义8位数据(一个字节),而DW则定义16位数据,即一个字(规定为两个字节,即一个字为16位二进制数)。在执行汇编程序时,机器会自动按高位字节在前,低位字节在后的

4、格式排列(与程序中的地址规定一致)。例:ABC:DW 1234H,08H ABC:DB 12H,34H,00H,08H上两条指令是等价的。,4、为标号赋值EQU,标号:EQU nn或表达式其功能是将语句操作数的值赋于本语句的标号。故又称为等值指令。如:BLK:EQU 1000H 即给标号BLK赋以地址值1000H。需要注意的是,在同一程序中,用EQU伪指令对标号赋值后,该标号的值在整个程序中不能再改变。,5DATA指令,格式:符号名 DATA 表达式 DATA 指令用于将一个内部 RAM 的地址赋给指定的符号名。数值表达式的值在00H0FFH之间,表达式必须是一个简单表达式。如:BUFFER

5、DATA 40H,6XDATA指令(Extenal Data),格式:符号名 XDATA 表达式 XDATA 指令用于将一个外部 RAM 的地址赋给指定的符号名。数值表达式的值在0000H0FFFFH之间,对于STC12C5410AD单片机,片内集成了256字节的XRAM,地址范围是0000H00FFH。表达式必须是一个简单表达式。如:MYDATA XDATA 0020H,7定义位命令BIT,格式:字符名称 BIT 位地址 用于给字符名称定义位地址。如:DOGOUT BIT P3.4 经定义后,允许在指令中用DOGOUT代替P3.4。DATA、BIT命令可以使用EQU代替,例如,下面的两条命令

6、是等价的:TCONDATA 88H;中断优先级高位寄存器 TCONEQU 88H;中断优先级高位寄存器 下面的两条命令也是等价的:TF1BIT8FH;TF1的位地址位8FH TF1EQUTCON.7;TF1为TCON的第7位,8、文件包含命令INCLUDE,文件包含命令INCLUDE用于将寄存器定义文件(一般的后缀名为.INC)包含于当前程序中,与C语言中的#include语句类似。使用格式为:$INCLUDE(文件名)例如,为了使用方便,作者把STC12C5410AD单片机的寄存器定义保存在文件STC12.INC中,使用时,可以在程序的开始处使用下面的命令将其包含到用户程序中:$INCLUD

7、E(STC12.INC);包含寄存器定义文件 使用上述命令后,在用户程序中就可以直接使用STC12C5410AD单片机的寄存器名称了。,9、源程序结束 END,标号:END 表达式 END语句是一个结束标志,它告诉汇编程序,该程序段已结束。因此,该语句必须放在整个程序(包括伪指令)之后。若END语句出现在代码块中间,则汇编程序将不汇编END后面的语句。,5.1.2 汇编语言程序设计的一般步骤和基本框架,1、汇编语言程序设计的一般步骤,1)分析课题,确定算法或解题思路;2)根据算法或思路画出流程图;3)根据流程图编写程序;4)上机调试源程序,进而确定源程序。,2、STC12C5410AD单片机汇

8、编语言程序的设计框架:,ORG0000H LJMP MAIN;跳转到主程序 ORG0003H LJMP X0_ISR;外部中断0入口 ORG000BH LJMP T0_ISR;定时器0中断入口 ORG0013H LJMP X1_ISR;外部中断1入口 ORG001BH LJMP T1_ISR;定时器1中断入口 ORG0023H LJMP UART_ISR;串行通信中断入口 ORG002BH LJMP ADCSPI_ISR;ADC_SPI中断服务程序入口 ORG0033H LJMP PCA_ISR;PCA中断服务程序入口 ORG0100HMAIN:MOVSP,#70H;设置堆栈指针;初始化内存区

9、域内容;设置有关SFR的控制字;开放相应的中断控制MAINLOOP:;主程序循环 LJMP MAINLOOP,;下面是各个中断服务子程序的入口X0_ISR:;外部中断0服务子程序;根据需要填入适当的内容 RETIX1_ISR:;外部中断1服务子程序;根据需要填入适当的内容 RETIT0_ISR:;定时器0中断服务子程序;根据需要填入适当的内容 RETIT1_ISR:;定时器1中断服务子程序;根据需要填入适当的内容 RETIUART_ISR:;串行通信中断服务子程序;根据需要填入适当的内容 RETIADCSPI_ISR:;ADC和SPI通信中断服务子程序;根据需要填入适当的内容 RETIPCA_

10、ISR:;PCA和PWM中断服务子程序;根据需要填入适当的内容 RETI;下面可以编写其他子程序或者使用DB定义程序中所用的常数END,5.2 汇编语言程序设计举例,例1 延时程序(时钟为6MHz)入口:设延时时间N(以毫秒为单位)送入R0。出口:延时到,退出程序,无参数传递。DELAY:MOV A,#240;当时钟为6MHz,A计数到240,约延时0.2msLOOP:DEC A JNZ LOOP DJNZ R0,DELAY RET,例2 多字节无符号加法子程序入口:被加数低字节地址在R0,加数低字节地址在R1,字节数在R2。出口:和的低字节地址在R0,字节数在R3。MPADD:PUSH PS

11、W;保护标志寄存器内容。CLR C;进位为清零 MOV R3,#00H ADD10:MOV A,R0;相加 ADDC A,R1 MOV R0,A INC R0;地址值增1 INC R1 INC R3;字节数增1 DJNZ R2,ADD10;所有字节未加完继续。JNC ADD20;无进位去ADD20。MOV R0,#01;和最高字节地址内容为01H INC R3;字节数增1ADD20:POP PSW;恢复标志寄存器内容 RET;返主,其他编程实例,请参见教材,5.3 利用Keil uVision2集成开发环境调试程序,5.3.1 Keil uVision2集成开发环境简介 Keil uVisio

12、n2 集成开发环境(IDE,以下简称uVision2)是一个基于Windows的开发平台,包含高效的编辑器、项目管理器和MAKE工具。uVision2支持所有的KEIL 8051工具,包括C编译器、宏汇编器连接/定位器、目标代码、到HEX的转换器。uVision2通过以下特性加速嵌入式系统(单片机应用系统)的开发过程:全功能的源代码编辑器器件库用来配置开发工具设置项目管理器用来创建和维护项目 集成的MAKE工具可以汇编编译和连接用户的嵌入式应用所有开发工具的设置都是对话框形式的真正的源代码级的对CPU和外围器件的调试器高级GDIAGDI接口用来在目标硬件上进行软件调试以及和Monitor-51

13、进行通信与开发工具手册和器件数据手册和用户指南有直接的链接,Keil uVision2的安装,5.3.2 Keil uVision2集成开发环境中调试单片机汇编语言程序的方法 uVision2集成开发环境中包括一个项目管理器,它可以使单片机应用系统设计变得简单。要创建一个应用,需要按下列步骤进行操作:1)启动uVision2,新建一个项目文件并从器件库中选择一个器件 2)新建一个源文件并把它加入到项目中 3)针对目标硬件设置工具选项 4)编译项目并生成可以编程到程序存储器的HEX文件 5)下载到单片机中进行仿真调试,1.启动uVision2并创建一个项目,新建一个项目文件,单片机型号,选择单片

14、机型号,拷贝启动代码提示,选择的CPU配置文件创建一个文件组,2新建一个源文件并把它加入到项目中,新文件内容见下页,【例5-1】假设晶振频率为6MHz。将片内RAM30H3FH单元的内容清零,然后循环从P1.0输出10ms方波。ORG0000HLJMPMAINORG0100HMAIN:MOVSP,#70H;设置堆栈指针MOVR0,#30HMOVR2,#10HCLRALOOP1:MOVR0,AINCR0DJNZR2,LOOP1;将30H3FH单元的内容清零SETBP1.0LOOP2:CPLP1.0LCALLDELAYLJMPLOOP2;输出方波DELAY:;10ms延时子程序MOVR2,#50D

15、LY_LOOP:MOVA,#240LOOP:DECAJNZLOOPNOPDJNZR2,DLY_LOOPRETEND,保存文件,输入文件名,加入源程序文件到项目中,选择文件类型,选择文件类型,然后选择文件,3针对目标硬件设置工具选项,4.编译项目并生成可以编程到程序存储器的HEX文件,自动填入与工程名相通的HEX文件名,选中“Create HEX File”复选框,1)设置编译选项,设置生成HEX文件,2)编译失败时的提示,双击错误信息行,可进行错误定位,出错的行,3)编译成功时的提示,5对程序进行软件模拟调试或者下载到单片机中进行仿真调试,选择软件模拟调试功能,从“Debug”菜单中选择“St

16、art/Stop debug session”菜单项(快捷键是Ctrl+F5),或者从工具条中单句“Start/Stop debug session”按钮,,开始模拟调试过程。,掌握常见的调式技术(连续运行、单步运行、单步跳过运行程序、运行到光标所在行、设置断点、存储器查看、查看变量、查看外围等),设置断点的菜单项,存储器查看窗口,片内RAM存储器查看窗口,P1口的观察窗口,“Watch”窗口,5.4 利用ISP工具将程序下载到单片机中验证程序 1.ISP下载程序的运行过程,2.使用ISP工具下载程序的步骤,启动ISP软件,下载程序时,可以按照下面的步骤进行:(1)从“MCU Type”下拉框

17、中选择所使用的单片机的型号,如选择STC12C5410AD。(2)单击“OpenFile/打开文件”按钮打开要下载的用户程序文件。用户程序文件的后缀名为.bin或者.hex。第一次装入文件进缓冲区时,要选中“打开文件前清0缓冲区”复选框,以清缓冲区。如果要装入几个文件进缓冲区,如EEPROM里的数据文件需要和应用程序文件同时下载进单片机时,除每次均要指定缓冲区起始地址外,第二次及以后不能清缓冲区。例如将要写入EEPROM区的数据文件装入从缓冲区2800H或1000H开始的地方,并不清缓冲区,然后和应用程序一起写入。(3)在“COM”下拉框中选择计算机所用的串行口,如COM1、COM2等。有些新

18、式笔记本电脑没有RS-232串行口,可买一条USB-RS232转接电缆(但不一定所有的电缆都能兼容可用,需要进行测试,作者可以帮助读者进行测试,或者直接从作者处邮购)。选择串行口后,根据实际使用效果,从“最高波特率”下拉框中选择限制最高通信波特率,如57600、38400或者19200等。,(4)进行时钟源的选择、启动下载的条件以及设置数据Flash区是否清零。时钟源选择:选择下次冷启动后,时钟源为“内部R/C振荡器”还是“外部晶体或时钟”。启动下载的条件:如果用户系统的P3.0和P3.1连接到了RS-485电路,推荐选择“下次冷启动P1.0/P1.1 等于0,0才可以下载程序”,这样冷启动后

19、如P1.0和P1.1不同时为0,单片机直接运行用户程序,免得由于RS-485总线上的乱码造成单片机反复判断乱码是否为合法,浪费几百ms的时间。实际上,如果用户系统本身P3.0和P3.1就是做串行口使用,也建议选择“下次冷启动P1.0/P1.1 等于0,0才可以下载程序”,以便下次冷启动直接运行用户程序。“下次下载用户用用程序时将数据Flash区一并清0”选项用于选择是否在下载用户程序时,将数据Flash区清零,默认设置是“NO”。(5)单击“Download/下载”按钮,将用户程序下载到单片机内部。重复下载时,可重复执行该操作,也可单击“Re-Download/重复下载”按钮。,注意:,下载时

20、,一定要先单击“Download/下载”按钮,然后再给单片机上电复位(先彻底断电),而不要先给单片机上电。如果先给单片机上电,单片机检测不到合法的下载命令流,单片机就直接运行用户程序了。下载完成后,请将单片机的供电电源断开(有时需要稍等片刻,以将电源滤波电容存储的电释放),然后重新给单片机上电,新的设置才会生效,并执行用户程序。,5.5 思考题有4个两位BCD数以压缩形式存入30H、31H、32H和33H单元,将它们转换成ASC码分别保存在40H开始单元中。试编程实现之并在Keil uVision2集成开发环境中进行模拟调试,观察运行结果。试编制多字节BCD码加法程序。试编制一排序子程序,对RAM区40H49H单元中的无符号数按从大到小顺序排序。利用Keil uVision2集成开发环境中进行模拟调试,观察运行结果。编写一乘法程序,实现两双字节数的乘法运算。将存于外部RAM中的1000H单元的字节二进制数(假定其值小于64H)转换为十进制数,以两位BCD码的形式存与内部RAM的20H单元中。利用Keil uVision2集成开发环境中进行模拟调试,观察运行结果。分别编写延时1ms、100ms的子程序。设单片机的晶振为12MHz。,

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 生活休闲 > 在线阅读


备案号:宁ICP备20000045号-2

经营许可证:宁B2-20210002

宁公网安备 64010402000987号