第3章AT89C51单片机指令系统
难点
?MCS-51单片机的寻址方式
?数据传送指令和算术运算指令的使用
?位操作和控制转移类指令的使用
要求
掌握:
?MCS-51单片机的寻址方式
?指令系统的基本格式
?指令系统的操作功能
了解:
?指令系统的基本格式
?操作数的使用方法
?指令系统的操作过程
3.1 MCS-51单片机指令格式
3.2 寻址方式
3.3 指令系统
3.1 MCS-51单片机指令格式
计算机的指令系统是表征计算机性能的重要指标,每种计算机都有自己的指令系统。MCS—51单片机的指令系统是一个具有255种代码的集合,绝大多数指令包含两个基本部分:操作码和操作数。操作码表明指令要执行的操作的性质;操作数说明参与操作的数据或数据所存放的地址。
MCS—51指令系统中所有程序指令是以机器语言形式表示,可分为单字节、双字节、三字节3种格式。
用二进制编码表示的机器语言由于阅读困难,且难以记忆。因此在微机控制系统中采用汇编语言指令来编写程序。本章介绍MCS—51指令系统就是以汇编语言来描述的。
表3-1汇编指令与指令代码
标号:操作码目的操作数,源源操作数;注释
标号与操作码之间“:”隔开;
操作码与操作数之间用“空格”隔开;
目的操作数和源源操作数之间有“,”分隔;
操作数与注释之间用“;”隔开。
标号是由用户定义的符号组成,必须用英文大写字母开始。标号可有可无,若一条指令中有标号,标号代表该指令所存放的第一个字节存储单元的地址,故标号又称为符号地址,在汇编时,把该地址赋值给标号。
操作码是指令的功能部分,不能缺省。MCS—51指令系统中共有42种助记符,代表了33种不同的功能。例如MOV是数据传送的助记符。
操作数是指令要操作的数据信息。根据指令的不同功能,操作数的个数有3、2、1或没有操作数。例如MOV A,#20H,包含了两个操作数A和#20H,它们之间用“,”隔开。注释可有可无,加入注释主要为了便于阅读,程序设计者对指令或程序段作简要的功能说明,在阅读程序或调试程序时将会带来很多方便。
3.2 寻址方式
所谓寻址方式,通常是指某一个CPU指令系统中规定的寻找操作数所在地址的方式,或者说通过什么的方式找到操作数。寻址方式的方便与快捷是衡量CPU性能的一个重要方面,MCS—51单片机有七种寻找方式。
3.2.1 立即数寻址
立即寻址方式是操作数包括在指令字节中,指令操作码后面字节的内容就是操作数本身,其数值由程序员在编制程序时指定,以指令字节的形式存放在程序存储器中。立即数只能作为源操作数,不能当作目的操作数。
例如:MOV A,#52H ;A←52H
MOV DPTR,#5678H ;DPTR←5678H
立即寻址示意图如3.1所示。
图3.1 立即寻址示意图
3.2.2直接寻址
在指令中含有操作数的直接地址,该地址指出了参与操作的数据所在的字节地址或位地址。
例如:MOV A,52H ;把片内RAM字节地址52H单元的内容送累加器A中。
MOV 52H,A ;把A的内容传送给片内RAM的52H单元中。
MOV 50H,60H ;把片内RAM字节地址60H单元的内容送到50H单元中。
MOV IE,#40H ;把立即数40H送到中断允许寄存器IE。IE为专用功能寄存器,其字节地
址为0A8H。该指令等价于MOV 0A8H,#40H。
INC 60H ;将地址60H单元中的内容自加1。
图3.2直接寻址方式示意图
在MCS-51单片机指令系统中,直接寻址方式可以访问2种存储空间:
(1)内部数据存储器的低128个字节单元(00H~7FH)
(2)80H~FFH中的(SFR)特殊功能寄存器。
这里要注意,指令MOV A,#52H与MOV A,52H指令的区别,后者表示把片内RAM字节地址为52H单元的内容传送到累加器(A)。
3.2.3寄存器寻址
由指令指出某一个寄存器中的内容作为操作数,这种寻址方式称为寄存器寻址。寄存器一般指累加器A和工作寄存器R0~R7。例如:
MOV A,Rn ;A←(Rn)其中n为0~7之一,Rn是工作寄存器。
MOV Rn,A ;Rn←(A)
MOV B,A ;B←(A)
寄存器寻址方式的寻址范围包括:
·寄存器寻址的主要对象是通用寄存器,共有4组32个通用寄存器,但寄存器寻址只能使用当前寄存器组。因此指令中的寄存器名称只能是R0~R7。在使用本指令前,需通过对PSW中RS1、RS0位的状态设置,来进行当前寄存器组的选择。
·部分专用寄存器。累加器A、B寄存器以及数据指针DPTR等。
3.2.4寄存器间接寻址方式
由指令指出某一个寄存器的内容作为操作数,这种寻址方式称为寄存器间接寻址。这里要注意,在寄存器间接寻址方式中,存放在寄存器中的内容不是操作数,而是操作数所在的存储器单元地址。
寄存器间接寻址只能使用寄存器Ro或Rl作为地址指针,来寻址内部RAM(00H~FFH)中的数据。寄存器间接寻址也适用于访问外部RAM,可使用R0,Rl或DPTR作为地址指针。寄存器间接寻址用符号“@”表示。例如:
MOV R0,#60H ;R0←60H
MOV A,@R0 ;A ← ((R0))
MOV A ,@R1 ;A ← ((R1))
指令功能是把Ro或R1所指出的内部RAM地址60H单元中的内容送累加器A。假定(60H)=3BH,则指令的功能是将3BH这个数送到累加器A。
例如,MOV DPTR,#3456H ;DPTR←3456H
MOVX A,@DPTR ;A ←((DPTR))
是把DPTR寄存器所指的那个外部数据存储器(RAM)的内容传送给A,假设
(3456H)=99H,指令运行后(A)=99H。
同样,MOVX @DPTR,A;MOV @R1,A;也都是寄存器间接寻址方式。寄存器间接寻址方式的示意图如图3.3所示。
图3.3 寄存器间接寻址方式示意图
3.2.5位寻址
MCS-51单片机中设有独立的位处理器。位操作指令能对内部RAM中的位寻址区(20H~2FH)和某些有位地址的特殊功能寄存器进行位操作。也就是说可对位地址空间的每个位进行位状态传送、状态控制、逻辑运算操作。例如指令
SETB TR0 ;TR0←1
CLR 00H ;(00H)←0
MOV C,57H ;将57H位地址的内容传送到位累加器C中
ANL C,5FH ;将5FH位状态与进位位C相与,结果在C中
3.2.6基址寄存器加变址寄存器间接寻址
这种寻址方式用于访问程序存储器中的数据表格,它以基址寄存器(DPTR或PC)的内容为基本地址,加上变址寄存器A的内容形成16位的地址,访问程序存储器中的数据表格。例如;
MOVC A,@A + DPTR
MOVC A,@A + PC
JMP @A+DPTR
MOVC A,@A+DPTR
图3.4 变址寻址方式示意图
3.2.7相对寻址
相对寻址以程序计数器PC的当前值作为基地址,与指令中给出的相对偏移量rel进行相加,把所得之和作为程序的转移地址。这种寻址方式用于相对转移指令中,指令中的相对偏移量是一个8位带符号数,用补码表示。可正可负,转移的范围为-128~+127。使用中应注意rel的范围不要超出。例如:
JZ LOOP
DJNE R0,DISPLAY
3.3 指令系统
3.3.1 指令分类
MCS-51指令系统有42种助记符,代表了33种功能,指令助记符与各种可能的寻址方式相结合,共构成111条指令。在这些指令中,单字节指令有49条,双字节指令有45条,三字节指令有17条;从指令执行的时间来看,单周期指令有64条,双周期指令有45条,只有乘法、除法两条指令的执行时间是4个机器周期。
按指令的功能,MCS-51指令系统可分为下列5类:
(1)数据传送类指令(29条)
(2)算术运算类指令(24条)
(3)逻辑运算及移位类指令(24条)
(4)位操作类指令(17条)
(5)控制转移类指令(17条)
在分类介绍指令前,先把描述指令的一些符号的意义作一简单介绍。
R n―当前选定的寄存器区中的8个工作寄存器R0~R7,即n=0~7。
Ri―当前选定的寄存器区中的2个寄存器R0、R1,i=0、1。
Direct—8位内部RAM单元的地址,它可以是一个内部数据区RAM单元(00H~7FH)或特殊功能寄存器地址(I/O端口、控制寄存器、状态寄存器80H~0FFH)。
#data—指令中的8位常数。
#data16—指令中的16位常数。
addr16—16位的目的地址,用于LJMP、LCALL,可指向64KB程序存储器的地址空间。
addr11—11位的目的地址,用于AJMP、ACALL指令。目的地址必须与下一条指令的第一个字节在同一个2KB程序存储器地址空间之内。
rel—8位带符号的偏移量字节,用于SJMP和所有条件转移指令中。偏移量相对于下一条指令的第一个字节计算,在—128~+127范围内取值。
bit—内部数据RAM或特殊功能寄存器中的可直接寻址位。
DPTR—数据指针,可用作16位的地址寄存器。
A—累加器
B—寄存器,用于MUL和DIV指令中。
C—进位标志或进位位。
@—间接寄存器或基址寄存器的前缀,如@Ri,@DPTR。
/—位操作的前缀,表示对该位取反。
(X)—X中的内容。
((X))—由X寻址的单元中的内容。
←—箭头左边的内容被箭头右边的内容所替代。
3.3.2 数据传送类指令
数据传送类指令一般的操作是把源操作数传送到指令所指定的目标地址。指令执行后,源操作数保持不变,目的操作数为原操作数所替代
数据传送类指令用到的助记符有:MOV,MOVX,MOVC,XCH,XCHD,PUSH,POP,SWAP。
数据一般传送指令的助记符“MOV”表示
格式:MOV [目的操作数],[源操作数]
功能:目的操作数←(源操作数中的数据)
源操作数可以是:A、Rn、direct、@Ri、#data
目的操作数可以是:A、Rn、direct、@Ri
数据传送指令一般不影响标志,只有一种堆栈操作可以直接修改程序状态字PSW,这样,可能使某些标志位发生变化。
1.以累加器为目的操作数的内部数据传送指令
MOV A,Rn;A←(Rn)
MOV A,direct;A←(direct)
MOV A,@Ri;A←((Ri))
MOV A,#data;A←data
这组指令的功能是:把源操作数的内容送入累加器A。例如:MOV A,#10H,该指令执行时,将立即数10H(在ROM中紧跟在操作码后)送入累加器A中。
2.数据传送到工作寄存器Rn的指令
MOV Rn,A;Rn←(A)
MOV Rn,direct;Rn←(direct)
MOV Rn,#data;Rn←data
这组指令的功能是:把源操作数的内容送入当前工作寄存器区的R0~R7中的某一个寄存器。指令中Rn在内部数据存储器中的地址由当前的工作寄存器区选择位RS1、RS0确定,可以是00H~07H、08H~0FH、10H~17H、18H~1FH。例如:MOV R0,A,若当前RS1、RS0设置为00(即工作寄存器0区),执行该指令时,将累加器A中的数据传送至工作寄存器R0(内部RAM 00H)单元中。
3.数据传送到内部RAM单元或特殊功能寄存器SFR的指令
MOV direct,A;direct←(A)
MOV direct,Rn ;direct←(Rn)
MOV direct1,direct2 ;direct1←(direct2)
MOV direct,@Ri;direct←((Ri))
MOV direct,#data ;direct←#data
MOV@Ri,A ;(Ri←(A)
MOV@Ri,direct ;(Ri)←(direct)
MOV@Ri,#data ;(Ri)←data
MOV DPTR,#data16 ;DPTR←data16
这组指令的功能是:把源操作数的内容送入内部RAM单元或特殊功能寄存器。其中第三条指令和最后一条指令都是三字节指令。第三条指令的功能很强,能实现内部RAM之间、
特殊功能寄存器之间或特殊功能寄存器与内部RAM之间的直接数据传送。最后一条指令是将16位的立即数送入数据指针寄存器DPTR中。
片内数据RAM及寄存器的数据传送指令MOV、PUSH和POP共18条,如图3.5所示。
图3.5 片内RAM及寄存器的数据传送指令
4.累加器A与外部数据存储器之间的传送指令
MOVX A,@DPTR;A←(DPTR)
MOVX A,@Ri ;A←((Ri))
MOVX@DPTR,A;(DPTR)←A
MOVX@Ri,A;(Ri)← A
这组指令是:在累加器A与外部数据存储器RAM单元或I/O口之间进行数据传送前两条指令执行时,P3.7引脚上输出有效信号,用作外部数据存储器的读选通信号;后两条指令执行时,P3.6引脚上输出有效信号,用作外部数据存储器的写选通信号。DPTR
所包含的16位地址信息由P0(低8位)和P2(高8位)输出,而数据信息由P0口传送,P0口作分时复用的总线。由Ri作为间接寻址寄存器时,P0口上分时Ri指定的8位地址信息及传送8位数据,指令的寻址范围只限于外部RAM的低256个单元。
片外数据存储器数据传送指令MOVX共4条,如图3.6所示。
图 3.6 片外数据存储器数据传送指令
5.程序存储器内容送累加器
MOVC A,@A+PC
MOVC A,@A+DPTR
这是两条很有用的查表指令,可用来查找存放在外部程序存储器中的常数表格。第一条指令是以PC作为基址寄存器,A的内容作为无符号数和PC的内容(下一条指令的起始地址)相加后得到一个16位的地址,并将该地址指出的程序存储器单元的内容送到累加器A。这条指令的优点是不改变特殊功能寄存器PC的状态,只要根据A的内容就可以取出表格中的常数。缺点是表格只能放在该条指令后面的256个单元之中,表格的大小受到了限制,而
且表格只能被一段程序所利用。
第二条指令是以DPTR作为基址寄存器,累加器A的内容作为无符号数与DPTR内容相加,得到一个16位的地址,并把该地址指出的程序存储器单元的内容送到累加器A。这条指令的执行结果只与指针DPTR及累加器A的内容有关,与该指令存放的地址无关,因此,表格的大小和位置可以在64KB程序存储器中任意安排,并且一个表格可以为各个程序块所公用。
程序存储器查表指令MOVC共2条,如图3.7所示。
图3.7 片外数据存储器数据传送指令
6.堆栈操作指令
PUSH direct
POP direct
在MCS-51单片机的内部RAM中,可以设定一个先进后出、后进先出的区域,称其为堆栈。在特殊功能寄存器中有一个堆栈指针SP,它指出栈顶的位置。进栈指令的功能是:首先将堆栈指针SP的内容加1,然后将直接地址所指出的内容送入SP所指出的内部RAM 单元;出栈指令的功能是:将SP所指出的内部RAM单元的内容送入由直接地址所指出的字节单元,接着将SP的内容减1。
例如:进入中断服务程序时,把程序状态寄存器PSW、累加器A、数据指针DPTR进栈保护。设当前SP为60H。则程序段
PUSH PSW
PUSH ACC
PUSH DPL
PUSH DPH
执行后,SP内容修改为64H,而61H、62H、63H、64H单元中依次栈入PSW、A、DPL、DPH的内容,当中断服务程序结束之前,如下程序段(SP保持64H不变)POP DPH
POP DPL
POP ACC
POP PSW
指令执行之后,SP内容修改为60H,而64H、63H、62、61H单元的内容依次弹出到DPH、DPL、A、PSW中。
MCS-51提供一个向上的堆栈,因此SP设置初值时,要充分考虑堆栈的深度,要留出适当的单元空间,满足堆栈的使用。
7.字节交换指令
数据交换主要是在内部RAM单元与累加器A之间进行,有整字节和半字节两种交换。
(1)整字节交换指令
XCH A,Rn;(A) (Rn)
XCH A,direct;(A) (direct)
XCH A,@Ri;(A) ((Ri))
(2)半字节交换指令
字节单元与累加器A进行低4
位的半字节数据交换。只有一条
指令。
XCHD A,@Ri
(3)累加器高低半字节交换指令
只有一条指令:
SWAP A
【例3-1】(R0)=30H,(A)=65H,(30H)=8FH 执行指令:XCH A,@R0 ;(R0)=30H,(A)=8FH,(30H)=65H
XCHD A,@R0 ;(R0)=30H,(A)=6FH,(30H)=85H
SW AP A ;(A)=56H
数据交换指令XCH、XCHD、和SW AP共5条,如图3.8所示。
图3.8 数据交换指令
3.3.3 算术运算类指令
算术运算类指令共有24条,包括加、减、乘、除4种基本算术运算指令,这4种指令能对8位的无符号数进行直接运算,借助溢出标志,可对带符号数进行补码运算;借助进位标志,可实现多精度的加、减运算,同时还可对压缩的BCD码进行运算,其运算功能较强。算术指令用到的助记符共有8种:ADD、ADDC、INC、SUBB、DEC、DA 、MUL、DIV。
算术运算指令执行结果将影响进位标志(Cy),辅助进位标志(Ac)、溢出标志位(Ov)。但是加1和减1指令不影响这些标志。对标志位有影响的算术运算指令见表3-10中,×表示指令运算的结果使该标志位置位或复位。
1.加法指令
加法指令分为普通加法指令、带进位加法指令和加1指令。
(1)普通加法指令
ADD A,Rn ;A←(A)+(Rn)
ADD A,direct ;A←(A)+(direct)
ADD A,@Ri ;A←(A)+((Ri))
ADD A,#data ;A←(A)+ data
这组指令的功能是将累加器A的内容与第二操作数相加,其结果放在累加器A中。相加过程中如果位7(D7)有进位,则进位标志Cy置“1”,否则清“0”;如果位3(D3)位有进位,则辅助进位标志Ac置“1”,否则清“0”。
对于无符号数相加,若Cy置“1”,说明和数溢出(大于255)。对于带符号数相加时,和数是否溢出(大于+127或小于-128),则可通过溢出标志OV来判断,若OV置为“1”,说明和数溢出。
【例3-2】(A)=85H,R0=20H,(20H)=0AFH,执行指令:
ADD A,@R0
结果:(A)=34H;Cy=1;AC=1;OV=1。
对于加法,溢出只能发生在两个加数符号相同的情况。在进行带符号数的加法运算时,溢出标志OV是一个重要的编程标志,利用它可以判断两个带符号数相加,和数是否溢出。
(2)带进位加法指令
ADDC A,Rn ;A←(A)+(Rn)+(Cy)
ADDC A,direct ;A←(A)+(direct)+(Cy)
ADDC A,@Ri ;A←(A)+((Ri))+(Cy)
ADDC A,#data ;A←(A)+ data+(Cy)
这组指令的功能与普通加法指令类似,唯一的不同之处是,在执行加法时,还要将上一次进位标志Cy的内容也一起加进去,对于标志位的影响也与普通加法指令相同。
【例3-3】(A)=85H,(20H)=0FFH,Cy=1执行指令:
ADDC A,20H
结果:(A)=85H;Cy=1;AC=1;OV=0。
(3)增量指令
INC A ;A←(A)+1
INC Rn ;Rn ←(Rn)+1
INC direct ;direct ←(direct)+1
INC @Ri ;(Ri)←((Ri))+1
INC DPTR ;DPTR ←(DPTR)+1
这组指令的功能是:将指令中指出的操作数的内容加1。若原来的内容为0FFH,则加1后将产生溢出,使操作数的内容变成00H,但不影响任何标志。最后一条指令是对16位的数据指针寄存器DPTR执行加1操作,指令执行时,先对低8位指针DPL的内容加1,当产生溢出时就对高8位指针DPH加1,但不影响任何标志。
【例3-4】(A)=12H,(R3)=0FH,(35H)=4AH,(R0)=56H,(56H)=00H 执行如下指令:INC A;执行后(A)=13H
INC R3;执行后(R3)=10H
INC35H;执行后(35H)=4BH
INC@R0;执行后(56H)=01H
(4)十进制调整指令
DA A
这条指令对累加器A参与的BCD码加法运算所获得的8位结果进行十进制调整,使累加器A中的内容调整为二位压缩型BCD码的数。使用时必须注意,它只能跟在加法指令之后,不能对减法指令的结果进行调整,且其结果不影响溢出标志位。
执行该指令时,判断A中的低4位是否大于9,若满足大于则低4位做加6操作;
同样,A中的高4位大于9则高4位加6操作。
例如:有两个BCD数36与45相加,结果应为BCD码81,程序如下:
MOV A,#36H
ADD A,#45H
DA A
这段程序中,第一条指令将立即数36H(BCD码36H)送入累加器A;第二条指令进行如下加法:
得结果7BH;第三条指令对累加器A进行十进制调整,低4位(为0BH)大于9,因此要加6,最后得到调整的BCD码81。
2.减法指令
(1)带进位减法指令
SUBB A,Rn ;A←(A)-(Rn)-(Cy)
SUBB A,direct ;A←(A)-(direct)-(Cy)
SUBB A,@Ri ;A←(A)-(Ri)-(Cy)
SUBB A,#data ;A←(A)-data-(Cy)
这组指令的功能是:将累加器A的内容与第二操作数及进位标志相减,结果送回到累加器A中。在执行减法过程中,如果位7(D7)有借位,则进位标志Cy置“1”,否则清“0”;如果位3(D3)有借位,则辅助进位标志AC置“1”,否则清“0”。若要进行不带借位的减法操作,则必须先将Cy清“0”
(2)减1指令
DEC A ;A←(A)-1
DEC Rn ;Rn←(Rn)-1
DEC direct ;direct←(direct)-1
DEC @Ri ;(Ri)←((Ri))-1
这组指令的功能是:将指出的操作数内容减1。如果原来的操作数为00H,则减1后将产生溢出,使操作数变成0FFH,但不影响任何标志。
3.乘法指令
乘法指令完成单字节的乘法,只有一条指令:MUL AB
这条指令的功能是:将累加器A的内容与寄存器B的内容相乘,乘积的低8存放在累加器A中,高8位存放于寄存器B中,如果乘积超过0FFH,则溢出标志OV置“1”,否则清“0”,进位标志Cy总是被清“0”。
【例3-5】(A)=50H,(B)=0A0H,执行指令:
MUL AB
结果:(B)=32H,(A)=00H(即乘积为3200H),Cy=0,OV=1。
4.除法指令
除法指令完成单字节的除法,只有一条指令:DIV AB 这条指令的功能是:将累加器A中的内容除以寄存器B中的8位无符号整数,所得商的整数部分放在累加器A中,余数部分放在寄存器B中,清进位标志Cy和溢出标志OV为“0”。若原来B中的内容为0,则执行该指令后A与B中的内容不定,并将溢出标志置“1”,在任何情况下,进位标志Cy总是被清“0”。
算术运算类指令包括:ADD、ADDC、SUBB、MUL、DIV、INC、DEC和DA,如图3.9所示。
图3.9 算术运算类指令
3.3.4 逻辑运算指令
逻辑运算指令共有24条,分为简单逻辑操作指令、逻辑与指令、逻辑或指令和逻辑异或指令。逻辑运算指令用到的助记符有CLR、CPL、ANL、ORL、XRL、RL、RLC、RR、RRC。
1.简单逻辑操作指令
CLR A ;对累加器A清“0”
CPL A ;对累加器A按位取反
RL A ;累加器A的内容向左循环移1位
RLC A ;累加器A的内容带进位标志向左循环移1位
RR A ;累加器A的内容向右循环移1位
RRC A ;累加器A的内容带进位标志向右循环移1位
循环左移指令示意图:RL A
循环右移指令示意图:RR A
带进位的循环左移指令示意图:RLC A
带进位的循环右移指令示意图:RRC A
这组指令的功能是:对累加器A的内容进行简单的逻辑操作除了带进位的移位指令外,其他都不影响Cy、AC、OV等标志。示意图可以帮助我们进一步理解循环移位指令。
2.逻辑与指令
ANL A,Rn ;A←(A)∧(Rn)
ANL A,direct ;A←(A)∧(direct)
ANL A,@Ri ;A←(A)∧((Ri))
ANL A,#data ;A←(A)∧ data
ANL direct,A ;direct←(direct)∧(A)
ANL direct,#data ;direct←(direct)∧ data
这组指令的功能是:将两个操作数的内容按位进行逻辑与操作,并将结果送回目的操作数的单元中。
【例3-6】(A)=37H,(R0)=0A9H执行指令:
ANL A,R0
结果:(A)=21H
3.逻辑或指令
ORL A,Rn ;A←(A)∨(Rn)
ORL A,direct ;A←(A)∨(direct)
ORL A,@Ri ;A←(A)∨((Ri))
ORL A,#data ;A←(A)∨ data
ORL direct,A ;direct ←(direct)∨(A)
ORL direct,#data ;direct ←(direct)∨ data
这组指令的功能是:将两个操作数的内容按位进行逻辑或操作,并将结果送回目的操作数的单元中。【例3-7】(A)=37H,(P1)=09H执行指令:
ORL P1,A
结果:(A)=3FH
4.逻辑异或指令
XRL A,Rn ;A←(A)⊕(Rn)
XRL A,direct ;A←(A)⊕(direct)
XRL A,@Ri ;A←(A)⊕((Ri))
XRL A,#data ;A←(A)⊕ data
XRL direct,A ;direct ←(direct)⊕(A)
XRL direct,#data ;direct ←(direct)⊕data
这组指令的功能是:将两个操作数的内容按位进行逻辑异或操作,并将结果送回目的操作数的单元中。
图3.10 逻辑运算类指令
3.3.5 控制转移类指令
控制转移指令共有17条,不包括按布尔变量控制程序转移指令。其中有64K范围的长调用、长转移指令;2KB范围的绝对调用和绝对转移指令;有全空间的长相对转移和一页范围内的短相对转移指令;还有多种条件转移指令。由于MCS-51提供了较丰富的控制转移指令,因此在编程上相当灵活方便。这类指令用到的助记符共有10种:AJMP、LJMP、SJMP、JMP、ACALL、LCALL、JZ、JNZ、CJNE、DJNZ。
1. 无条件转移指令
(1)绝对转移指令
AJMP addr11
这是2KB范围内的无条件跳转指令,执行该指令时,先将PC+2,然后将addr11送入PC10~PC0,而PC15~PC11保持不变。这样得到跳转的目的地址。需要注意的是,目标地址与AJMP后一条指令的第一个字节必须在同一个2KB区域的存储器区域内。这是一条二字节指令,其指令格式为:
操作过程可表示为:PC←(PC)+2
PC10~0←addr11
例如程序存储器的2070H地址单元有绝对转移指令:
2070H AJMP 16AH(00101101010B)
因此指令的机器代码为:
程序计数器Pc当前=PC+2=2070H+02H=2072H,取其高5位00100和指令机器代码给出的11位地址00101101010最后形成的目的地址为:0010 0001 0110 1010B=216AH。
(2)相对转移指令
SJMP rel
执行指令时,先将PC+2,再把指令中带符号的偏移量加到PC上,得到跳转的目的地址送入PC。
目标地址=源地址+2+rel
源地址是SJMP指令操作码所在的地址。相对偏移量rel是一个用补码表示的8位带符号数,转移范围为当前PC值的-128~+127共256个单元。
若偏移量rel取值为FEH(-2的补码),则目标地址等于源地址,相当于动态停机,程序终止在这条指令上,停机指令在调试程序时很有用。MCS-51没有专用的停机指令,若要求动态停机可用SJMP指令来实现:
HERE:SJMP HERE;动态停机(80H,FEH)
或写成:HERE SJMP $;“$”表示本指令首字节所在单元的地址,使用它可省略标号。
(3)长跳转指令
LJMP addr16 ;PC ←addr16
执行该指令时,将16位目标地址addr16装入PC,程序无条件转向指定的目标地址。转移指令的目标地址可在64KB程序存储器地址空间的任何地方,不影响任何标志。
(4)间接转移指令(散转指令)
JMP @A+DPTR ;PC ←(A)+(DPTR)
这条指令的功能是把累加器A中的8位无符号数与数据指针DPTR的16位数相加(模216),相加之和作为下一条指令的地址送入PC中,不改变A和DPTR的内容,也不影响标志。间接转移指令采用变址方式实现无条件转移,其特点是转移地址可以在程序运行中加以改变。例如,当把DPTR作为基地址且确定时,根据A的不同值就可以实现多分支转移,故一条指令可完成多条条件判断转移指令功能。这种功能称为散转功能,所以间接指令又称为散转指令。
2. 条件转移指令
JZ rel ;(A)=0转移
JNZ rel ;(A)≠0转移
这类指令是依据累加器A的内容是否为0的条件转移指令。条件满足时转移(相当于一条相对转移指令),条件不满足时则顺序执行下面一条指令。转移的目标地址在以下一条指令的起始地址为中心的256个字节范围之内(-128~+127)。当条件满足时,PC←(PC)+2+ rel,其中(PC)为该条件转移指令的第一个字节的地址。
3. 比较转移指令
在MCS-51中没有专门的比较指令,但提供了下面4条比较不相等转移指令;
CJNE A,direct,rel ;(A)≠(direct)转移
CJNE A,#data,rel ;(A)≠ data转移
CJNE Rn,#data,rel ;(Rn)≠ data转移
CJNE @Ri,#data,rel ;((Ri))≠ data转移
这组指令的功能是:比较前面两个操作数的大小,如果它们的值不相等则转移。转移地址的计算方法与上述两条指令相同。如果第一个操作数(无符号整数)小于第二个操作数,则进位标志Cy置“1”,否则清“0”,但不影响任何操作数的内容。
4. 减1不为0转移指令
DJNZ Rn,rel;Rn←(Rn)-1≠0转移
DJNZ direct,rel;direct←(direct)-1≠0转移这两条指令把源操作数减1,结果回送到源操作数中去,如果结果不为0则转移。
5. 调用及返回指令
在程序设计中,通常把具有一定功能的公用程序段编成子程序,当子程序需要使用子程序时用调用指令,而在子程序的最后安排一条子程序返回指令,以便执行完子程序后能返回主程序继续执行。
(1)绝对调用指令
ACALL addr11
这是一条2KB范围内的子程序调用指令,其指令格式为;
执行该指令时,PC ←PC+2
SP←(SP)+1,(SP)←(PC)7~0
SP←(SP)+1,(SP)←(PC)15~8
PC10~0←addr11
(2)长调用指令
LCALL addr16
这条指令无条件调用位于16位地址addr16的子程序。执行该指令时,先将PC+3以获得下条指令的首地址,并把它压入堆栈(先低字节后高字节),SP内容加2,然后将16位地址放入PC中,转去执行以该地址为入口的程序。LCALL指令可以调用64KB 范围内任何地方的子程序。指令执行后不影响任何标志。其操作过程如下:
PC ←PC+3
SP←(SP)+1,(SP)←(PC)7~0
SP←(SP)+1,(SP)←(PC)15~8
PC10~0←addr16
(3)子程序返回指令
RET
子程序返回指令是把栈顶相邻两个单元的内容弹出送到PC,SP的内容减2,程序返回PC值所指的指令处执行。RET指令通常安排在子程序的末尾,使程序能从子程序返回到主程序。
(4)中断返回指令
RETI
这是指令的功能与RET指令相类似。通常安排在中断服务程序的最后。
(5)空操作指令
NOP;PC ←PC+1
空操作也是CPU控制指令,它没有使程序转移的功能。只消耗一个机器周期的时间。常用于程序的等待或时间的延迟。
图3.11 条件转移类指令
3.3.6 位操作指令
MCS-51单片机内部有一个性能优异的位处理器,实际上是一个一位的位处理器,它有自己的位变量操作运算器、位累加器(借用进位标志Cy)和存储器(位寻址区中的各位)等。MCS-51指令系统加强了对位变量的处理能力,具有丰富的位操作指令。位操作指令的操作对象是内部RAM的位寻址区,即字节地址为20H~2FH单元中连续的128位(位地址
为00H~7FH),以及特殊功能寄存器中可以进行位寻址的各位。位操作指令包括布尔变量的传送、逻辑运算、控制转移等指令,它共有17条指令,所用到的助记符有MOV、CLR、CPL、SETB、ANL、ORL、JC、JNC、JB、JNB、JBC共11种。
在布尔处理机中,进位标志Cy的作用相当于CPU中的累加器A,通过Cy完成位的传送和逻辑运算。指令中位地址的表达方式有以下几种:
(1)直接地址方式:如0A8H;
(2)点操作符方式:如IE.0;
(3)位名称方式:如EX0
(4)用户定义名方式;如用伪指令BIT定义:
WBZD0 BIT EX0
经定义后,允许指令中使用WBZD0代替EX0
以上4种方式都是指允许中断控制寄存器IE中的位0(外部中断0允许位EX0),它的位地址是0A8H,而名称为EX0,用户定义名为WBDZ0。
1. 位数据传送指令
MOV C,bit ;Cy←(bit)
MOV bit,C ;bit←(Cy)
这组指令的功能是:把源操作数指出的布尔变量送到目的操作数指定的位地址单元,其中一个操作数必须为进位标志Cy,另一个操作数可以是任何可直接寻址位。
2.位变量修改指令
CLR C ;Cy ←0
CLR bit ;bit ←0
CPL C ;Cy ←(Cy)
CPL bit ;bit ←(bit)
SETB C ;Cy ←1
SETB bit ;bit ←1
这组指令对操作数所指出的位进行清“0”、取反、置“1”的操作,不影响其它标志。
3.位变量逻辑与指令
ANL C,bit ;Cy ←(Cy)∧(bit)
ANL C,/bit ;Cy ←(Cy)∧(/bit)
4.位变量逻辑或指令
ORL C,bit ;Cy ←(Cy)∨(bit)
ORL C,/bit ;Cy ←(Cy)∨(/bit)
位操作类指令如图3.12所示。
图3.12 位操作类指令
5.位变量条件转移指令
JC rel ;若(Cy)=1,则转移PC←(PC)+2+rel
JNC rel ;若(Cy)=0,则转移PC←(PC)+2+rel
JB bit,rel ;若(bit)=1,则转移PC←(PC)+3+rel
JNB bit,rel ;若(bit)=0,则转移PC←(PC)+3+rel
JBC bit,rel ;若(bit)=1,则转移PC←(PC)+3+rel,并bit←0
这组指令的功能是:当某一特定条件满足时,执行转移操作指令(相当于一条相对转移指令);条件不满足时,顺序执行下面的一条指令。前面4条指令在执行中不改变条件位的布尔值,最后一条指令,在转移时将bit清“0”。
图3.13 位条件转移指令
以上介绍了MCS-51指令系统,理解和掌握本章内容,是应用MCS-51单片机的一个重要前提。
【例3-8】指出下列程序段的每条指令的源操作数是什么寻址方式,并写出每步运算的结果。
【例3-9】用数据传送指令实现下列要求的数据传送。
(1)R0的内容输出到R1。
(2)内部RAM 20H单元的内容传送到A中。
(3)外部RAM 30H单元的内容送到R0。
(4)外部RAM 30H单元的内容送内部RAM20H单元。
(5)外部RAM 1000H单元的内容送内部RAM 20H单元。
(6)程序存储器ROM 2000H单元的内容送R1。
(7)ROM 2000H单元的内容送内部RAM 20H单元。
(8)ROM 2000H单元的内容送外部RAM 30H 单元。
(9)ROM 2000H单元的内容送外部RAM 1000H单元。
解:(1)MOV A,R0
MOV R1,A
(2)MOV A,20H
(3)MOV R0,#30H 或MOV R1,#30H
MOVX A,@R0 MOVX A,@R1
MOV R0,A MOV R0,A
(4)MOV R0,#30H 或MOV R1,#30H
MOVX A,@R0 MOVX A,@R1
MOV 20H,A MOV 20H,A
(5) MOV DPTR,#1000H
MOVX A,@1000H
MOV 20H,A
(6) MOV DPTR,#2000H
CLR A
MOVC A,@A+DPTR
MOV R1,A
(7) MOV DPTR,#2000H
CLR A
MOVC A,@A+DPTR
MOV 20H,A
(8) MOV DPTR,#2000H
CLR A
MOVC A,@A+DPTR
MOV R0,#30H
MOVX @R0,A
(9) MOV DPTR,#2000H
CLR A
MOVC A,@A+DPTR
MOV DPTR,#1000H
MOVX@DPTR,A
第五章AVR单片机指令系统 计算机的指令系统是一套控制计算机操作的代码,称之为机器语言。计算机只能识别和执行机器语言的指令。为了便于人们理解、记忆和使用,通常用汇编语言指令来描述计算机的指令系统。汇编语言指令可通过汇编器翻译成计算机能识别的机器语言。 AVR单片机指令系统是RISC结构的精简指令集,是一种简明易掌握﹑效率高的指令系统。 SL-DIY02-3开发实验器使用AT90S8535单片机,有118条指令, 而我们所做的11个实验程序仅用了34条指令, 我们重点讲这34条指令, 其余指令就可自学了。 AVR器件(指令速查表) 118条指令器件
1.不带进位加法 ADD一不带进位加 说明:两个寄存器不带进位C标志加,结果送目的寄存器Rd。 操作: RdRd+ Rr 语法:操作码:程序计数器: ADD Rd,Rr O≤d≤31,0≤r≤31 PCPC+1 例子:。(实践操作程序实践操作例子*.ASM,必须编译生成*.OBJ文件才可调试,如要修改*.ASM,必须修改文件属性,去掉*.ASM只读文件属性2.带进位加法 ADC-一带进位加 说明:两个寄存器和C标志的内容相加,结果送目的寄存器Rd。 操作: Rd←Rd+Rr+C 语法:操作码:程序计数器: ADC Rd,Rr 0≤d≤31,0≤r≤31 PC←PC+1 例子:(实践操作程序 3.减1指令 DEC一减1 说明:寄存器Rd的内容减1,结果送目的寄存器Rd中。 操作:RdRd-l 语法:操作码:程序计数器: DEC Rd 0≤d≤31 PCPC十1 例子:(实践操作程序 4.立即数比较 CPI——带立即数比较 说明:该指令完成寄存器Rd和常数的比较操作。寄存器的内容不改变。该指令后能 使用所有条件转移指令。 操作:Rd-K 语法:操作码:程序计数器: CPI Rd, K 16≤d≤31, 0≤ K≤255 PCPC + 1
AT89C51单片机的主要工作特性: ·内含4KB的FLASH存储器,擦写次数1000次; ·内含28字节的RAM; ·具有32根可编程I/O线; ·具有2个16位可编程定时器; ·具有6个中断源、5个中断矢量、2级优先权的中断结构; ·具有1个全双工的可编程串行通信接口; ·具有一个数据指针DPTR; ·两种低功耗工作模式,即空闲模式和掉电模式; ·具有可编程的3级程序锁定定位; AT89C51的工作电源电压为5(1±0.2)V且典型值为5V,最高工作频率为24MHz. AT89C51各部分的组成及功能: 1.单片机的中央处理器(CPU)是单片机的核心,完成运算和操作控制,主要包括运算器和控制器两部分。
(1)运算器 运算器主要用来实现算术、逻辑运算和位操作。其中包括算术和逻辑运算单元ALU、累加器ACC、B寄存器、程序状态字PSW和两个暂存器等。 ALU是运算电路的核心,实质上是一个全加器,完成基本的算术和逻辑运算。算术运算包括加、减、乘、除、增量、减量、BCD码运算;逻辑运算包括“与”、“或”、“异或”、左移位、右移位和半字节交换,以及位操作中的位置位、位复位等。 暂存器1和暂存器2是ALU的两个输入,用于暂存参与运算的数据。ALU的输出也是两个:一个是累加器,数据经运算后,其结果又通过内部总线返回到累加器;另一个是程序状态字PSW,用于存储运算和操作结果的状态。 累加器是CPU使用最频繁的一个寄存器。ACC既是ALU处理数据的来源,又是ALU运算结果的存放单元。单片机与片外RAM或I/O扩展口进行数据交换必须通过ACC来进行。 B寄存器在乘法和除法指令中作为ALU的输入之一,另一个输入来自ACC。运算结果存于AB寄存器中。 (2)控制器 控制器是识别指令并根据指令性质协调计算机内各组成单元进行工作的部件,主要包括程序计数器PC、PC增量器、指令寄存器、指令译码器、定时及控制逻辑电路等,其功能是控制指令的读入、译码和执行,并对指令执行过程进行定时和逻辑控制。AT89C51单片机中,PC是一个16位的计数器,可对64KB程序存储器进行寻址。复位时PC的内容是0000H. (3)存储器 单片机内部的存储器分为程序存储器和数据存储器。AT89C51单片机的程序存储器采用4KB的快速擦写存储器Flash Memory,编程和擦除完全是电器实现。 (4)外围接口电路 AT89C51单片机的外围接口电路主要包括:4个可编程并行I/O口,1个可编程串行口,2个16位的可编程定时器以及中断系统等。 AT89C51的工作原理: 1.引脚排列及功能 AT89C51的封装形式有PDIP,TQFP,PLCC等,现以PDIP为例。 (1)I/O口线 ·P0口 8位、漏极开路的双向I/O口。 当使用片外存储器及外扩I/O口时,P0口作为低字节地址/数据复用线。在编程时,P0口可用于接收指令代码字节;程序校验时,可输出指令字节。P0口也可做通用I/O口使用,但需加上拉电阻。作为普通输入时,应输出锁存器配置1。P0口可驱动8个TTL负载。 ·P1口 8位、准双向I/O口,具有内部上拉电阻。 P1口是为用户准备的I/O双向口。在编程和校验时,可用作输入低8位地址。用作输入时,应先将输出锁存器置1。P1口可驱动4个TTL负载。 ·P2 8位、准双向I/O口,具有内部上拉电阻。 当使用外存储器或外扩I/O口时,P2口输出高8位地址。在编程和校验时,P2口接收高字节地址和某些控制信号。 ·P3 8位、准双向I/O口,具有内部上拉电阻。 P3口可作为普通I/O口。用作输入时,应先将输出锁存器置1。在编程/校验时,P3口接收某些控制信号。它可驱动4个TTL负载。 (2)控制信号线
目录 目录 (1) 函数的使用和熟悉********************************/ (4) 实例3:用单片机控制第一个灯亮 (4) 实例4:用单片机控制一个灯闪烁:认识单片机的工作频率 (4) 实例5:将P1口状态分别送入P0、P2、P3口:认识I/O口的引脚功能 (5) 实例6:使用P3口流水点亮8位LED (5) 实例7:通过对P3口地址的操作流水点亮8位LED (6) 实例8:用不同数据类型控制灯闪烁时间 (7) 实例9:用P0口、P1口分别显示加法和减法运算结果 (8) 实例10:用P0、P1口显示乘法运算结果 (9) 实例11:用P1、P0口显示除法运算结果 (9) 实例12:用自增运算控制P0口8位LED流水花样 (10) 实例13:用P0口显示逻辑"与"运算结果 (10) 实例14:用P0口显示条件运算结果 (11) 实例15:用P0口显示按位"异或"运算结果 (11) 实例16:用P0显示左移运算结果 (11) 实例17:"万能逻辑电路"实验 (11) 实例18:用右移运算流水点亮P1口8位LED (12) 实例19:用if语句控制P0口8位LED的流水方向 (13) 实例20:用swtich语句的控制P0口8位LED的点亮状态 (13) 实例21:用for语句控制蜂鸣器鸣笛次数 (14) 实例22:用while语句控制LED (16) 实例23:用do-while语句控制P0口8位LED流水点亮 (16) 实例24:用字符型数组控制P0口8位LED流水点亮 (17) 实例25:用P0口显示字符串常量 (18) 实例26:用P0口显示指针运算结果 (19) 实例27:用指针数组控制P0口8位LED流水点亮 (19) 实例28:用数组的指针控制P0口8位LED流水点亮 (20) 实例29:用P0、P1口显示整型函数返回值 (21) 实例30:用有参函数控制P0口8位LED流水速度 (22) 实例31:用数组作函数参数控制流水花样 (23) 实例32:用指针作函数参数控制P0口8位LED流水点亮 (23) 实例33:用函数型指针控制P1口灯花样 (25) 实例34:用指针数组作为函数的参数显示多个字符串 (26) 实例35:字符函数ctype.h应用举例 (27) 实例36:内部函数intrins.h应用举例 (27) 实例37:标准函数stdlib.h应用举例 (28) 实例38:字符串函数string.h应用举例 (29) 实例39:宏定义应用举例2 (29) 1/192
第一章: 1. 给出下列有符号数的原码、反码和补码(假设计算机字长为8位)。 +45 -89 -6 +112 答:【+45】原=00101101,【+45】反=00101101,【+45】补=00101101 【-89】原=11011001,【-89】反=10100110,【-89】补=10100111 【-6】原=10000110,【-6】反=11111001,【-6】补=11111010 【+112】原=01110000,【+112】反=01110000,【+112】补=01110000 2. 指明下列字符在计算机内部的表示形式。 AsENdfJFmdsv120 答:41H 73H 45H 4EH 64H 66H 4AH 46H 6DH 64H 73H 76H 31H 32H 30H 3.何谓微型计算机硬件?它由哪几部分组成?并简述各部分的作用。 答:微型计算机硬件由中央处理器、存储器、输入/输出设备和系统总线等组成,中央处理器由运算器和控制器组成,是微型计算机运算和控制中心。存储器是用来存放程序和数据的记忆装置。输人设备是向计算机输人原始数据和程序的装置。输出设备是计算机向外界输出信息的装置。I/O接口电路是外部设备和微型机之间传送信息的部件。总线是连接多个设备或功能部件的一簇公共信号线,它是计算机各组成部件之间信息交换的通道。微型计算机的各大功能部件通过总线相连。 4.简述8086CPU的内部结构。 答:8086微处理器的内部分为两个部分:执行单元(EU)和总线接口单元(BIU)。执行部件由运算器(ALU)、通用寄存器、标志寄存器和EU控制系统等组成。EU从BIU的指令队列中获得指令,然后执行该指令,完成指今所规定的操作。总线接口部件BIU由段寄存器、指令指针寄存器、地址形成逻辑、总线控制逻辑和指令队列等组成。总线接口部件负责从内部存储器的指定区域中取出指令送到指令队列中去排队。 5.何谓总线?总线按功能可分为哪几种? 答:总线是连接多个设备或功能部件的一簇公共信号线,它是计算机各组成部件之间信息交换的通道。总线功能来划分又可分为地址总线(Address Bus)、数据总线(Date Bus)和控制总线(Control Bus)三类。 6.内部存储器由哪几部分组成? 答:包括随机存储器(RAM)和只读存储器(ROM)。 7.简述8086中的存储器管理? 答:8086把1M空间分成若干块(称为“逻辑段”),各个逻辑段之间可在实际存储空间中完全分开,也可以部分重叠,甚至可以完全重叠。每个逻辑段容量不超过64K字节,这样就可用16位寄存器提供地址访问。一个存储单元的地址可由段基址和偏移地址组成,这个地址我们称为逻辑地址,一般表示为“段基址:偏移地址”。而1M存储空间中的20位地址称为物理地址。逻辑地址是程序中使用的地址,物理地址是访问存储器的实际地址。 物理地址=段基址×16 + 段内偏移地址 8.什么是接口电路?接口电路有何功能? 答:I/O接口电路是外部设备和微型机之间传送信息的部件。接口电路主要功能。(1) 数据的寄存和缓冲功能。(2) 信号转换功能。(3) 设备选择功能。(4) 外设的控制和监测功能。(5) 中断或DMA管理功能。(6) 可编程功能。 9.外部设备与CPU之间的数据传送方式常见有几种?各有什么特点? 答:外部设备与微机之间的信息传送传送方式一般有无条件传送方式、查询传送方式、中断控制方式等。无条件传送方式是指CPU直接和外部设备之间进行数据传送。查询传送方式又称为条件传送方式,是指CPU通过查询I/O设备的状态决定是否进行数据传输的方式。中断是一种使CPU暂停正在执行的程序而转去处理特殊事件的操作。即当外设的输入数据准备好,或输出设备可以接收数据时,便主动向CPU发出中断请求,CPU可中断正在执行的程序,转去执行为外设服务的操作,服务完毕,CPU再继续执行原来的程序。 10.什么是单片机? 答:单片机是把微型计算机中的微处理器、存储器、I/O接口、定时器/计数器、串行接口、中断系统等电路集成到一个集成电路芯片上形成的微型计算机。因而被称为单片微型计算机,简称为单片机。 11.和一般微型计算机相比,单片机有何特点? 答:主要特点如下: 1) 在存储器结构上,单片机的存储器采用哈佛(Harvard)结构 2) 在芯片引脚上,大部分采用分时复用技术 3) 在内部资源访问上,采用特殊功能寄存器(SFR)的形式
AT89C51单片机的概述 (1)AT89C51单片机的结构 AT89C51单片机是美国Atmel公司生产低电压,高性能CMOS 8位单片机,片内含4k bytes 的可反复擦写的只读程序存储器(EPROM)和128 bytes的随机存取数据存储器(RAM),器件采用Atmel公司的高密度、非易失性存取技术生产,兼容标准MCS-51指令系统,片内置通用8位中央处理器(CPU)和Flash 存储单元,功能强大[3]。AT89C51单片机可提供许多高性价比的应用场合,可灵活应用于各种控制领域。 上图为AT89C51单片机的基本组成功能方块图。由图可见,在这一块芯片上,集成了一台微型计算机的主要组成部分,其中包括CPU、存储器、可编程I/O口、定时器/计数器、串行口等,各部分通过内部总线相连。下面介绍几个主要部分。 外中断控制并行口串行通信 AT89C51 功能方块图 (2)AT89C51的管脚说明 ATMEL公司的AT89C51是一种高效微控制器。采用40引脚双列直插封装形式。AT89C51单片机是高性能单片机,因为受引脚数目的限制,所以有不少引脚具有第二功能。 VCC:供电电压。 GND:接地。 P0口:P0口为一个8位漏级开路双向I/O口,每脚可吸收8TTL门电流。当P1口的管
脚第一次写1时,被定义为高阻输入。P0能够用于外部程序数据存储器,它可以被定义为数据/地址的第八位。在FLASH编程时,P0 口作为原码输入口,当FLASH进行校验时,P0输出原码,此时P0外部必须被拉高。 P1口:P1口是一个内部提供上拉电阻的8位双向I/O口,P1口缓冲器能接收输出4TTL 门电流。P1口管脚写入1后,被内部上拉为高,可用作输入,P1口被外部下拉为低电平时,将输出电流,这是由于内部上拉的缘故。在FLASH编程和校验时,P1口作为第八位地址接收。 P2口:P2口为一个内部上拉电阻的8位双向I/O口,P2口缓冲器可接收,输出4个TTL 门电流,当P2口被写1时,其管脚被内部上拉电阻拉高,且作为输入。并因此作为输入时,P2口的管脚被外部拉低,将输出电流。这是由于内部上拉的缘故。P2口当用于外部程序存储器或16位地址外部数据存储器进行存取时,P2口输出地址的高八位。在给出地址1时,它利用内部上拉优势,当对外部八位地址数据存储器进行读写时,P2口输出其特殊功能寄存器的内容。P2口在FLASH编程和校验时接收高八位地址信号和控制信号。 P3口:P3口管脚是8个带内部上拉电阻的双向I/O口,可接收输出4个TTL门电流。当P3口写入1后,它们被内部上拉为高电平,并用作输入。作为输入,由于外部下拉为低电平,P3口将输出电流。 P3口也可作为AT89C51的一些特殊功能口,如下表所示: P3口管脚备选功能 P3.0 RXD(串行输入口) P3.1 TXD(串行输出口) P3.2 INT0(外部中断0) P3.3 INT1(外部中断1) P3.4 T0(记时器0外部输入) P3.5 T1(记时器1外部输入) P3.6 WR(外部数据存储器写选通) P3.7 RD(外部数据存储器读选通) P3口同时为闪烁编程和编程校验接收一些控制信号。 RST:复位输入。当振荡器复位器件时,要保持RST脚两个机器周期的高电平时间。 ALE/PROG:当访问外部存储器时,地址锁存允许端的输出电平用于锁存地址的地址字节。在FLASH编程期间,此引脚用于输入编程脉冲。在平时,ALE端以不变的频率周期输出正脉冲信号,此频率为振荡器频率的1/6。因此它可用作对外部输出的脉冲或用于定时目的。然而要注意的是:每当用作外部数据存储器时,将跳过一个ALE脉冲。如想禁止ALE 的输出可在SFR8EH地址上置0。此时, ALE只有在执行MOVX,MOVC指令时ALE才起作用。 PSEN:外部程序存储器的选通信号端。在由外部程序存储器取指期间,每个机器周期两次PSEN有效。但在访问外部数据存储器时,这两次有效的/PSEN信号将不出现。
关于习题二答案-单片机的指令系统
1、执行下列3条指令后,30H单元的内容是( C )。 MOV R0,#30H MOV 40H,#0EH MOV @R0,40H A)40H B)30H C)0EH D)FFH 2、在堆栈中压入一个数据时(B)。 A)先压栈,再令SP+1 B)先令SP+1,再压栈 C)先压栈,再令SP-l D)先令SP-1,再压栈 3、在堆栈操作中,当进栈数据全部弹出后,这时的SP应指向 A 。 A)栈底单元 B)7FH
C)栈底单元地址加1 D)栈底单元地址减l 4、指令MOVC A,@A+PC源操作数的寻址方式是 D 。 A)寄存器寻址方式B)寄存器间接寻址方式 C)直接寻址方式D)变址寻址方式 5、ANL 20H,#30H指令中,源操作数的寻址方式是 A 。 A)立即寻址方式B)直接寻址方式 C)位寻址方式D)相对寻址方式 6、ANL C,/30H指令中,源操作数的寻址方式是 C 。
A)立即寻址方式 B)直接寻址方式 C)位寻址方式 D)相对寻址方式 7、Jz rel指令中,操作数rel的寻址方式是 D 。 A)立即寻址方式 B)直接寻址方式 C)位寻址方式 D)相对寻址方式 8、Jz rel指令中,是判断 A 中的内容是否为0。 A)A B) B C) C D)PC 9、MOVX A,@DPTR指令中源操作数的寻址方式是(B)
A)寄存器寻址(B)寄存器间接寻址(C)直接寻址(D)立即寻址 10、下面条指令将MCS-51的工作寄存器置成3区(B) A)MOV PSW,#13H (B)MOV PSW,#18H 11、MOV C,00H指令中源操作数的寻址方式是(A) A)位寻址B)直接寻址 C)立即寻址 D)寄存器寻址 1、8051单片机共有7 种寻址方式。访问外部数据存储器应采用寄存器间接寻址方式。 2、访问外部数据存储器应采用寄存器间接寻址方式;查表应使用变址寻址方式。 3、在8051单片机中,堆栈操作的指令有PUSH 和 POP两个。 4、在8051单片机中,子程序调用的指令有ACALL 和 LCALL两个。 5、CJNE指令都是 3字节字节指令。
单片机期末考试试题库及答案 01、单片机是将微处理器、一定容量的 RAM 和ROM以及 I/O 口、定时器等电路集成在一块芯片上而构成的微型计算机。 2、单片机89C51片内集成了 4 KB的FLASH ROM,共有 5 个中断源。 3、两位十六进制数最多可以表示 256 个存储单元。 4、89C51是以下哪个公司的产品?( C ) A、INTEL B、AMD C、ATMEL D、PHILIPS 5、在89C51中,只有当EA引脚接高电平时,CPU才访问片内的Flash ROM。 6、是非题:当89C51的EA引脚接低电平时,CPU只能访问片外ROM,而不管片内是否有程序存储器。T 7、是非题:当89C51的EA引脚接高电平时,CPU只能访问片内的4KB空间。F 8、当CPU访问片外的存储器时,其低八位地址由 P0 口提供,高八位地址由 P2 口提供,8位数据由 P0 口提供。 9、在I/O口中, P0 口在接LED时,必须提供上拉电阻, P3 口具有第二功能。 10、是非题:MCS-51系列单片机直接读端口和读端口锁存器的结果永远是相同的。F 11、是非题:是读端口还是读锁存器是用指令来区别的。T 12、是非题:在89C51的片内RAM区中,位地址和部分字节地址是冲突的。F 13、是非题:中断的矢量地址位于RAM区中。F 14、MCS-51系列单片机是属于( B )体系结构。 A、冯诺依曼 B、普林斯顿 C、哈佛 D、图灵 15、89C51具有 64 KB的字节寻址能力。 16、是非题:在89C51中,当CPU访问片内、外ROM区时用MOVC指令,访问片外RAM区时用MOVX指令,访问片内RAM区时用MOV指令。T 17、在89C51中,片内RAM分为地址为 00H~7FH 的真正RAM区,和地址为80H~FFH的特殊功能寄存器(SFR) 区两个部分。 18、在89C51中,通用寄存器区共分为 4 组,每组 8 个工作寄存器,当CPU复位时,第 0 组寄存器为当前的工作寄存器。 19、是非题:工作寄存器区不允许做普通的RAM单元来使用。F 20、是非题:工作寄存器组是通过置位PSW中的RS0和RS1来切换的。T 21、是非题:特殊功能寄存器可以当作普通的RAM单元来使用。F 22、是非题:访问128个位地址用位寻址方式,访问低128字节单元用直接或间接寻址方式。T 23、是非题:堆栈指针SP的内容可指向片内00H~7FH的任何RAM单元,系统复位后,SP初始化为00H。F 24、数据指针DPTR是一个 16 位的特殊功能寄存器寄存器。 25、是非题:DPTR只能当作一个16位的特殊功能寄存器来使用。F 26、是非题:程序计数器PC是一个可以寻址的特殊功能寄存器。F 27、在89C51中,一个机器周期包括 12 个振荡周期,而每条指令都由一个或几个机器周期组成,分别有单周期指令、双周期指令和 4周期指令。 28、当系统处于正常工作状态且振荡稳定后,在RST引脚上加一个高电平并维持 2 个机器周期,可将系统复位。 29、是非题:单片机89C51复位后,其PC指针初始化为0000H,使单片机从该地址单元开始执行程序。T 30、单片机89C51复位后,其I/O口锁存器的值为 0FFH ,堆栈指针的值为 07H ,SBUF的值为不定,内部RAM的值不受复位的影响,而其余寄存器的值全部为 0H 。 31、是非题:单片机系统上电后,其内部RAM的值是不确定的。T 32、以下哪一个为51系列单片机的上电自动复位电路(假设RST端内部无下拉电阻)(P39图2-16(a))。 33、在89C51中,有两种方式可使单片机退出空闲模式,其一是任何的中断请求被响应,其二是硬件复位;而只有硬件复位方式才能让进入掉电模式的单片机退出掉电模式。 34、请用下图说明89C51单片机读端口锁存器的必要性。 读锁存器是为了避免直接读端口引脚时,收到外部电路的干扰,而产生的误读现象。 35、请说明为什么使用LED需要接限流电阻,当高电平为+5V时,正常点亮一个LED需要多大阻值的限流电阻(设LED的正常
AVR单片机指令系统 计算机的指令系统是一套控制计算机操作的代码,称之为机器语言。计算机只能识别和执行机器语言的指令。为了便于人们理解、记忆和使用,通常用汇编语言指令来描述计算机的指令系统。汇编语言指令可通过汇编器翻译成计算机能识别的机器语言。 AVR单片机指令系统是RISC结构的精简指令集,是一种简明易掌握﹑效率高的指令系统。 SL-DIY02-3开发实验器使用AT90S8535单片机,有118条指令, 而我们所做的11个实验程序仅用了34条指令, 我们重点讲这34条指令, 其余指令就可自学了。 AVR器件(指令速查表) 118条指令器件 AT90S2313/2323/2343/2333 ,AT90S4414/4433/4434/851 5,AT90S8534/8535算术和逻辑指令 BRCC k
C清零转 位指令和位测试指令ADD Rd,Rr 加法 BRSH k ≥转 SBI P,b 置位I/O位ADC Rd,Rr 带进位加
BRLO k 小于转(无符号) CBI P,b 清零I/O位◇ ADIW Rdl,K 加立即数 BRMI k 负数转移
LSL Rd 左移SUB Rd,Rr 减法 BRPL k 正数转移 LSR Rd 右移SUBI Rd,Rr
减立即数 BRGE k ≥转(带符号) ROL Rd 带进位左循环SBC Rd,Rr 带进位减 BRLT k 小于转(带符号)
ROR Rd 带进位右循环SBCI Rd,K 带C减立即数 BRHS k H置位转移 ASR Rd 算术右移◇ SBIW Rdl,K
AT89C51的概况 一 AT89C51应用 单片机广泛应用于商业:诸如调制解调器,电动机控制系统,空调控制系统,汽车发动机和其他一些领域。这些单片机的高速处理速度和增强型外围设备集合使得它们适合于这种高速事件应用场合。然而,这些关键应用领域也要求这些单片机高度可靠。健壮的测试环境和用于验证这些无论在元部件层次还是系统级别的单片机的合适的工具环境保证了高可靠性和低市场风险。Intel 平台工程部门开发了一种面向对象的用于验证它的AT89C51 汽车单片机多线性测试环境。这种环境的目标不仅是为AT89C51 汽车单片机提供一种健壮测试环境,而且开发一种能够容易扩展并重复用来验证其他几种将来的单片机。开发的这种环境连接了AT89C51。本文讨论了这种测试环境的设计和原理,它的和各种硬件、软件环境部件的交互性,以及如何使用AT89C51。 1.1 介绍 8 位AT89C51 CHMOS 工艺单片机被设计用于处理高速计算和快速输入/输出。MCS51 单片机典型的应用是高速事件控制系统。商业应用包括调制解调器,电动机控制系统,打印机,影印机,空调控制系统,磁盘驱动器和医疗设备。汽车工业把MCS51 单片机用于发动机控制系统,悬挂系统和反锁制动系统。AT89C51 尤其很好适用于得益于它的处理速度和增强型片上外围功能集,诸如:汽车动力控制,车辆动态悬挂,反锁制动和稳定性控制应用。由于这些决定性应用,市场需要一种可靠的具有低干扰潜伏响应的费用-效能控制器,服务大量时间和事件驱动的在实时应用需要的集成外围的能力,具有在单一程序包中高出平均处理功率的中央处理器。拥有操作不可预测的设备的经济和法律风险是很高的。一旦进入市场,尤其任务决定性应用诸如自动驾驶仪或反锁制动系统,错误将是财力上所禁止的。重新设计的费用可以高达500K 美元,如果产品族享有同样内核或外围设计缺陷的话,费用会更高。另外,部件的替代品领域是极其昂贵的,因为设备要用来把模块典型地焊接成一个总体的价值比各个部件高几倍。为了缓和这些问题,在最坏的环境和电压条件下对这些单片机进行无论在部件级别还是系统级别上的综合测试是必需的。Intel Chandler 平台工程组提供了各种单片机和处理器的系统验证。这种系统的验证处理可以被分解为三个主要部分。系统的类型和应用需求决定了能够在设备上执行的测试类型。 1.2 AT89C51提供以下标准功能:
C51单片机编程基本知识 全文选段:该控制指令将C文件编译生成汇编文件(.SRC),该汇编文件可改名后,生成汇编.ASM文件,再用A51进行编译。 第三节 Keil C51软件包中的通用文件 在C51\LiB目录下有几个C源文件,这几个C源文件有非常重要的作用,对它们稍事修改,就可以用在自己的专用系统中。 1. 动态内存分配 init_mem.C:此文件是初始化动态内存区的程序源代码。它可以指定动态内存的位置及大小,只有使用了init_mem( )才可以调回其它函数,诸如malloc calloc,realloc等。 calloc.c:此文件是给数组分配内存的源代码,它可以指定单位数据类型及该单元数目。 malloc.c:此文件是malloc的源代码,分配一段固定大小的内存。 realloc.c:此文件是realloc.c源代码,其功能是调整当前分配动态内存的大小。 全文内容: 本章讨论以下内容: l 绝对地址访问 l C与汇编的接口 l C51软件包中的通用文件 l 段名转换与程序优化 第一节绝对地址访问 C51提供了三种访问绝对地址的方法: 1. 绝对宏: 在程序中,用“#include〈absacc.h〉”即可使用其中定义的宏来访问绝对地址,包括: CBYTE、XBYTE、PWORD、DBYTE、CWORD、XWORD、PBYTE、DWORD 具体使用可看一看absacc.h便知 例如: rval=CBYTE[0x0002];指向程序存贮器的0002h地址 rval=XWORD [0x0002];指向外RAM的0004h地址 2. _at_关键字 直接在数据定义后加上_at_ const即可,但是注意: (1)绝对变量不能被初使化; (2)bit型函数及变量不能用_at_指定。 例如: idata struct link list _at_ 0x40;指定list结构从40h开始。 xdata char text[25b] _at_0xE000;指定text数组从0E000H开始 提示:如果外部绝对变量是I/O端口等可自行变化数据,需要使用volatile关键字进行描述,请参考absacc.h。 3. 连接定位控制 此法是利用连接控制指令code xdata pdata \data bdata对“段”地址进行,如要指定某具体变量地址,则很有局限性,不作详细讨论。 第二节 Keil C51与汇编的接口 1. 模块内接口 方法是用#pragma语句具体结构是: #pragma asm 汇编行
数据传送指令 以累加器A为目的操作数的指令:MOV A,Rn (Rn)→A MOV A,direct (direct)→A MOV A,@Ri (Ri)→A MOV A,#data (#data)→A 以寄存器Rn为目的操作数的指令:MOV Rn,A (A)→Rn MOV Rn,direct (direct)→Rn MOV Rn,#data (#data)→Rn 以直接地址为目的操作数的指令:MOV direct,A (A)→direct MOV direct,Rn (Rn)→direct MOV direct,direct (direct)→direct MOV direct,@Ri (Ri)→direct MOV direct,#data (#data)→direct 以间接地址为目的操作数的指令:MOV @Ri,A (A)→Ri MOV @Ri,direct (direct)→Ri MOV @Ri,#data (data)→Ri 16位数据传送指令: MOV DPTR,#data16 dataH→DPH,dataL→DPL 查表指令: MOVC A,@A+DPTR 先pc+1→pc,后A+DPTR→A,一字节 MOVC A,@A+PC 先pc+1→pc,后A+PC →A,一字节 累加器A与片外RAM传送指令: MOVX A,@Ri Ri→A,且使 =0 MOVX A,@DPTR DPTR→A, 且使=0 MOVX @Ri,A A→Ri, 且使=0 MOVX @DPTR,A A→DPTR, 且使 =0 栈操作指令:入栈 PUSH direct 先SP+1→SP,后 direct→SP 出栈 POP direct先SP→direct,后SP-1→SP 交换指令: 1)字节交换指令 XCH A,Rn A←→Rn XCH A,direct . XCH A,@Ri . 2)低半字节交换指令 XCHD A,@Ri A 0~3 ←→Ri 0~3 3)累加器A中高4位和低4位交换 SWAP A A 0~3 ←→A 4~7 算术运算指令 加法类指令 ADD A ,# data A ←(A)+data ADD A ,direct A ←(A)+(direct)ADD A ,Rn A ←(A)+(Rn)ADD A ,@Ri A ←(A)+((Ri))带进位加法指令 ADDC A ,# data A ←(A)+ data +(CY)ADDC A ,direct A ←(A)+(direct)+(CY)ADDC A ,Rn A ←(A)+(Rn)+(CY)ADDC A ,@Ri A ←(A)+((Ri))+(CY)带借位减法指令 SUBB A ,# data A ←(A) - data -(CY)SUB B A ,direct A ←(A) -(direct)-(CY)SUB B A ,Rn A ←(A) –(Rn)-(CY)SUB B A ,@Ri A ←(A) -((Ri))-(CY)乘法指令 MUL AB BA←(A)×(B)除法指令 DIV AB A←(A)÷(B)之商, B←(A)÷(B)之余数
89C51单片机引脚说明 1.8051的时钟有两种方式,一种是片内时钟振荡方式,但需在18和19脚外接石英晶体(2-12MHz)和振荡电容,振荡电容的值一般取10p-30p 。另外一种是外部时钟方式,即将XTAL1接地,外部时钟信号从XTAL2脚输入。 2.Pin9:RESET/V pd 复位信号复用脚,当8051通电,时钟电路开始工作,在RESET 引脚上出现24个时钟周期以上的高电平,系统即初始复位。8051的复位方式可以是自动复位,也可以是手动复位,此外,RESET/V pd 还是一复用脚,Vcc 掉电期间,此脚可接上备用电源, 以保证单片机内部RAM 的数据不丢失。 3.Pin29:PESN 当访问外部程序存储器时,此脚输出负脉冲选通信号,PC 的16位地址数据将出现在P0和P2口上,外部程序存储器则把指令数据放到P0口上,由CPU 读入并执行。 4.Pin30:ALE/当访问外部程序器时,ALE(地址锁存)的输出用于锁存地址的低位字节。而访问内部程序存储器时,ALE 端将有一个1/6时钟频率的正脉冲信号,这个信号可以用于识别单片机是否工作,也可以当作一个时钟向外输出。 如果单片机是EPROM ,在编程其间,PROG 将用于输入编程脉冲。 5.Pin31:EA/V PP 程序存储器的内外部选通线,8051和8751单片机,内置有4kB 的程序存储器,当EA 为高电平并且程序地址小于4kB 时,读取内部程序存储器指令数据,而超过4kB 地址则读取外部指令数据。如EA 为低电平,则不管地址大小,一律读取外部程序存储器指令。 P3.6/P3.7/ ALE//VP /VP
单片机原理与C51语言程序设计与基础教 程课后习题答案 习题 填空题 1.一般而言,微型计算机包括、、、四个基本组成部分。 2.单片机是一块芯片上的微型计算机。以为核心的硬件电路称为单片机系统,它属于地应用范畴。 3.Atmel 公司生产的CMOS型51系列单片机,具有内核,用 代替ROM作为程序存储器, 4.单片机根据工作温度可分为、和三种。民用级的温度范围是0℃一70℃,工业级是-40℃~85℃,军用级是-55℃-125℃(不同厂家的划分标推可能不同。 5.在单片机领域内,ICE的含义是。 选择题 1.单片机的工作电压一般为V? A 5V B 3V C 1V D 4V 2.单片机作为微机的一种,它具有如下特点: A 具有优异的性能价格比 B 集成度高、体积小、可靠性高 C 控制功能强,开发应用方便 D 低电压、低功耗。 3.民用级单片机的温度范围是: A -40℃~85℃ B 0℃一70℃ C -55℃-125℃ D 0℃一50℃ 4.MCS-51系列单片机最多有个中端源。 A 3 B 4 C 5 D 6 5.下列简写名称中不是单片机或单片机系统的是 A MCU B SCM C ICE D CPU 问答题 1.单片机常用的应用领域有哪些? 2.我们如何学习单片机这么技术? 3.单片机从用途上可分成哪几类?分别由什么用处? 答案
填空题 1.运算器、控制器、存储器、输入输出接口 2.单片机嵌入式系统 3.MCS-51 Flash ROM 4.民用级(商业级) 工业级军用级 5.在线仿真器 选择题 1.A 2.ABCD 3.B 4.C 5.D 问答题 1.单片机广泛应用于仪器仪表、家用电器、医用设备、航空航天、专用设备的智能化管理及过程控制等领域,大致可分如下几个范畴: (1)在智能仪器仪表上的应用 单片机具有体积小、功耗低、控制功能强、扩展灵活、微型化和使用方便等优点,广泛应用于仪器仪表中,结合不同类型的传感器,可实现诸如电压、功率、频率、湿度、温度、流量、速度、厚度、角度、长度、硬度、元素、压力等物理量的测量。采用单片机控制使得仪器仪表数字化、智能化、微型化,且功能比起采用电子或数字电路更加强大。例如精密的测量设备(功率计,示波器,各种分析仪)。 (2)在工业控制中的应用 用单片机可以构成形式多样的控制系统、数据采集系统。例如工厂流水线的智能化管理,电梯智能化控制、各种报警系统,与计算机联网构成二级控制系统等。 (3)在家用电器中的应用 可以这样说,现在的家用电器基本上都采用了单片机控制,从电饭褒、洗衣机、电冰箱、空调机、彩电、其他音响视频器材、再到电子秤量设备,五花八门,无所不在。 (4)在计算机网络和通信领域中的应用 现代的单片机普遍具备通信接口,可以很方便地与计算机进行数据通信,为在计算机网络和通信设备间的应用提供了极好的物质条件,现在的通信设备基本上都实现了单片机智能控制,从手机,电话机、小型程控交换机、楼宇自动通信呼叫系统、列车无线通信、再到日常工作中随处可见的移动电话,集群移动通信,无线电对讲机等。 (5)单片机在医用设备领域中的应用 单片机在医用设备中的用途亦相当广泛,例如医用呼吸机,各种分析仪,监护仪,超声诊断设备及病床呼叫系统等等。 此外,单片机在工商,金融,科研、教育,国防航空航天等领域都有着十分广泛的用途。 2.首先,大概了解单片机的机构,例如本书的第2章则是主要讲了单片机的内部结构以及资源。对单片机的内部结构有了初步了解之后,读者就可以进行简单的实例练习,从而加深对单片机的认识。 其次,要有大量的实例练习。其实,对于单片机,主要是软件设计,也就是编程。目前最流行的用于51系列单片机地编程软件是Keil。Keil提供了包括C编译器、宏汇编、连接器、库管理和一个功能强大的仿真调试器等在内的完整开发方案,通过一个集成开发环境(uVision)将这些部份组合在一起。掌握这一软件的使用对于使用51系列单片机的爱好
51单片机的指令系统及试验 在讲指令系统前我们先来复习一下数制的概念。1. 十进制(Decimal)基数是10,它有10个数字符号,即0,l,2,3,4,5,6,7,8,9。其中最大数码是基数减1,即9,最小数码是0。2.二进制(Binary)基数是2,它 只有两个数字符号,即0和1。这就是说,如果在给定的数中,除0和1外还有其它数,例如 1012,它就决不会是一个二进制数。3、十六进制(Hexadecilnal)基数是16,它有16个数字符号,除了十进制中的10个数可用外,还使用了6个英文字母。它的16个数字依次是0,l,2,3,4,5,6,7,8,9,A,B,C,D,E,F。其中A至F 分别代表十进制数的10至15,最大的数字也是基数减1。 4、二进制数与十六进制数的相互转换。(1)、二进制转换为十六进制:整数部分,从低位开始,小数部分,从高位开始,每四位一组(不够四位的补0),转换为对应的 十六进制数。例:(1 0001 0011.1100 0111)2=(113.C7)H (2)、十六进制转换为二进制:将十六进制数的每一位分别转换为对应的四位二进制数。例:(3E9D)H=(11 1110 1001 1101)B例:( 2ABE)H= 0010 1010 1011 1110B 以后我们在单片机编程方面采用十六进制,这个请大家 注意了!MCS-51系列单片机的指令系统共有111条指令,
其中49条是单字节指令,45条是双字节指令,17条是三字节指令。MCS-51的指令系统共有33个功能,用汇编编程时只需要42个助记符就能指明这33个功能操作。1、指令格式:MCS-51汇编语言指令格式与其他微机的指令格 式一样,均由以下几部分组成:[标号:]操作码 [操作数][,操作数][;注释]标号:又称为指令地址符号,地址的符号化,一般由1到6个字符组成,以字母开头的字母数字串,与操作码之间用冒号分开。操作码:是由助 记符表示的字符串,它规定了指令的操作功能。操作数:是指参加操作的数据和数据的地址。注释:是为该条指 令作说明,以便于阅读。注意:[ ]中表示为可选项。操作数可以为1、2、3个,也可以没有。不同功能的指令,操作数作用不同,如:传送指令多数有两个操作数,写 在左面的是目的操作数(表示操作结果存放的单元地址),写在右面的称为源操作数(指出操作数的来源)。操作码和操作数之间必须用空格分隔,操作数与操作数之间必 须用逗号“,”分隔。带方括号项可有可无,称为可选项。操作码是指令的核心不可缺少。2、指令分类 MCS-51的111条指令分为下面5类:(1)数据传送类 指令29条,分为片内RAM,片外RAM、程序存储器的传送指令,交换及堆栈操作指令。(2)算术运算类24条,分为加,带进位加,减,乘,除,加1,减1指令。(3)
51单片机汇编指令集(入门必备) 一、数据传送类指令(7种助记符) MOV(英文为Move):对内部数据寄存器RAM和特殊功能寄存器SFR的数据进行传送; MOVC(Move Code)读取程序存储器数据表格的数据传送; MOVX (Move External RAM) 对外部RAM的数据传送; XCH (Exchange) 字节交换; XCHD (Exchange low-order Digit) 低半字节交换; PUSH (Push onto Stack) 入栈; POP (Pop from Stack) 出栈; 二、算术运算类指令(8种助记符) ADD(Addition) 加法; ADDC(Add with Carry) 带进位加法; SUBB(Subtract with Borrow) 带借位减法; DA(Decimal Adjust) 十进制调整; INC(Increment) 加1; DEC(Decrement) 减1; MUL(Multiplication、Multiply) 乘法; DIV(Division、Divide) 除法; 三、逻辑运算类指令(10种助记符) ANL(AND Logic) 逻辑与; ORL(OR Logic) 逻辑或; XRL(Exclusive-OR Logic) 逻辑异或; CLR(Clear) 清零; CPL(Complement) 取反; RL(Rotate left) 循环左移; RLC(Rotate Left throught the Carry flag) 带进位循环左移; RR(Rotate Right) 循环右移; RRC (Rotate Right throught the Carry flag) 带进位循环右移; SWAP (Swap) 低4位与高4位交换; 四、控制转移类指令(17种助记符) ACALL(Absolute subroutine Call)子程序绝对调用; LCALL(Long subroutine Call)子程序长调用; RET(Return from subroutine)子程序返回; RETI(Return from Interruption)中断返回; SJMP(Short Jump)短转移; AJMP(Absolute Jump)绝对转移; LJMP(Long Jump)长转移; CJNE (Compare Jump if Not Equal)比较不相等则转移; DJNZ (Decrement Jump if Not Zero)减1后不为0则转移;