第4章 汇编语言程序设计及仿真调试(2)

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

常用DB命令在程序存储器中存放数据表格,例如存放数码管显示的十六进制数的字 形码(或称为字模)。例如,共阳极LED显示字模表如下: LEDCode: DB DB DB DB 0C0H 0F9H 0A4H 0B0H ;0 ;1 ;2 ;3
DB
DB DB DB
099H
092H 082H 0F8H
;4
;5 ;6 ;7
4、DATA指令
格式: 符号名 DATA 表达式 DATA 指令用于将一个内部 RAM 的地址赋给指定的符号名。 数值表达式的值在00H~0FFH之间,表达式必须是一个简单表达 式。如: BUFFER DATA 40H
4/39
增强型8051单片机实用开发技术
5、XDATA指令(ExtenBiblioteka l Data)[ 程序块1 ]
[ ELSE ] [ 程序块2 ]
ENDIF
9、源程序结束 END
〈标号:〉 END 〈表达式〉 END语句是一个结束标志,它告诉汇编程序,该程序段已结束。 因此,该语句必须放在整个程序(包括伪指令)之后。
8/39
增强型8051单片机实用开发技术
4.2.2 汇编语言程序设计的一般步骤和基本框架
格式: 符号名 XDATA 表达式 XDATA 指令用于将一个外部 RAM 的地址赋给指定的符号名。 数值表达式的值在0000H~0FFFFH之间,对于STC12C5A60S2单片 机,片内集成了1024字节的XRAM,地址范围是0000H~03FFH。表 达式必须是一个简单表达式。如: MYDATA XDATA 0020H
增强型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
2、定义字节DB或DEFB
〈标号:〉 DB 〈项或项表〉 其中项或项表是指一个字节,数或字符串,或以引号括起来的ASCⅡ码字符 串(一个字符用ASCⅡ码表示,相当于一个字节)。该指令的功能是把项或项 表的数值(字符则用它的ASCⅡ码)存入从标号开始的连续单元中。
2/39
增强型8051单片机实用开发技术
14/39
增强型8051单片机实用开发技术
3、循环程序设计 当程序处理的对象具有重复性规律时,可以使用循环程序设计。一个循 环表示重复执行一组指令(程序段)。
开始
初始化部分
处理部分
循环控制部分
N 循环次数是否已够? Y 结束
15/39
增强型8051单片机实用开发技术
例1 延时程序(时钟为6MHz )
1、汇编语言程序设计的一般步骤 (1)分析课题,确定算法或解题思路; (2)根据算法或思路画出流程图; (3)根据算法要求分配资源,包括内部RAM、定时器、中断等资源的分配。 (4)根据流程图编写程序; (5)不断调试并修改源程序,直到满足系统的要求。
9/39
增强型8051单片机实用开发技术
2、STC12C5A60S2单片机 汇编语言程序的设计框架:
5/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位
07H为符号位。0表示结果为正,1表示结果为负。
SUBCD: MOV CLR CLR SUBCD1:MOV R3,#00H 07H C A,#9AH ;差字节数置0 ;符号位清0 ;借位位C清0
SUBB
ADD DA MOV INC
A,@R0
A,@R1 A @R0,A R0
;相差
;地址值增1 ;差字节增1 ;进位求反,以形成正确借位 ;未减完继续,减完向下执行 ;无借位去SUBCD2返主,否则继续 ;差为负置“1”符号位 ;返回
6/39
增强型8051单片机实用开发技术
7、文件包含命令INCLUDE
文件包含命令INCLUDE用于将寄存器定义文件(一般的后缀名 为.INC)包含于当前程序中,与C语言中的#include语句类似。使用 格式为:
$INCLUDE (文件名)
例如,为了使用方便,作者把STC12C5A60S2D单片机的寄存器 定义保存在文件STC12C5A.INC中,使用时,可以在程序的开始处使 用下面的命令将其包含到用户程序中: $INCLUDE (STC12C5A.INC) ;包含寄存器定义文件
INC
INC CPL DJNZ JNC SETB SUBCD2:RET
R1
R3 C R2,SUBCD1 SUBCD2 07H
其他编程实例,请参见教材
17/39
增强型8051单片机实用开发技术
4.4 利用Keil uVision集成开发环境调试程序
4.4.1 Keil uVision集成开发环境简介
$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 10/39
13/39
增强型8051单片机实用开发技术
2、查表程序设计 所谓查表法,就是把事先计算或测得的数据按一定顺序编制成表格,查 表程序根据被测参数的值或者中间结果,查出最终所需要的结果。它具有程 序简单,执行速度快等优点。 查表程序在计算机控制系统中应用非常广泛。例如,在键盘处理程序中, 查找按键相应的命令处理子程序的入口地址;在LED显示程序中,获得LED 数码管的显示代码;在一些快速计算的场合,根据自变量的值,从函数表上 查找出相应的函数值以及实现非线性修正、代码转换等等。 常用MOVC A,@A+DPTR查找程序存储器空间的代码或常数,每次传 送一个字节。
使用上述命令后,在用户程序中就可以直接使用STC12C5A60S2 单片机的寄存器名称了。例如, MOV BRT,#0FBH ;设置独立波特率发生器的时间常数
7/39
增强型8051单片机实用开发技术
8、条件汇编控制指令
条件汇编控制指令的作用是使源程序中的一部分程序行根据需 要决定是否进行汇编。条件汇编控制伪指令的一般格式: IF 表达式
入口:设延时时间N(以0.1ms为单位)送入R0。 出口:延时到,退出程序,无参数传递。 DELAY: MOV R7,#150 ;当时钟为6MHz时,约延时0.1ms
LOOP:
DJNZ R7,LOOP
DJNZ R0,DELAY RET
16/39
增强型8051单片机实用开发技术
4、定点数运算子程序
(1)多字节十进制BCD码减法 入口:被减数低字节地址存放于R1,减数低字节地址存放于R0,字节数存放于R2。 出口:差(补码)的低字节地址存放于R0,字节数存放于R3。
11/39
增强型8051单片机实用开发技术
ADC_ISR: ;ADC中断服务子程序 …… ;根据需要填入适当的内容(注意中断请求标志位的清零) RETI SPI_ISR: ;SPI通信中断服务子程序 …… ;根据需要填入适当的内容(注意中断请求标志位的清零) RETI LVD_ISR: ;低电压检测服务子程序 …… ;根据需要填入适当的内容(注意中断请求标志位的清零) RETI PCA_ISR: ;PCA和PWM中断服务子程序 …… ;根据需要填入适当的内容(注意中断请求标志位的清零) RETI ;下面可以编写其他子程序或者定义程序中所用的常数 END
12/39
增强型8051单片机实用开发技术
4.3
典型汇编语言程序设计举例
1、分支程序设计
【例4-1】编程实现下面的比较函数。设变量x存放在R0,求得的y值存入SIGN单 元。 +1 x>37 y= -1 x<37 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 ;若比较相等,则SIGN←0 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/39
增强型8051单片机实用开发技术
1、设置起始地址ORG
ORG nn
ORG伪指令总是出现在每段源程序或数据块的开始。它可使程序 员把程序、子程序或数据块存放在存贮器的任何位置。
ORG 0000H
LJMP MAIN ┇ 在实际应用中,一般仅设置中断服务子程序的入口地址和主程序 的起始存放地址,其他的程序或常数依次存放即可,汇编程序会自动 进行存储空间的分配。
增强型8051单片机实用开发技术
4.2
4.2.1 伪指令
汇编语言程序设计
一般来说,在汇编语言源程序中用指令助记符编写 的程序,都可以一一对应的产生目标程序。但还有一些 指令,例如指定目标程序或数据存放的起始地址,给一 些指定的标号赋值,在内存中予留工作单元,表示源程 序结束等等。这些指令并不产生目标程序,不影响程序 的执行,仅仅产生供汇编用的某些指令,以便在汇编时 执行一些特殊操作,称之为伪指令。
DB
DB DB DB DB DB DB DB
080H
090H 088H 083H 0C6H 0A1H 086H 08EH
;8
;9 ;A ;B ;C ;D ;E ;F
访问表格常数时,常用MOVC A, @A+DPTR指令。
3/39
增强型8051单片机实用开发技术
3、为标号赋值EQU
〈标号:〉 EQU 项或汇编符号 其功能是将一个数或特定的汇编符号赋给语句中的字符名称。 注意,字符名称为一自定的符号,而不是标号,字符名称后无 “:”。字符名称可用来作数据地址、立即数或者位地址,其值可 以是一个8位数,也可以是16位数。 使用EQU伪指令可以把抽象的数字或地址表示成有一定意义的 符号,增强程序的可读性。需要注意的是,在同一程序中,用EQU 伪指令对标号赋值后,该标号的值在整个程序中不能再改变。
相关文档
最新文档