电工技术基础_电工基础知识_电工之家-电工学习网

欢迎来到电工学习网!

单片机汇编言语程序计划

2017-04-10 12:59分类:PLC基础知识 阅读:

 

1、汇编言语源程序的格式
1.内部数据传送指令
汇编言语是面向机器的,因而,言语格式因机器纷歧样而异。对MCS-51体系来说,汇编言语中每条句子的格式包括下列4项内容:
标号: 操作码 操作数; 注释

汇编句子中,标号和操作码要用冒号“:”离隔;操作码和操作数之间的分隔符是空格,多个操作数之间用“,”分隔;操作数与注释之间用“;”分隔;操作码是必选项,别的都是可选项,即任何句子都有必要包括操作码,别的有些因句子纷歧样而异。
1.ORG伪指令
ORG伪指令称为开端汇编伪指令,一般用于汇编言语源程序或某数据块的开端,格式为:
[标号]:ORG 16位的地址或标号
2.END伪指令
END伪指令称为汇编完毕伪指令,常常用在汇编言语源程序的完毕,用来指示源程序完毕汇编的方位。即标明程序的完毕。一般格式为:
[标号]:END
3.EQU伪指令
EQU伪指令称为赋值伪指令,用于给左面的“字符名”赋值。此伪指令的格式为:
字符名 EQU 数据或汇编符号
4.DATA伪指令
DATA伪指令称为数据地址赋值伪指令,它用来给左面的“字符名”赋值。其一般格式为:
字符名 DATA 数据或表达式
5.BIT伪指令
BIT伪指令称为位地址符号伪指令,用来给符号办法的位地址赋值,此伪指令的格式为:
字符名 BIT 位地址
6.DB伪指令
DB伪指令称为界说字节伪指令,它的功用是从指定单元开端界说(存储)若干个字节的数据或字符,字符若用引号括起来则标明ASCII码。其一般格式为:
标号:DB 字节常数或字符
7.DW伪指令
DW伪指令称为界说字伪指令,其功用为在程序存储器中从指定单元开端,界说若干个字,一个字恰当于两个字节。此伪指令的一般格式为:
标号: DW 字常数或字表
8.DS伪指令
DS伪指令称为界说存储空间伪指令,格式为:
标号: DS 表达式

2、MCS—51单片机汇编言语程序计划举例
1. 简略程序计划
例:将一个字节内的两位紧缩BCD码拆开并改换成相应的ASCH码,存入两个RAM单元。
解:设两位紧缩BCD码已放在内部RAM的20H单元,改换后的ASCII码放在21H和22H单元。依据ASCII码表,字符0~9对应的ASCII码为30H~39H,之间仅相差30H。因而,改换时,只需把20H单元中两位紧缩BCD码拆开后,将BCD的高四方位成“0011”即可。相应程序如下:
ORG 1000H
MOV R0,#20H
MOV A, @R0 ;两位BCD码送A
PUSH ACC
ANL A,#0FH ;取低位BCD码
ORL A,#30H ;完毕低位改换
INC R0
MOV @R0,A ;低位BCD码的改换作用存入21H中
POP ACC
ANL A,#0F0H ;取高位BCD码
SWAP A
ORL A,#30H ;完毕高位改换
INC R0
MOV @R0,A ;存数
SJMP $ ;完毕
END
2. 分支程序计划
例:设变量X寄存于R2,函数值Y寄存在R3。试依照下式的恳求给Y赋值:


