单片机 一纸开材料Word文件下载.docx
《单片机 一纸开材料Word文件下载.docx》由会员分享,可在线阅读,更多相关《单片机 一纸开材料Word文件下载.docx(56页珍藏版)》请在冰点文库上搜索。
使用MOVC指令
数据存储器:
内部RAM(00H—7FH,低128B;
80H—FFH,高128B)
外部RAM(0000H——FFFFH,64K单元)
控制信号:
/RD或/WR有效(=0)
使用计数器:
DPTR
使用指令:
内部RAM用MOV;
外部RAM用MOVX
程序存储器和数据存储器使用独立的两个地址空间。
由/PSEN和/RD(/WR)区分。
程序存储器ROM
存放程序代码和表格数据,64KB,地址指针是16位PC。
注意6个特殊的单元:
0000H-0002H单元:
上电时,程序计数器PC所指向的单元;
0003H-000AH单元:
外部中断/INT0的入口地址;
000BH-0012H单元:
定时器T0的溢出中断入口地址;
0013H-001AH单元:
外部中断/INT1的入口地址;
001BH-0022H单元:
定时器T1的溢出中断入口地址;
0023H-002AH单元:
串行口接收、传送的中断入口地址。
注:
中断响应后,由硬件控制PC自动转到各中断区的首地址。
但每个中断区只有8个单元,无法放置完整的中断处理子程序,编程时必须在中断入口区放置一条无条件转移指令,将程序引导到真正的中断处理程序的实际入口位置。
复位操作
复位是单片机的初始化操作。
复位的主要功能:
把PC初始化为0000H,使CPU从0000H单元开始执行程序;
当程序运行出错或操作错误系统处于死锁状态时,为摆脱困境,也需要按复位键重新启动。
除PC之外,复位操作还对其它一些寄存器有影响,但复位不影响内部RAM状态。
复位后的内部寄存器状态
Chap2
寻址方式
立即寻址:
·
指令码中直接含有操作数本身(立即数)
立即数可以是8位或16位
立即数通常用#data或#data16表示
立即数只能作为源操作数
立即数同操作码一起存放在程序存储器中
MOVA,#3BH;
A←3BH
MOVDPTR,#1828H;
DPTR←#1828H
直接寻址:
指令码中含有操作数地址(8位二进制数);
可用于直接寻址的存储空间是:
片内RAM的低128字节和特殊功能寄存器SFR;
直接寻址通常用direct(操作数所在存储单元的物理地址)表示;
MOV40H,A;
(40H)←A
对片内高128B的RAM,direct既可以使用SFR的物理地址,也可以用SFR的名称符号。
MOVA,81H;
A←(81H)
MOVA,SP;
A←SP,可读性好
3、寄存器寻址:
操作数在R7-R0,A,B,AB,DPTR中,指令码中含有该操作数的寄存器号;
操作数位于片内RAM中
MOVA,Rn;
(A)←(Rn)
4、寄存器间接寻址:
指令码中含有存放该操作数地址的寄存器号;
间址寄存器采用@R0,@R1,@DPTR表示;
@R0,@R1用于对片内RAM和外部RAM(0000H~00FFH)寻址,@DPTR的寻址范围是片外ROM/RAM的全部64KB区域;
寄存器间址指令不能用于寻址SFR
MOVA,@R0;
A←((R0))
5、变址寻址:
指令码中隐含有作为基地址寄存器用的数据指针DPTR或程序计数器PC(存放基地址);
指令码中也隐含有累加器A(A中存放地址偏移量,00H~FFH范围内的无符号数);
寻址空间是程序存储器。
MOVCA,@A+PC;
A←(A+PC)
MOVCA,@A+DPTR;
A←(A+DPTR)
6、相对寻址:
相对转移指令的指令码中含有相对地址偏移量;
相对转移指令分为:
短转移指令和长转移指令(分别为双字节和三字节);
PC的当前值+相对地址偏移量rel=下一条要执行指令的地址;
PC的当前值是指相对转移指令从程序存储器中取出后的PC值。
2000H8054HSJMPrel;
PC←PC+2+rel
7、位寻址:
位寻址指令的指令码中含有位地址;
位寻址指令中位地址用bit表示(字节地址direct);
位寻址区:
片内RAM位寻址区20H~2FH和11个SFR;
MOVC,7FH;
Cy←(7FH)
MOVC,2FH.7;
Cy←(7FH)
MOVC,ACC.7;
Cy←ACC.7
A1BIT7FH——位地址赋值伪指令
MOVC,A1;
Cy←2FH.7,A1为符号位地址
1、数据传送指令(28条)此类指令不影响Cy,AC,OV标志,只影响奇偶标志P。
片内RAM单元之间的数据传送指令(15条)指令的源操作数和目的操作数地址都在单片机内部,是片内RAM或SFR的地址。
(1)立即寻址型传送指令
MOVA,#data;
A←data
MOVRn,#data;
Rn←data
MOV@Ri,#data;
(Ri)←data
MOVdirect,#data;
direct←data
(2)直接寻址型传送指令:
指令操作码中至少含有一个操作数的直接地址。
MOVA,direct;
A←(direct)
MOVdirect,A;
direct←A
MOVRn,direct;
Rn←(direct)
MOV@Ri,direct;
(Ri)←(direct)
MOVdirect2,direct1;
direct2←(direct1)
目的存储单元有累加器A、工作寄存器和片内
RAM单元(包括SFR的字节地址)。
(3)寄存器寻址型传送指令
MOVA,Rn;
A←Rn
MOVRn,A;
Rn←A
MOVdirect,Rn;
direct←Rn
(4)寄存器间址型传送指令
MOVA,@Ri;
A←(Ri)
MOV@Ri,A;
(Ri)←A
MOVdirect,@Ri;
direct←(Ri)
外部数据传送指令(外部RAM/ROM)(13条)
(5)16位数传送指令
MOVDPTR,#data16;
DPTR←data16
16位立即数是外部RAM/ROM的地址,其高8位送入DPH,低8位送入DPL。
(6)外部ROM的字节传送指令(查表指令)
MOVCA,@A+DPTR;
A←(A+DPTR)远程查表
MOVCA,@A+PC;
PC←PC+1,A←(A+PC)近程查表
(7)外部RAM的字节传送指令:
实现外部RAM和累加器A之间的数据传送。
MOVXA,@Ri;
A←(Ri)
MOVX@Ri,A;
MOVXA,@DPTR;
A←(DPTR)
MOVX@DPTR,A;
(DPTR)←A
前面两条指令访问外部RAM:
0000H~00FFH
后面两条指令访问外部RAM:
0000H~FFFFH
(8)堆栈操作指令
PUSHdirect;
SP←SP+1,(SP)←(direct)
POPdirect;
direct←(SP),SP←SP-1
堆栈操作指令是直接寻址指令,书写格式为:
PUSHACC
PUSH00H
POPACC
POP00H
弹出指令不会改变堆栈区存储器单元中的内容。
(9)数据交换指令
XCHA,Rn;
A↔Rn
XCHA,direct;
A↔(direct)
XCHA,@Ri;
A↔(Ri)
XCHDA,@Ri;
A3~0↔(Ri)3~0
只是将累加器A中的内容和片内RAM单元内容相互交换。
2、算术运算指令(24条)
加法指令(13条)
(1)不带Cy加法指令
ADDA,Rn;
A←A+Rn
ADDA,Direct;
A←A+(Direct)
ADDA,@Ri;
A←A+(Ri)
ADDA,#data;
A←A+data
对PSW标志位均有影响;
计算机总是按带符号数法则运算,产生PSW标志位。
两个带符号数相加,运算结果是否溢出应判断OV标志位。
(2)带Cy加法指令
ADDCA,Rn;
A←A+Rn+Cy
ADDCA,Direct;
A←A+(Direct)+Cy
ADDCA,@Ri;
A←A+(Ri)+Cy
ADDCA,#data;
A←A+data+Cy
Cy——指令执行前的Cy值。
常用于多字节无符号数的加法运算
(3)加1指令:
只影响奇偶校验标志位
INCA;
A←A+1
INCRn;
Rn←Rn+1
INCDirect;
Direct←(Direct)+1
INC@Ri;
(Ri)←(Ri)+1
INCDPTR;
DPTR←DPTR+1
减法指令(8条)
(4)带Cy减法指令
SUBBA,Rn;
A←A–Rn-Cy
SUBBA,Direct;
A←A-(Direct)-Cy
SUBBA,@Ri;
A←A-(Ri)-Cy
SUBBA,#data;
A←A–data-Cy
两个带符号数相减,运算结果是否溢出应判断OV标志位。
(5)减1指令:
DECA;
A←A-1
DECRn;
Rn←Rn-1
DECDirect;
Direct←(Direct)-1
DEC@Ri;
(Ri)←(Ri)-1
(6)十进制调整指令(1条)
DAA;
若AC=1或A3~A0>
9,则A←A+06H
若Cy=1或A7~A4>
9,则A←A+60H
通常紧跟在加法指令后使用,对A中的操作数进行十进制调整。
专用于实现BCD运算。
(7)乘法、除法指令(2条)
MULAB;
A×
B=BA,形成标志
对标志位的影响:
Cy=0;
若B不等于0,则OV=1,否则OV=0;
P由A中1的奇偶性确定。
DIVAB;
A÷
B=A…B,形成标志
执行过程中,若发现B等于0,则OV=1;
P由A中1的奇偶性确定。
3、逻辑运算指令(25条)
(1)逻辑与运算指令
ANLA,Rn;
A←A∧Rn
ANLA,direct;
A←A∧(direct)
ANLA,@Ri;
A←A∧(Ri)
ANLA,#data;
A←A∧data
ANLdirect,A;
direct←(direct)∧A
ANLdirect,#data;
direct←(direct)∧data
(2)逻辑或运算指令
ORLA,Rn;
A←A∨Rn
ORLA,direct;
A←A∨(direct)
ORLA,@Ri;
A←A∨(Ri)
ORLA,#data;
A←A∨data
ORLdirect,A;
direct←(direct)∨A
ORLdirect,#data;
direct←(direct)∨data
(3)逻辑异或运算指令
XRLA,Rn;
A←A⊕Rn
XRLA,direct;
A←A⊕(direct)
XRLA,@Ri;
A←A⊕(Ri)
XRLA,#data;
A←A⊕data
XRLdirect,A;
direct←(direct)⊕A
XRLdirect,#data;
direct←(direct)⊕data
例:
ANLA,#0FH;
高四位清零,低四位不变
ORLA,#0FH;
高四位不变,低四位置1
XRLA,#0FH;
高四位不变,低四位求反
(4)累加器A清零和取反指令
CLRA;
A←0
CPLA;
A←A
(5)移位指令
RLA;
A7←A6←…..←A0←A7
RRA;
A0→A7→…..→A1→A0
RLCA;
CY←A7←A6←…..←A0←CY
RRCA;
CY→A7→…..→A0→CY
SWAPA;
高4位和低4位交换指令
4、控制转移指令(17条)
(1)无条件转移指令
LJMPaddr16;
PC←addr16
长转移指令:
64K范围内转移指令
AJMPaddr11;
PC←PC+2,PC10~PC0←addr11
绝对转移指令:
2K范围内转移指令
SJMPrel;
PC←PC+2,PC←PC+rel
短转移指令:
-126-129范围内转移指令,rel的取值范围-128-127
JMP@A+DPTR;
PC←A+DPTR
间接转移指令:
变址转移指令,目标转移地址的基地址送入DPTR
(2)条件转移指令
累加器A判零转移指令
JZrel;
若A=0,则PC←PC+2+rel,
否则PC←PC+2
JNZrel;
注意:
都是双字节相对转移指令,rel为相对地址偏移量。
(3)比较不相等转移指令
CJNEA,#data,rel;
若A=data,则PC←PC+3
若A不等于data,则PC←PC+3+rel,形成Cy标志。
CJNEA,direct,rel;
CJNERn,#data,rel;
CJNE@Ri,#data,rel;
指令的相对转移范围为-125~+130
(4)减1非零转移指令
DJNZRn,rel;
若Rn-1不等于0,则PC←PC+2+rel
若Rn-1=0,则PC←PC+2
DJNZdirect,rel;
若,(direct)-1不等于0,则PC←PC+3+rel
若,(direct)-1=0,则PC←PC+3
注意:
条件转移指令均为相对转移指令,因此指令的转移范围十分有限。
(5)短调用指令
ACALLaddr11;
PC←PC+2
SP←SP+1,(SP)←PC7~PC0
SP←SP+1,(SP)←PC15~PC8
PC10~0←addr11
(1)短调用指令也称为绝对调用指令;
(2)本调用指令应与被调用子程序起始地址在
同一个2KB范围内。
(6)长调用指令
LCALLaddr16;
PC←PC+3
SP←SP+1,(SP)←PC7~PC0
SP←SP+1,(SP)←PC15~PC8
PC15~0←addr16
本调用指令是一个64KB范围内调用指令。
(7)一般子程序返回指令
RET;
PC15~PC8←(SP),SP←SP-1,
PC7~PC0←(SP),SP←SP-1
(8)中断子程序返回指令
RETI;
在返回断点的同时,释放中断逻辑,接受新的中断请求。
(9)空操作指令:
NOP;
PC←PC+1
5、布尔变量操作指令(17条)
(1)位传送指令
MOVC,bit
MOVbit,C
其中:
C为PSW中的Cy;
bit为布尔变量的位地址。
这组指令的其中一个操作数必须是进位标志C,另一个可以是位地址。
(2)位置位和复位指令
位置位指令(置1)
SETBC;
1→Cy
SETBbit;
1→(bit)
位复位指令(清0)
CLRC;
0→Cy
CLRbit;
0→(bit)
(3)位逻辑运算指令
位逻辑“与”指令
ANLC,bit;
(C)∧(bit)→C
ANLC,/bit;
(C)∧/(bit)→C
位逻辑“或”指令
ORLC,bit;
(C)∨(bit)→C
ORLC,/bit;
(C)∨/(bit)→C
位逻辑“非”指令
CPLC;
/(C)→C
CPLbit;
/(bit)→bit
(4)位条件转移指令
累加器cy状态判断转移指令
JCrel;
若Cy=1,则(PC)+2+rel→PC
;
若Cy=0,则(PC)+2→PC
JNCrel;
若Cy=0,则(PC)+2+rel→PC
若Cy=1,则(PC)+2→PC
位状态判断转移指令
JBbit,rel;
若(bit)=1,则(PC)+3+rel→PC
若(bit)=0,则(PC)+3→PC
JNBbit,rel;
若(bit)=0,则(PC)+3+rel→PC
若(bit)=1,则(PC)+3→PC
JBCbit,rel;
若(bit)=1,则(PC)+3+rel→PC,0→bit
若(bit)=0,则(PC)+3→PC
6、伪指令——是在机器汇编时供汇编程序识别和执行的命令,用于对汇编的过程进行控制。
ORG指令代码存储起始地址
ORG2000H
START:
MOVA,#64H
:
END
END:
结束汇编伪指令
每个源程序只能有一个END,且在程序的末尾。
EQU等值(赋值)语句
字符名称EQU数据或汇编符
DAPORTEQU0C010H
注:
先定义后使用,定义字符名称不能在表达式中使用。
DATA数据地址赋值语句
字符名称DATA表达式
AADATA35H
表达式可为数据或地址,也可包含已定义的“字符名称”,但不能是汇编符号。
DB:
定义字节
[标号:
]DB项或项表
把“项或项表”中的数据依次存放到以左边标号为起始地址的存储单元中
DW:
定义双字节数(字)(高8位放低地址单元)
[标号:
]DW项或项表
定义存储空间
]DS表达式
从标号地址开始预留一定数量的内存单元
BIT:
位地址赋值
字符名称BIT位地址
汇编语言程序设计
1.查表程序设计
DPTR作基址的查表指令
MOVCA,@A+DPTR;
A←(A+DPTR)
步骤:
(1)DPTR←所查表的始址
(2)A←所查表的项数
(3)执行查表指令
PC作基址的查表指令
MOVCA,@A+PC;
A←(A+PC)
(1)A←所查表的项数
(2)查表指令前应放如下指令:
ADDA,#data
其中,data=查表指令到表始址间的指令字节数
(3)执行查表指令
已知R0中有1个0-F的数,编程将其变换成ASCII码。
求解:
(1)采用DPTR作基址
ORG3000H
MOVDPTR,#ASCTAB;
DPTR←ASCTAB
MOVA,R0;
A←项数
ANLA,#0FH;
屏蔽高4位
MOVCA,@A+DPTR;
A←结果
MOVR0,A;
送回R0
SJMP$
ASCTAB:
DB‘0’,‘1’…,‘9’
DB‘A’,‘B’…,‘F’
END
2)采用PC作基址
ORG1000H
ADDA,#data;
A←A+data
MOVCA,@A+PC;
查表
存结果
END
data=查表指令和表始址间的指令字节数=03H
2.
子程序设计
子程序始址应以子程序任务定名
例如:
延时程序可用DELAY
参数传递
入口参数:
子程序所需的原始数据,如SIN(X)中的X
出口参数:
子程序执行后的结果数据,如SIN(0.5)的值
参数传递方法:
(1)R0-R7,A,B…等,放参数本身
(2)Rn,A,B…等,放参数地址
(3)堆栈传送参数
(4)位地址传送参数
主程