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

上传人:za****8 文档编号:16592769 上传时间:2020-10-17 格式:PPT 页数:39 大小:435.50KB
返回 下载 相关 举报
汇编语言程序设计及仿真调试.ppt_第1页
第1页 / 共39页
汇编语言程序设计及仿真调试.ppt_第2页
第2页 / 共39页
汇编语言程序设计及仿真调试.ppt_第3页
第3页 / 共39页
点击查看更多>>
资源描述
1/39 增强型 8051单片机实用开发技术 4.2.1 伪指令 一般来说,在汇编语言源程序中用指令助记符编写 的程序,都可以一一对应的产生目标程序。但还有一些 指令,例如指定目标程序或数据存放的起始地址,给一 些指定的标号赋值,在内存中予留工作单元,表示源程 序结束等等。这些指令并不产生目标程序,不影响程序 的执行,仅仅产生供汇编用的某些指令,以便在汇编时 执行一些特殊操作,称之为伪指令。 4.2 汇编语言程序设计 2/39 增强型 8051单片机实用开发技术 1、设置起始地址 ORG ORG nn ORG伪指令总是出现在每段源程序或数据块的开始。它可使程序 员把程序、子程序或数据块存放在存贮器的任何位置。 ORG 0000H LJMP MAIN 在实际应用中,一般仅设置中断服务子程序的入口地址和主程序 的起始存放地址,其他的程序或常数依次存放即可,汇编程序会自动 进行存储空间的分配。 2、定义字节 DB或 DEFB 标号: DB 项或项表 其中项或项表是指一个字节,数或字符串,或以引号括起来的 ASC 码字符 串(一个字符用 ASC 码表示,相当于一个字节)。该指令的功能是把项或项 表的数值(字符则用它的 ASC 码)存入从标号开始的连续单元中。 3/39 增强型 8051单片机实用开发技术 常用 DB命令在程序存储器中存放数据表格,例如存放数码管显示的十六进制数的字 形码(或称为字模)。例如,共阳极 LED显示字模表如下: LEDCode: DB 0C0H ; 0 DB 0F9H ; 1 DB 0A4H ; 2 DB 0B0H ; 3 DB 099H ; 4 DB 092H ; 5 DB 082H ; 6 DB 0F8H ; 7 DB 080H ; 8 DB 090H ; 9 DB 088H ; A DB 083H ; B DB 0C6H ; C DB 0A1H ; D DB 086H ; E DB 08EH ; F 访问表格常数时,常用 MOVC A, A+DPTR指令。 4/39 增强型 8051单片机实用开发技术 3、为标号赋值 EQU 标号: EQU 项或汇编符号 其功能是将一个数或特定的汇编符号赋给语句中的字符名称。 注意,字符名称为一自定的符号,而不是标号,字符名称后无 “:”。字符名称可用来作数据地址、立即数或者位地址,其值可 以是一个 8位数,也可以是 16位数。 使用 EQU伪指令可以把抽象的数字或地址表示成有一定意义的 符号,增强程序的可读性。需要注意的是,在同一程序中,用 EQU 伪指令对标号赋值后,该标号的值在整个程序中不能再改变。 4、 DATA指令 格式: 符号名 DATA 表达式 DATA 指令用于将一个内部 RAM 的地址赋给指定的符号名。 数值表达式的值在 00H 0FFH之间,表达式必须是一个简单表达 式。如: BUFFER DATA 40H 5/39 增强型 8051单片机实用开发技术 5、 XDATA指令 (Extenal Data) 格式: 符号名 XDATA 表达式 XDATA 指令用于将一个外部 RAM 的地址赋给指定的符号名。 数值表达式的值在 0000H 0FFFFH之间,对于 STC12C5A60S2单片 机,片内集成了 1024字节的 XRAM,地址范围是 0000H03FFH。 表 达式必须是一个简单表达式。如: MYDATA XDATA 0020H 6/39 增强型 8051单片机实用开发技术 6、定义位命令 BIT 格式: 字符名称 BIT 位地址 用于给字符名称定义位地址。如: DOGOUT BIT P3.4 经定义后,允许在指令中用 DOGOUT代替 P3.4。 DATA、 BIT命令可以使用 EQU代替,例如,下面的两条命令 是等价的: TCON DATA 88H ;中断优先级高位寄存器 TCON EQU 88H ;中断优先级高位寄存器 下面的两条命令也是等价的: TF1 BIT 8FH ;TF1的位地址位 8FH TF1 EQU TCON.7 ;TF1为 TCON的第 7位 7/39 增强型 8051单片机实用开发技术 7、 文件包含命令 INCLUDE 文件包含命令 INCLUDE用于将寄存器定义文件(一般的后缀名 为 .INC)包含于当前程序中,与 C语言中的 #include语句类似。使用 格式为: $INCLUDE (文件名 ) 例如,为了使用方便,作者把 STC12C5A60S2D单片机的寄存器 定义保存在文件 STC12C5A.INC中,使用时,可以在程序的开始处使 用下面的命令将其包含到用户程序中: $INCLUDE (STC12C5A.INC) ;包含寄存器定义文件 使用上述命令后,在用户程序中就可以直接使用 STC12C5A60S2 单片机的寄存器名称了。例如, MOV BRT,#0FBH ;设置独立波特率发生器的时间常数 8/39 增强型 8051单片机实用开发技术 8、 条件汇编控制指令 条件汇编控制指令的作用是使源程序中的一部分程序行根据需 要决定是否进行汇编。条件汇编控制伪指令的一般格式 : IF 表达式 程序块 1 ELSE 程序块 2 ENDIF 9、源程序结束 END 标号: END 表达式 END语句是一个结束标志 , 它告诉汇编程序 , 该程序段已结束 。 因此 , 该语句必须放在整个程序 ( 包括伪指令 ) 之后 。 9/39 增强型 8051单片机实用开发技术 4.2.2 汇编语言程序设计的一般步骤和基本框架 1、汇编语言程序设计的一般步骤 ( 1)分析课题,确定算法或解题思路; ( 2)根据算法或思路画出流程图; ( 3)根据算法要求分配资源,包括内部 RAM、定时器、中断等资源的分配。 ( 4)根据流程图编写程序; ( 5)不断调试并修改源程序,直到满足系统的要求。 10/39 增强型 8051单片机实用开发技术 2、 STC12C5A60S2单片机 汇编语言程序的设计框架: $INCLUDE (STC12C5A.INC) ;包含 STC12C5A60S2单片机寄存器定义头文件 ;这里可以编写程序中用到的一些符号定义(使用 EQU、 DATA、 BIT等伪指令) ORG 0000H LJMP MAIN ;跳转到主程序 ORG 0003H LJMP INT0_ISR ;外部中断 0入口 ORG 000BH LJMP T0_ISR ;定时器 0中断入口 ORG 0013H LJMP INT1_ISR ;外部中断 1入口 ORG 001BH LJMP T1_ISR ;定时器 1中断入口 ORG 0023H LJMP UART1_ISR ;串口 1中断入口 ORG 002BH LJMP ADC_ISR ;ADC中断服务程序入口 ORG 0033H LJMP LVD_ISR ;低电压检测中断服务程序入口 ORG 003BH LJMP PCA_ISR ;PCA中断服务程序入口 ORG 0043H LJMP UART2_ISR ;串口 2中断服务程序入口 ORG 004BH LJMP SPI_ISR ;SPI中断服务程序入口 ORG 0100H MAIN: MOV SP,#70H ;设置堆栈指针(可根据实际情况进行修改) ; 初始化内存区域内容 ; 设置有关特殊功能寄存器( SFR)的控制字 ; 根据需要开放相应的中断控制 MAINLOOP: ;主程序循环 LJMP MAINLOOP 11/39 增强型 8051单片机实用开发技术 ;下面是各个中断服务子程序的入口 INT0_ISR: ;外部中断 0服务子程序 ; 根据需要填入适当的内容 RETI INT1_ISR: ;外部中断 1服务子程序 ; 根据需要填入适当的内容 RETI T0_ISR: ;定时器 0中断服务子程序 ; 根据需要填入适当的内容 RETI T1_ISR: ;定时器 1中断服务子程序 ; 根据需要填入适当的内容 RETI UART1_ISR: ;串口 1中断服务子程序 ; 根据需要填入适当的内容(注意中断请求标志位的清零) RETI UART2_ISR: ;串口 2中断服务子程序 ; 根据需要填入适当的内容(注意中断请求标志位的清零) RETI 12/39 增强型 8051单片机实用开发技术 ADC_ISR: ;ADC中断服务子程序 ; 根据需要填入适当的内容(注意中断请求标志位的清零) RETI SPI_ISR: ;SPI通信中断服务子程序 ; 根据需要填入适当的内容(注意中断请求标志位的清零) RETI LVD_ISR: ;低电压检测服务子程序 ; 根据需要填入适当的内容(注意中断请求标志位的清零) RETI PCA_ISR: ;PCA和 PWM中断服务子程序 ; 根据需要填入适当的内容(注意中断请求标志位的清零) RETI ;下面可以编写其他子程序或者定义程序中所用的常数 END 13/39 增强型 8051单片机实用开发技术 4.3 典型汇编语言程序设计举例 【 例 4-1】 编程实现下面的比较函数。设变量 x存放在 R0,求得的 y值存入 SIGN单 元。 +1 x37 y = -1 x37 0 x=37 解:可以利用 CJNE指令和进位位 C状态控制转移( JC指令)来实现三分支转移。源程序如下: SIGN EQU 50H ORG 0000H LJMP MAIN ORG 0100H MAIN: CJNE R0,#37,NOTEQ ;R0中数与 37数比较,不相等则转 NOTEQ MOV SIGN,#00H ;若比较相等 ,则 SIGN0 LJMP ENDME NOTEQ: JC NEG ;两数不相等 ,若 R0 37则转 NEG MOV SIGN,#01H ;R0 37时 ,SIGN+1 LJMP ENDME NEG: MOV SIGN,#0FFH ;R0 37时 ,SIGN -1(以补码形式给出) ENDME: NOP END 1、分支程序设计 14/39 增强型 8051单片机实用开发技术 所谓查表法,就是把事先计算或测得的数据按一定顺序编制成表格,查 表程序根据被测参数的值或者中间结果,查出最终所需要的结果。它具有程 序简单,执行速度快等优点。 查表程序在计算机控制系统中应用非常广泛。例如,在键盘处理程序中, 查找按键相应的命令处理子程序的入口地址;在 LED显示程序中,获得 LED 数码管的显示代码;在一些快速计算的场合,根据自变量的值,从函数表上 查找出相应的函数值以及实现非线性修正、代码转换等等。 常用 MOVC A, A DPTR查找程序存储器空间的代码或常数,每次传 送一个字节。 2、 查表程序设计 15/39 增强型 8051单片机实用开发技术 当程序处理的对象具有重复性规律时,可以使用循环程序设计。一个循 环表示重复执行一组指令(程序段)。 3、 循环程序设计 初始化部分 处理部分 循环控制部分 循环次数是否已够? 结束 开始 N Y 16/39 增强型 8051单片机实用开发技术 例 1 延时程序(时钟为 6MHz ) 入口:设延时时间 N(以 0.1ms为单位)送入 R0。 出口:延时到,退出程序,无参数传递。 DELAY: MOV R7,#150 ;当时钟为 6MHz时,约延时 0.1ms LOOP: DJNZ R7,LOOP DJNZ R0,DELAY RET 17/39 增强型 8051单片机实用开发技术 ( 1)多字节十进制 BCD码减法 入口:被减数低字节地址存放于 R1,减数低字节地址存放于 R0,字节数存放于 R2。 出口:差(补码)的低字节地址存放于 R0,字节数存放于 R3。 07H为符号位。 0表示结果为正, 1表示结果为负。 SUBCD: MOV R3,#00H ;差字节数置 0 CLR 07H ;符号位清 0 CLR C ;借位位 C清 0 SUBCD1: MOV A,#9AH SUBB A,R0 ;相差 ADD A,R1 DA A MOV R0,A INC R0 ;地址值增 1 INC R1 INC R3 ;差字节增 1 CPL C ;进位求反,以形成正确借位 DJNZ R2,SUBCD1 ;未减完继续,减完向下执行 JNC SUBCD2 ;无借位去 SUBCD2返主,否则继续 SETB 07H ;差为负置“ 1”符号位 SUBCD2: RET ;返回 其他编程实例,请参见教材 4、定点数运算子程序 18/39 增强型 8051单片机实用开发技术 4.4 利用 Keil uVision集成开发环境调试程序 4.4.1 Keil uVision集成开发环境简介 Keil uVision 集成开发环境( IDE, 以下简称 uVision) 是一个基于 Windows的开 发平台,包含高效的编辑器、项目管理器和 MAKE工具。 uVision支持所有的 KEIL 8051 工具,包括 C编译器、宏汇编器连接 /定位器、目标代码、到 HEX的转换器。 uVision通 过以下特性加速嵌入式系统(单片机应用系统)的开发过程: 全功能的源代码编辑器 器件库用来配置开发工具设置 项目管理器用来创建和维护项目 集成的 MAKE工具可以汇编编译和连接用户的嵌入式应用 所有开发工具的设置都是对话框形式的 真正的源代码级的对 CPU和外围器件的调试器 高级 GDIAGDI接口用来在目标硬件上进行软件调试以及和 Monitor-51进行通信 与开发工具手册和器件数据手册和用户指南有直接的链接 19/39 增强型 8051单片机实用开发技术 安装完成后的界面 20/39 增强型 8051单片机实用开发技术 安装授权的方法是,在“ File”菜单中选择“ License Management.”菜单 项,弹出“ License Management”对话框 在这里输入授权号 根据这个号码,向经销商索取授权号 21/39 增强型 8051单片机实用开发技术 4.4.2 Keil uVision集成开发环境中调试单片机汇编语言程 序的方法 uVision集成开发环境中包括一个项目管理器,它可以 使单片机应用系统设计变得简单。要创建一个应用,需要 按下列步骤进行操作: 1)启动 uVision, 新建一个项目文件并从器件库中选择 一个器件 2)新建一个源文件并把它加入到项目中 3)针对目标硬件设置工具选项 4)编译项目并生成可以编程到程序存储器的 HEX文件 5)下载到单片机中进行仿真调试 22/39 增强型 8051单片机实用开发技术 1.启动 uVision2并创建一个项目 新建一个项目文件 23/39 增强型 8051单片机实用开发技术 选择单片机型号 选择单片机型号 拷贝启动代码提示 24/39 增强型 8051单片机实用开发技术 2新建一个源文件并把它加入到项目中 新文件内容见下页 25/39 增强型 8051单片机实用开发技术 【例 4-4】 假设晶振频率为 6MHz。将 STC2C5A60S2单片机片内集成的外 部 RAM 0000H 000FH单元的内容清零,然后循环从 P1.0输出 10ms方波。 $INCLUDE (STC12C5A.INC) ;包含 STC12C5A60S2单片机寄存器定义文件 ORG 0000H LJMP MAIN ORG 0100H MAIN: MOV SP,#70H ;设置堆栈指针 MOV DPTR,#0000H MOV R2,#10H CLR A LOOP1: MOVX DPTR,A INC DPTR DJNZ R2,LOOP1 ;将 XRAM 0000H000FH单元的内容清零 SETB P1.0 LOOP2: CPL P1.0 LCALL DELAY LJMP LOOP2 ;输出方波 DELAY: MOV R2,#100 ;10ms延时子程序 DLY_LOOP: MOV R7,#150 LOOP: DJNZ R7,LOOP DJNZ R2,DLY_LOOP RET END 26/39 增强型 8051单片机实用开发技术 保存文件 输入文件名 27/39 增强型 8051单片机实用开发技术 加入源程序文件到项目中 选择文件类型, 然后选择文件 加入文件到 源程序组 选择文件类型 28/39 增强型 8051单片机实用开发技术 3针对目标硬件设置工具选项 在此设置使用 晶振的频率 29/39 增强型 8051单片机实用开发技术 4. 编译项目并生成可以编程到程序存储器的 HEX文件 自动填入与工程名相 通的 HEX文件名 选中 “ Create HEX File”复选框 1)设置编译选项,设置生成 HEX文件 30/39 增强型 8051单片机实用开发技术 2)编译失败时的提示 双击错误信息行, 可进行错误定位 出错的行 3)编译成功时的提示 31/39 增强型 8051单片机实用开发技术 5对程序进行软件模拟调试或者下载到单片机中进行仿真调试 选择软件模 拟调试功能 从“ Debug”菜单中选择“ Start/Stop debug session”菜单项(快捷键是 Ctrl+F5), 或者从工具条中单句“ Start/Stop debug session”按钮 ,开始模拟调试过程。 掌握常见的调式技术(连续运行、单步运行、单步跳过运行程序 、运行到光 标所在行 、设置断点 、存储器查看、查看变量、查看外围等) 32/39 增强型 8051单片机实用开发技术 设置断点的菜单项 存储器查看窗口 插入 /删除断 点菜单项 33/39 增强型 8051单片机实用开发技术 外部 RAM存储器查看窗口 P1口的观察窗口 “ Watch”窗口 34/39 增强型 8051单片机实用开发技术 4.5 利用 ISP工具将程序下载到单片机中验证程序 1. ISP下载程序的运行过程 单片机彻底没电 单片机上电,冷启动 Y N P3.0/RXD有合法 下载命令流? 下载用户程序 到用户程序区 软复位到用户程序 区,运行用户程序 单片机运行 系统ISP 监控程序 35/39 增强型 8051单片机实用开发技术 2. 使用 ISP工具下载程序的步骤 启动 ISP软件 用户根据实际使用效果选择 限制最高通信波特率,如 57600, 38400, 19200 开发调试时,可考虑选择此项 图 4-26 ISP工具启动后的界面 36/39 增强型 8051单片机实用开发技术 下载程序时,可以按照下面的步骤进行: ( 1)从“ MCU Type”下拉列表框中选择所使用的单片机的型号,如选择 STC12C5A60S2。 ( 2)单击“ OpenFile/打开文件”按钮,打开要下载的用户程序文件。用户程序 文件的后缀名为 .bin或者 .hex。 第一次装入文件进缓冲区时,要选中“打开文件前清 0缓冲区”复选框, 以清缓冲区。如果要装入几个文件进缓冲区,如 EEPROM里的数据文件需要 和应用程序文件同时下载到单片机中时,除每次均要指定缓冲区起始地址外, 第二次及以后不能清缓冲区。 ( 3)在 COM下拉列表框中选择计算机所用的串行口,如 COM1、 COM2等。有些 新式笔记本电脑没有 RS-232串行口,可买一条 USB-RS232转接电缆(在作 者设计的学习套件中,已经将 USB-RS232转换功能集成到学习板上,用户不 必再考虑转换问题)。 选择串行口后,根据实际使用效果,从“最高波特率”下拉框中选择 限制最高通信波特率,如 57600、 38400或者 19200等。 37/39 增强型 8051单片机实用开发技术 ( 4)进行时钟源的选择、启动下载的条件以及设置数据 Flash区是否清零。 时钟源选择:选择下次冷启动后,时钟源为“内部 R/C振荡器” 还是“外部晶体或时钟”。 启动下载的条件:如果用户系统的 P3.0和 P3.1连接到了 RS-485电 路,推荐选择“下次冷启动 P1.0/P1.1 等于 0,0才可以下载程序”,这样 冷启动后如 P1.0和 P1.1不同时为 0,单片机直接运行用户程序,免得由于 RS-485总线上的乱码造成单片机反复判断乱码是否为合法,浪费几百 ms的时间。实际上,如果用户系统本身 P3.0和 P3.1就是做串行口使用, 也建议选择“下次冷启动 P1.0/P1.1 等于 0,0才可以下载程序”,以便下 次冷启动直接运行用户程序。 “下次下载用户用用程序时将数据 Flash区一并擦除”选项用于 选择是否在下载用户程序时,将数据 Flash区清零,默认设置是“ NO”。 此外,这一步还包括:复位引脚的设置(主要是针对 P4.7的设 置)、上电复位是否增加额外的复位延时以及振荡器放大增益的设置。 ( 5)在右下角的“选项”区域中,用户可以将 P4.6脚设置为第二复位脚,时 钟频率高于 12MHz时,建议使用第二复位功能脚。也可以进行看门口的 设置。 ( 6)单击“ Download/下载”按钮,将用户程序下载到单片机内部。重复下 载时,可重复执行该操作,也可单击“ Re-Download/重复下载”按钮。 38/39 增强型 8051单片机实用开发技术 注意: 下载时,一定要先单击“ Download/下载”按钮,然后再给单片机上电复位 (先彻底断电),而不要先给单片机上电。如果先给单片机上电,单片机检测不 到合法的下载命令流,单片机就直接运行用户程序了。 下载完成后,请将单片机的供电电源断开(有时需要稍等片刻,以将电源滤 波电容存储的电释放),然后重新给单片机上电,新的设置才会生效,并执行用 户程序。 39/39 增强型 8051单片机实用开发技术 1 有 4个两位 BCD数以压缩形式存入 30H、 31H、 32H和 33H单元,将它们转换成 ASC 码分别保存在 40H开始单元中。试编程实现之并在 Keil uVision集成开发环 境中进行模拟调试,观察运行结果。 2 试编制多字节 BCD码加法程序。 3 试编制一排序子程序,对 RAM区 40H 49H单元中的无符号数按从大到小顺序排序。 利用 Keil uVision集成开发环境中进行模拟调试,观察运行结果。 4 试编写二进制数转成 BCD码的子程序。 5 将存于外部 RAM中的 0010H单元的 1字节二进制数(假定其值小于 64H)转换为十 进制数,以两位 BCD码的形式存与内部 RAM的 20H单元中。利用 Keil uVision集成 开发环境中进行模拟调试,观察运行结果。 6 分别编写延时 1ms、 100ms的子程序。设单片机的晶振为 12MHz。 7 采用不同指令编程实现内部 RAM区 40H, 41H两单元数据互换。 8 两位 BCD数以压缩形式存入 30H单元,试编程将其转换成 ASC 码分别保存在 40H、 41H单元中。 9 试编制一温度 A/D采样标度转换程序。 A/D采样为 8位,温度范围: 0 70 。 4.6 思考题
展开阅读全文
相关资源
相关搜索

最新文档


当前位置:首页 > 图纸专区 > 课件教案


copyright@ 2023-2025  zhuangpeitu.com 装配图网版权所有   联系电话:18123376007

备案号:ICP2024067431-1 川公网安备51140202000466号


本站为文档C2C交易模式,即用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知装配图网,我们立即给予删除!