解:这是一个三分支的条件搬运程序,可选用CJNE和JC或JNC指令进行差异。
ORG 0500H
MOV A, R2 ;自变量→(A)
CJNE A,#10,L1 ;(A)与10比照
L1:JC L2 ;若X<10,则转L2
ADD A, #01H
MOV R3, A ; 设X>20,Y=1
CJNE A,#21,L3
L3:JNC L4 ;X>20,则转L4
MOV R3,#0 ;20≥X≥10,Y=0
SJMP L4
L2:MOV R3,#0FFH
L4:SJMP $
END
3. 循环程序计划
循环程序一般由以下几有些构成:
1)循环初始化有些
2)循环体有些
3)循环完毕有些
例:在内部RAM的20H~2FH接连16个单元中寄存单字节无符号数。求16个无符号数之和。
解 这是重复相加疑问。16个单字节数的和最大不会逾越两个字节,设和寄存在31H,30H中。用R0作加数指针,R7作循环次数计数器。程序流程如图3-11所示。
ORG 1000H
MOV R7,#0FH
MOV R0,#21H
MOV 31H,#00H
MOV A,20H
LOOP1: ADD A,@R0
MOV 30H, A
JNC LOOP2
INC 31H
LOOP2: INC R0
DJNZ R7, LOOP1
SJMP $
END
4.查表程序计划
查表程序是依据查表算法计划的。它有两条专门的查表指令:
例:计齐截个将16进制数改换成ASCII码的子程序。设16进制数寄存在R0中的低4位,恳求将改换后的ASCII码送回R0中。
解:给出二种计划。
①核算求解。由ASCII码字符表可知0~9的ASCII码为30H~39H,A~F的ASCII码为41H~46H。因而,核算求解的思路是:若(R0)≤9,则R0内容只需加30H;若(R0)>9,则R0需加37H。相应程序为:
ORG 1000H
MOV A,R0 ;取改换值到A
ANL A,#0FH ;屏蔽高4位
CJNE A,#10,NEXTl
NEXTl:JNC NEXT2 ;若A>9,则转NEXT2
ADD A,#30H ;若A<10,则A (A)+30H
SJMP DONE
NEXT2:ADD A,#37H ;A (A)+37H
DONE: MOV R0,A ;存作用
SJMP $
END
②查表求解。求解时,两条查表指令任选其一。现以“MOVC A,@A+PC”指令为例,给出相应程序:
地址 机器码 ORG 1000H
1000 E8 MOV A,R0 ;取改换值
1001 54 0F ANL A,#0FH ;屏蔽高4位
1003 24 03 ADD A,#03H ;核算偏移量
1005 83 MOVC A,@A+PC ;查表
1006 F8 MOV R0,A ;存作用
1007 80 FE SIMP $
1008 30 31 32 33 ASCTAB: DB 30H,31H,32H,33H
100C 34 35 36 37 DB 34H,35H,36H,37H
1010 38 39 41 42 DB 38H,39H,41H,42H
1014 43 44 45 46 DB 43H,44H,45H,46H
END
5. 子程序计划
子程序在构造上应具有通用性和独立性,在编写子程序时应留神:
①程序榜首条指令的地址称为进口地址,该指令前有必要有标号,最佳以子程序使命名作为标号,例如闪现程序常以DIR作为标号;
②调用子程序指令设在主程序中,在子程序的完毕必定要有回来指令。一般说来,子程序调用指令和子程序回来指令要成对运用,子程序应只需一个出口;
③子程序调用和回来指令能主动维护和康复断点地址,但对需求维护的寄存器和内存单元的内容,有必要在子程序开端和完毕(RET指令前)组织维护和康复它们的指令;
④调用子程序时,要了解子程序的“进口信息”和“出口信息”,即进入子程序前应给哪些变量赋值,子程序回来时作用存在何处,以便主程序运用这些作用。这便是所谓的参数传递。一般称传入子程序的参数为进口参数,由子程序回来的参数为出口参数。
例:用程序完毕C=a2+b2。设a、b均小于10。a存在21H单元,b存在22H单元,作用C存在20H单元。
解:因本题中两次用到求平方的运算,故此把求平方运算编成子程序。依题意编写主程序和子程序如下:
ORG 1000H
MAIN: MOV SP,#60H ;设库房指针
MOV A,21H ;取a值
LCALL SQR ;求a2
MOV 20H,A ;a2值送入20H单元
MOV A,22H ;取b值
LCALL SQR ;求b2
ADD A,20H ;求a2+b2
MOV 20H,A ;作用存入20H单元
SJMP $
ORG 2000H
SQR: MOV B,A ;求平方子程序
MUL AB
RET

上一篇:单片机体系硬件抗搅扰常用办法

下一篇:MCS-51单片机内部构造

相关推荐

电工推荐

    电工技术基础_电工基础知识_电工之家-电工学习网
返回顶部