欢迎来到天天文库
浏览记录
ID:27540130
大小:236.01 KB
页数:46页
时间:2018-12-01
《单片机指令系统及编程举例》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库。
1、微机原理及应用对于任何一台计算机,必须有软件(程序)的支持,才能工作。但是市场上所售的单片机是裸机,在使用之前要现对它编程,将程序固化在芯片内,才能使用。指令系统是一种CPU所能直接执行的所有命令的集合,CPU的主要功能是由它的指令系统来体现的。任何计算机语言编写的任何程序,都必须转换为指令系统中相应指令代码的有序集合,CPU才能执行。单片机的指令系统是单片机能够识别并执行的所有指令的集合。3.1指令系统简介每一种CPU都有其独立的指令系统。MCS-51系列单片机指令系统共有111条指令,其中有49条单字节指令,45条双字节指令和17条三字节指令。MCS-51指令系统的功能十分强大,它把体
2、现单片机的各种功能的寄存器组织在统一的地址空间中,MCS-51指令系统在其存储空间、时间的利用率及工作效率方面都是较高的。1.指令格式MCS-51指令系统中的每一条指令都有两级指令格式:CPU可直接识别并执行的机器语言指令(机器语言)。汇编语言指令(简称汇编指令)。符号说明:见书上.P.34MCS-51汇编语言指令格式,由以下几个部分组成:[标号:]操作码[目的操作数][,源操作数][;注释]例:LOOP:MOVA,R1;AR1MOVA,R1INCANOP3.2寻址方式所谓寻址方式就是寻找或获得操作数的方式。指令的一个重要组成部分是操作数。由寻址方式指定参与运算的操作数或操作数所在单元的
3、地址。MCS-51指令系统的寻址方式有以下7种:1.立即寻址2.直接寻址3.寄存器寻址4.寄存器间接寻址5.变址寻址6.相对寻址7.位寻址立即寻址:操作数直接出现在指令中,可以是8位,也可是16位。该方式寻址中的操作数称为立即数,用“#”表示。例:MOVA,#30H;A30H执行结果:A=30H例:MOVDPTR,#1000H;DPTR1000H执行结果:DPTR=1000H,注意:只有MOVDPTR,#date16指令的立即数为16位,DPTR分为DPH和DPL,在上述例子中,DPH=10H,DPL=00H直接寻址:操作数的地址直接出现在指令中。这类寻址方式的操作数只能是存放在内部R
4、AM和SFR中。(1)SFR例:MOVA,P1执行结果:将P1口的内容送到A中。若P1的内容为78H,执行该指令后,A=78H见.P.23(2)内部RAM的低128字节例:MOVA,76H执行结果:将76H单元的内容送到A中。若(76H)=3FH,执行该指令后,A=3FH注意:若要表示某个单元的内容,将该单元用括号扩起来,如(43H)、(76H)、(R0)等。寄存器寻址:操作数为寄存器的内容。此处的寄存器指的是工作寄存器R0~R7、累加器A、通用寄存器B、数据指针寄存器DPTR和位累加器C(即进位位C)。例:MOVA,R0执行结果:将R0的内容送入A中。若R0的内容(R0)=5AH,则A=
5、5AH寄存器间接寻址:将指定寄存器中的内容作为地址,该地址对应的内容才是操作数,用@表示。例:MOVA,@R0执行结果:将R0的内容作为地址,再将该地址对应的内容送入A中。若(R0)=46H,(46H)=2FH,则:A=((R0))=(46H)=2FH例:MOV@R1,76H执行结果:((R1))(76H)。若(76H)=0FH,(R1)=23H,则:(23H)=0FH变址寻址:以程序指针PC或数据指针DPTR为基址,以累加器A作为变址,两者内容相加(即基址+偏移量)形成16位地址。例:地址目标代码汇编指令21007406MOVA,#06H210283MOVCA,@A+PC210300N
6、OP210400NOP………210932DB32H执行结果分析:当执行到MOVCA,@A+PC时,PC=2103H(基址),A=06H(偏移量),因此@A+PC所示的地址=2103H+06H=2109H,(2109H)=32H,所以A=32H例:MOVA,#01HMOVDPTR,#TABLEMOVCA,@A+DPTRTABLE:DB41HDB42H……执行结果分析:基址的首地址=TABLE偏移量=01H,程序执行到MOVCA,@A+DPTR时,@A+DPTR所指的地址=TABLE+01H,因此,该指令执行后A=42H相对寻址:以PC的当前值为基址,与指令中的第二字节给出的偏移量rel(8位
7、有符号数)相加,所得之和为程序的转移地址。转移范围为+127~-128字节之间。例:SJMP08H;双字节指令分析:若PC=2000H为该条指令的地址,则转移目标地址=2000H+02H+08H=200AH位寻址:对片内RAM的20H~2FH字节地址中的所有位和部分SFR的位进行寻址。区分指令中是位地址还是存储器单元地址不太容易,主要是由另一个操作数来区分。例:SETBEX0;EX01,位寻址MOVC,07H;C(0
此文档下载收益归作者所有