增强型8051单片机实用开发技术教案第4章节汇编语言程序设计及仿真调试2章节

上传人:w****i 文档编号:91978449 上传时间:2019-07-05 格式:PPT 页数:39 大小:433.50KB
返回 下载 相关 举报
增强型8051单片机实用开发技术教案第4章节汇编语言程序设计及仿真调试2章节_第1页
第1页 / 共39页
增强型8051单片机实用开发技术教案第4章节汇编语言程序设计及仿真调试2章节_第2页
第2页 / 共39页
增强型8051单片机实用开发技术教案第4章节汇编语言程序设计及仿真调试2章节_第3页
第3页 / 共39页
增强型8051单片机实用开发技术教案第4章节汇编语言程序设计及仿真调试2章节_第4页
第4页 / 共39页
增强型8051单片机实用开发技术教案第4章节汇编语言程序设计及仿真调试2章节_第5页
第5页 / 共39页
点击查看更多>>
资源描述

《增强型8051单片机实用开发技术教案第4章节汇编语言程序设计及仿真调试2章节》由会员分享,可在线阅读,更多相关《增强型8051单片机实用开发技术教案第4章节汇编语言程序设计及仿真调试2章节(39页珍藏版)》请在金锄头文库上搜索。

1、4.2.1 伪指令,一般来说,在汇编语言源程序中用指令助记符编写的程序,都可以一一对应的产生目标程序。但还有一些指令,例如指定目标程序或数据存放的起始地址,给一些指定的标号赋值,在内存中予留工作单元,表示源程序结束等等。这些指令并不产生目标程序,不影响程序的执行,仅仅产生供汇编用的某些指令,以便在汇编时执行一些特殊操作,称之为伪指令。,4.2 汇编语言程序设计,1、设置起始地址ORG,ORG nn ORG伪指令总是出现在每段源程序或数据块的开始。它可使程序员把程序、子程序或数据块存放在存贮器的任何位置。 ORG 0000H LJMP MAIN 在实际应用中,一般仅设置中断服务子程序的入口地址和

2、主程序的起始存放地址,其他的程序或常数依次存放即可,汇编程序会自动进行存储空间的分配。,2、定义字节DB或DEFB,标号: DB 项或项表 其中项或项表是指一个字节,数或字符串,或以引号括起来的ASC码字符串(一个字符用ASC码表示,相当于一个字节)。该指令的功能是把项或项表的数值(字符则用它的ASC码)存入从标号开始的连续单元中。,常用DB命令在程序存储器中存放数据表格,例如存放数码管显示的十六进制数的字形码(或称为字模)。例如,共阳极LED显示字模表如下: LEDCode: DB 0C0H ; 0 DB 0F9H ; 1 DB 0A4H ; 2 DB 0B0H ; 3 DB 099H ;

3、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指令。,3、为标号赋值EQU,标号: EQU 项或汇编符号 其功能是将一个数或特定的汇编符号赋给语句中的字符名称。注意,字符名称为一自定的符号,而不是标号,字符名称后无“:”。字符名称可用来作数据地址、立即数或者位地址,其值可以是一个8位数,也可以是16位数。 使用EQU伪指令可以把

4、抽象的数字或地址表示成有一定意义的符号,增强程序的可读性。需要注意的是,在同一程序中,用EQU伪指令对标号赋值后,该标号的值在整个程序中不能再改变。,4、DATA指令,格式: 符号名 DATA 表达式 DATA 指令用于将一个内部 RAM 的地址赋给指定的符号名。 数值表达式的值在00H0FFH之间,表达式必须是一个简单表达式。如: BUFFER DATA 40H,5、XDATA指令(Extenal Data),格式: 符号名 XDATA 表达式 XDATA 指令用于将一个外部 RAM 的地址赋给指定的符号名。 数值表达式的值在0000H0FFFFH之间,对于STC12C5A60S2单片机,片

5、内集成了1024字节的XRAM,地址范围是0000H03FFH。表达式必须是一个简单表达式。如: MYDATA XDATA 0020H,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为

6、TCON的第7位,7、文件包含命令INCLUDE,文件包含命令INCLUDE用于将寄存器定义文件(一般的后缀名为.INC)包含于当前程序中,与C语言中的#include语句类似。使用格式为: $INCLUDE (文件名) 例如,为了使用方便,作者把STC12C5A60S2D单片机的寄存器定义保存在文件STC12C5A.INC中,使用时,可以在程序的开始处使用下面的命令将其包含到用户程序中: $INCLUDE (STC12C5A.INC) ;包含寄存器定义文件 使用上述命令后,在用户程序中就可以直接使用STC12C5A60S2单片机的寄存器名称了。例如, MOV BRT,#0FBH ;设置独立波

