单片机 一纸开材料.docx
- 文档编号:23100559
- 上传时间:2023-04-30
- 格式:DOCX
- 页数:56
- 大小:1.23MB
单片机 一纸开材料.docx
《单片机 一纸开材料.docx》由会员分享,可在线阅读,更多相关《单片机 一纸开材料.docx(56页珍藏版)》请在冰豆网上搜索。
单片机一纸开材料
Chap1
8051/8031系列CPU管脚:
P0(39~32),8位双向三态I/O口,有较大的负载能力。
①8051不带片外存储器时,为通用I/O口,传送输入/输出数据。
②带片外存储器并访问时,先传送低8位地址后传送数据。
P1(1~8),8位准双向I/O口,用于传送输入/输出数据。
8位准双向I/O口。
P2(21~28),①8051不带片外存储器时,为通用I/O口,传送输入/输出数据。
②带片外存储器并访问时,传送高8位地址。
P3(10~17),8位准双向I/O口。
可作普通I/O口和专用口。
P3.0——RXD(串行输入口)
P3.1——TXD(串行输出口)
P3.2——INT0(外部中断0)
P3.3——INT1(外部中断1)
P3.4——T0(定时器0外部输入)
P3.5——T1(定时器1外部输入)
(两个16位可编程定时/计数器,分别由两个8位寄
存器拼装而成。
最大计数值为216-1,即65535。
)
P3.6——WR(外部数据存储器写控制)
P3.7——RD(外部数据存储器读控制)
XTAL1(19):
振荡器输入端(单片机内部反向放大器的输入端)
XTAL2(18):
振荡器输出端(单片机内部反向放大器的输出端)
ALE/PROG(30):
外部存储器地址锁存允许/编程线访问外部存储器,CPU在P0口输出片外存储器低8位地址的同时,在该线上输出一个高电平脉冲,其下降沿用于控制地址锁存;不访问片外存储器时,CPU自动在该线上输出可用作外部时钟源的脉冲序列,频率为振荡器频率的1/6。
EA/VPP(31):
允许访问片外程序存储器/编程电源线
EA接高电位,访问内部程序存储器
EA接低电位,访问外部程序存储器
PSEN(29):
片外ROM选通线。
RST/VPD(9):
复位/备用电源线。
复位时高电位有效。
程序状态寄存器(ProgramStatusWord):
PSW是一个8位标志寄存器,用来存放指令执行后的有关状态。
PSW的格式:
P——奇偶标志位(1为双P=0)AC——半进位位
OV——溢出标志位Cy——进位位F0——用户标志位(用户根据程序执行的需要通过传送指令确定)RS1,RS0——寄存器选择位(用于决定8051的8个8位工作寄存器R0~R7在RAM中的实际物理地址)
RS1,RS0对工作寄存器的选择
IP——中断优先级寄存器
IE——中断允许寄存器
TMOD——计数器方式寄存器
TCON——计数器控制寄存器
SCON——串行口控制寄存器
SBUF——串行口数据缓冲器
PCON——电源控制寄存器
存储器分类
/EA=1/EA=0
程序存储器:
内部(/EA=1,),4K;外部(/EA=0),/PSEN=0,60K;
地址:
0000H—FFFFH,64K单元;使用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;(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
·对PSW标志位均有影响;
·计算机总是按带符号数法则运算,产生PSW标志位。
·两个带符号数相减,运算结果是否溢出应判断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,形成标志
对标志位的影响:
Cy=0;
执行过程中,若发现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;PC15~PC8←(SP),SP←SP-1,
PC7~PC0←(SP),SP←SP-1
在返回断点的同时,释放中断逻辑,接受新的中断请求。
(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项或项表
DB:
定义存储空间
[标号:
]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
MOVA,R0;A←项数
ANLA,#0FH;屏蔽高4位
ADDA,#data;A←A+data
MOVCA,@A+PC;查表
MOVR0,A;存结果
SJMP$
ASCTAB:
DB‘0’,‘1’…,‘9’
DB‘A’,‘B’…,‘F’
END
注意:
data=查表指令和表始址间的指令字节数=03H
2.
子程序设计
·子程序始址应以子程序任务定名
例如:
延时程序可用DELAY
·参数传递
入口参数:
子程序所需的原始数据,如SIN(X)中的X
出口参数:
子程序执行后的结果数据,如SIN(0.5)的值
参数传递方法:
(1)R0-R7,A,B…等,放参数本身
(2)Rn,A,B…等,放参数地址
(3)堆栈传送参数
(4)位地址传送参数
·主程
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 单片机 一纸开材料 一纸开 材料
![提示](https://static.bdocx.com/images/bang_tan.gif)