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

上传人:y****n 文档编号:245304280 上传时间:2024-10-08 格式:PPT 页数:39 大小:371.50KB
返回 下载 相关 举报
汇编语言程序设计及仿真调试_第1页
第1页 / 共39页
汇编语言程序设计及仿真调试_第2页
第2页 / 共39页
汇编语言程序设计及仿真调试_第3页
第3页 / 共39页
点击查看更多>>
资源描述
单击此处编辑母版标题样式,单击此处编辑母版文本样式,第二级,第三级,第四级,第五级,*,*,/39,增强型,8051,单片机实用开发技术,4.2.1,伪指令,一般来说,在汇编语言源程序中用指令助记符编写的程序,都可以一一对应的产生目标程序。但还有一些指令,例如指定目标程序或数据存放的起始地址,给一些指定的标号赋值,在内存中予留工作单元,表示源程序结束等等。这些指令并不产生目标程序,不影响程序的执行,仅仅产生供汇编用的某些指令,以便在汇编时执行一些特殊操作,称之为伪指令。,4.,2,汇编语言程序设计,1,、设置起始地址,ORG,ORG nn,ORG,伪指令总是出现在每段源程序或数据块的开始。它可使程序员把程序、子程序或数据块存放在存贮器的任何位置。,ORG 0000H,LJMP MAIN,在实际应用中,一般仅设置中断服务子程序的入口地址和主程序的起始存放地址,其他的程序或常数依次存放即可,汇编程序会自动进行存储空间的分配。,2,、定义字节,DB,或,DEFB,标号:,DB ,项或项表,其中项或项表是指一个字节,数或字符串,或以引号括起来的,ASC,码字符串(一个字符用,ASC,码表示,相当于一个字节)。该指令的功能是把项或项表的数值(字符则用它的,ASC,码)存入从标号开始的连续单元中。,常用,DB,命令在程序存储器中存放数据表格,例如存放数码管显示的十六进制数的字形码(或称为字模)。例如,共阳极,LED,显示字模表如下:,LEDCode:,DB0C0H;0,DB0F9H;1,DB0A4H;2,DB0B0H;3,DB099H;4,DB092H;5,DB082H;6,DB0F8H;7,DB080H;8,DB090H;9,DB088H;A,DB083H;B,DB0C6H;C,DB0A1H;D,DB086H;E,DB08EH;F,访问表格常数时,常用,MOVC A,A+DPTR,指令。,3,、为标号赋值,EQU,标号:,EQU,项或汇编符号,其功能是将一个数或特定的汇编符号赋给语句中的字符名称。注意,字符名称为一自定的符号,而不是标号,字符名称后无“:”。字符名称可用来作数据地址、立即数或者位地址,其值可以是一个,8,位数,也可以是,16,位数。,使用,EQU,伪指令可以把抽象的数字或地址表示成有一定意义的符号,增强程序的可读性。需要注意的是,在同一程序中,用,EQU,伪指令对标号赋值后,该标号的值在整个程序中不能再改变。,4,、,DATA指令,格式:,符号名 DATA 表达式,DATA 指令用于将一个内部 RAM 的地址赋给指定的符号名。,数值表达式的值在00H0FFH之间,表达式必须是一个简单表达式。如:,BUFFER DATA 40H,5,、,XDATA,指令,(Extenal Data),格式:,符号名,XDATA,表达式,XDATA,指令用于将一个外部,RAM,的地址赋给指定的符号名。,数值表达式的值在,0000H,0FFFFH,之间,对于,STC12C5A60S2,单片机,片内集成了,1024,字节的,XRAM,,地址范围是,0000H03FFH,。,表达式必须是一个简单表达式。如:,MYDATA XDATA 0020H,6,、定义位命令,BIT,格式:,字符名称,BIT,位地址,用于给字符名称定义位地址。如:,DOGOUT BIT P3.4,经定义后,允许在指令中用,DOGOUT,代替,P3.4,。,DATA,、,BIT,命令可以使用,EQU,代替,例如,下面的两条命令是等价的:,TCONDATA 88H;,中断优先级高位寄存器,TCONEQU 88H;,中断优先级高位寄存器,下面的两条命令也是等价的:,TF1BIT8FH;TF1,的位地址位,8FH,TF1EQUTCON.7 ;TF1,为,TCON,的第,7,位,7,、,文件包含命令,INCLUDE,文件包含命令,INCLUDE,用于将寄存器定义文件(一般的后缀名为,.INC,)包含于当前程序中,与,C,语言中的,#include,语句类似。使用格式为:,$INCLUDE(,文件名,),例如,为了使用方便,作者把,STC12C5A60S2D,单片机的寄存器定义保存在文件,STC12C5A.INC,中,使用时,可以在程序的开始处使用下面的命令将其包含到用户程序中:,$INCLUDE(STC12C5A.INC);,包含寄存器定义文件,使用上述命令后,在用户程序中就可以直接使用,STC12C5A60S2,单片机的寄存器名称了。例如,,MOV BRT,#0FBH ;,设置独立波特率发生器的时间常数,8,、,条件汇编控制指令,条件汇编控制指令的作用是使源程序中的一部分程序行根据需要决定是否进行汇编。条件汇编控制伪指令的一般格式:,IF 表达式,程序块1,ELSE,程序块2,ENDIF,9,、源程序结束,END,标号:,END ,表达式,END,语句是一个结束标志,它告诉汇编程序,该程序段已结束。因此,该语句必须放在整个程序(包括伪指令)之后。,4.2.2,汇编语言程序设计的一般步骤和基本框架,1,、汇编语言程序设计的一般步骤,(1)分析课题,确定算法或解题思路;,(2)根据算法或思路画出流程图;,(3)根据算法要求分配资源,包括内部RAM、定时器、中断等资源的分配。,(4)根据流程图编写程序;,(5)不断调试并修改源程序,直到满足系统的要求。,2,、,STC12C5A60S2,单片机汇编语言程序的设计框架:,$INCLUDE(STC12C5A.INC);,包含,STC12C5A60S2,单片机寄存器定义头文件,;,这里可以编写程序中用到的一些符号定义(使用,EQU,、,DATA,、,BIT,等伪指令),ORG0000H,LJMPMAIN;,跳转到主程序,ORG0003H,LJMPINT0_ISR ;,外部中断,0,入口,ORG000BH,LJMPT0_ISR ;,定时器,0,中断入口,ORG0013H,LJMPINT1_ISR ;,外部中断,1,入口,ORG001BH,LJMPT1_ISR ;,定时器,1,中断入口,ORG0023H,LJMPUART1_ISR ;,串口,1,中断入口,ORG002BH,LJMPADC_ISR ;ADC,中断服务程序入口,ORG0033H,LJMPLVD_ISR ;,低电压检测中断服务程序入口,ORG003BH,LJMPPCA_ISR ;PCA,中断服务程序入口,ORG0043H,LJMPUART2_ISR ;,串口,2,中断服务程序入口,ORG004BH,LJMPSPI_ISR ;SPI,中断服务程序入口,ORG0100H,MAIN:MOVSP,#70H ;,设置堆栈指针(可根据实际情况进行修改),;,初始化内存区域内容,;,设置有关特殊功能寄存器(,SFR,)的控制字,;,根据需要开放相应的中断控制,MAINLOOP:,;,主程序循环,LJMPMAINLOOP,;下面是各个中断服务子程序的入口,INT0_ISR:;外部中断0服务子程序,;根据需要填入适当的内容,RETI,INT1_ISR:;外部中断1服务子程序,;根据需要填入适当的内容,RETI,T0_ISR:;定时器0中断服务子程序,;根据需要填入适当的内容,RETI,T1_ISR:;定时器1中断服务子程序,;根据需要填入适当的内容,RETI,UART1_ISR:;串口1中断服务子程序,;根据需要填入适当的内容(注意中断请求标志位的清零),RETI,UART2_ISR:;串口2中断服务子程序,;根据需要填入适当的内容(注意中断请求标志位的清零),RETI,ADC_ISR:;ADC中断服务子程序,;根据需要填入适当的内容(注意中断请求标志位的清零),RETI,SPI_ISR:;SPI通信中断服务子程序,;根据需要填入适当的内容(注意中断请求标志位的清零),RETI,LVD_ISR:;低电压检测服务子程序,;根据需要填入适当的内容(注意中断请求标志位的清零),RETI,PCA_ISR:;PCA和PWM中断服务子程序,;根据需要填入适当的内容(注意中断请求标志位的清零),RETI,;下面可以编写其他子程序或者定义程序中所用的常数,END,4.3,典型汇编语言程序设计举例,【,例,4-1】,编程实现下面的比较函数。设变量,x,存放在,R0,,求得的,y,值存入,SIGN,单元。,+1 x37,y=-1 x37,0 x=37,解:可以利用,CJNE,指令和进位位,C,状态控制转移(,JC,指令)来实现三分支转移。源程序如下:,SIGN EQU 50H,ORG0000H,LJMPMAIN,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,、分支程序设计,所谓查表法,就是把事先计算或测得的数据按一定顺序编制成表格,查表程序根据被测参数的值或者中间结果,查出最终所需要的结果。它具有程序简单,执行速度快等优点。,查表程序在计算机控制系统中应用非常广泛。例如,在键盘处理程序中,查找按键相应的命令处理子程序的入口地址;在LED显示程序中,获得LED数码管的显示代码;在一些快速计算的场合,根据自变量的值,从函数表上查找出相应的函数值以及实现非线性修正、代码转换等等。,常用MOVC A,ADPTR查找程序存储器空间的代码或常数,每次传送一个字节。,2,、,查表程序设计,当程序处理的对象具有重复性规律时,可以使用循环程序设计。一个循环表示重复执行一组指令(程序段)。,3,、,循环程序设计,例1 延时程序(时钟为6,MHz,),入口:设延时时间,N,(以,0.1ms,为单位)送入,R0,。,出口:延时到,退出程序,无参数传递。,DELAY,:,MOV R7,#150;,当时钟为,6MHz,时,约延时,0.1ms,LOOP,:,DJNZ R7,LOOP,DJNZ R0,DELAY,RET,(,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,MOVR0,A,INC R0;,地址值增,1,INC R1,INC R3;,差字节增,1,CPL C;,进位求反,以形成正确借位,DJNZ R2,SUBCD1;,未减完继续,减完向下执行,JNCSUBCD2;,无借位去,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,通过以下特性加速嵌入式系统(单片机应用系统)的开发过程:,全功能的源代码编辑器,器件库用来配置开发工具设置,项目管理器用
展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


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


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

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


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