7、特率发生器的时间常数,8、条件汇编控制指令,条件汇编控制指令的作用是使源程序中的一部分程序行根据需要决定是否进行汇编。条件汇编控制伪指令的一般格式: IF 表达式 程序块1 ELSE 程序块2 ENDIF,9、源程序结束 END,标号: END 表达式 END语句是一个结束标志,它告诉汇编程序,该程序段已结束。因此,该语句必须放在整个程序(包括伪指令)之后。,4.2.2 汇编语言程序设计的一般步骤和基本框架,1、汇编语言程序设计的一般步骤,(1)分析课题,确定算法或解题思路; (2)根据算法或思路画出流程图; (3)根据算法要求分配资源,包括内部RAM、定时器、中断等资源的分配。 (4)根据流

8、程图编写程序; (5)不断调试并修改源程序,直到满足系统的要求。,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_I

9、SR ;定时器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 ;设置堆栈指针(可根据实际情况进行修改) ;初始化内存区域内容 ;设置有关特殊功能

10、寄存器(SFR)的控制字 ;根据需要开放相应的中断控制 MAINLOOP: ;主程序循环 LJMP MAINLOOP,;下面是各个中断服务子程序的入口 INT0_ISR: ;外部中断0服务子程序 ;根据需要填入适当的内容 RETI INT1_ISR: ;外部中断1服务子程序 ;根据需要填入适当的内容 RETI T0_ISR: ;定时器0中断服务子程序 ;根据需要填入适当的内容 RETI T1_ISR: ;定时器1中断服务子程序 ;根据需要填入适当的内容 RETI UART1_ISR: ;串口1中断服务子程序 ;根据需要填入适当的内容(注意中断请求标志位的清零) RETI UART2_ISR:

11、;串口2中断服务子程序 ;根据需要填入适当的内容(注意中断请求标志位的清零) RETI,ADC_ISR: ;ADC中断服务子程序 ;根据需要填入适当的内容(注意中断请求标志位的清零) RETI SPI_ISR: ;SPI通信中断服务子程序 ;根据需要填入适当的内容(注意中断请求标志位的清零) RETI LVD_ISR: ;低电压检测服务子程序 ;根据需要填入适当的内容(注意中断请求标志位的清零) RETI PCA_ISR: ;PCA和PWM中断服务子程序 ;根据需要填入适当的内容(注意中断请求标志位的清零) RETI ;下面可以编写其他子程序或者定义程序中所用的常数 END,4.3 典型汇编语

12、言程序设计举例,【例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 ;两数不相等,若R037则转NEG MOV SIGN,#01H ;R037

13、时,SIGN+1 LJMP ENDME NEG: MOV SIGN,#0FFH ;R037时,SIGN-1(以补码形式给出) ENDME:NOP END,1、分支程序设计,所谓查表法,就是把事先计算或测得的数据按一定顺序编制成表格,查表程序根据被测参数的值或者中间结果,查出最终所需要的结果。它具有程序简单,执行速度快等优点。 查表程序在计算机控制系统中应用非常广泛。例如,在键盘处理程序中,查找按键相应的命令处理子程序的入口地址;在LED显示程序中,获得LED数码管的显示代码;在一些快速计算的场合,根据自变量的值,从函数表上查找出相应的函数值以及实现非线性修正、代码转换等等。 常用MOVC A,

14、ADPTR查找程序存储器空间的代码或常数,每次传送一个字节。,2、查表程序设计,当程序处理的对象具有重复性规律时,可以使用循环程序设计。一个循环表示重复执行一组指令(程序段)。,3、循环程序设计,例1 延时程序(时钟为6MHz ) 入口:设延时时间N(以0.1ms为单位)送入R0。 出口:延时到,退出程序,无参数传递。 DELAY: MOV R7,#150 ;当时钟为6MHz时,约延时0.1ms LOOP: DJNZ R7,LOOP DJNZ R0,DELAY RET,(1)多字节十进制BCD码减法 入口:被减数低字节地址存放于R1,减数低字节地址存放于R0,字节数存放于R2。 出口:差(补码

15、)的低字节地址存放于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、定点数运算子程序,4.4 利用Keil uVision集成开发环境调试程序,4.4.1 Keil uVision集成开发环境简介 Keil uVision 集成开发环境(IDE,以下简称uVision)是一个基于Windows的开发平台,包含高效的编辑器、项目管理器和MAKE工具。uVision支持所有的KEIL 8051工具,包括C编译器、宏汇编器连接/定位器、目标代码、到HEX的转换器。uVision通过以下特性加速嵌入式系统(单片机应用系统

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

当前位置:首页 > 高等教育 > 大学课件

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