深圳高级技工学校电子通信系深圳高级技工学校电子通信系本次任务的目标:要求:1、知道程序的组成和指令的格式2、知道什么是寻址、寻址方式3、8051单片机的寻址方式4、能设计一个控制P1口上8只发光二极管同时亮、灭的程序。目标:将编制的控制P1口上8只发光二极管同时亮、灭的程序生成HEX文件装入CPU中.在PROTUES中仿真.重点难点深圳高级技工学校电子通信系深圳高级技工学校电子通信系深圳高级技工学校电子通信系;跑马灯ORG0000H;从RAM内存地址00开始执行程序AJMPMAIN;跳过中断地址ORG0100H;中断地址范围MAIN:MOVP0,#0FFH;初始化P0口为高电平MOVA,#0FEH;二进制码为11111110值为0的引脚就会亮灯MAIN2:MOVP0,A;由P0口输出ACALLDelay;调用延时子程序RLA;累加器内容左移一位,执行后A中值为11111101AJMPMAIN2;跳转到主程序入口MAINDelay:MOVR7,#200;延时0.1sDelay1:MOVR6,#250DJNZR6,$DJNZR7,Delay1RETEND;结束程序指令标号操作码注解操作数深圳高级技工学校电子通信系操作码操作数注解标号助记符目标操作数,源操作数存放操作结果的目的地操作数的来源MAIN:MOVP0,#0FFH;初始化P0口注:格式中的标点符号的使用深圳高级技工学校电子通信系MCS-51单片机的存储器结构程序存储器数据存储器深圳高级技工学校电子通信系程序存储器程序存储器的结构如图下所示,包括片内和片外程序存储器两个部分。其主要用来存放编好的用户程序和表格常数,它以16位的程序计数器PC作为地址指针,故寻址空间为64KB。返回本节1、程序存储器的结构和地址分配深圳高级技工学校电子通信系64KB外部ROM内部4KBROM(EA=1)外部4KBROM(EA=0)0000H0000H0FFFH0FFFH1000HFFFFH图1程序存储器深圳高级技工学校电子通信系2、程序存储器的入口地址0000H:程序入口地址。复位后PC=0000H,程序将自动从0000H地址单元开始取指令执行。0003H:外部中断0入口地址。000BH:定时器0溢出中断入口地址。0013H:外部中断1入口地址。001BH:定时器1溢出中断入口地址。00023H:串行口中断入口地址。0002BH:定时器2溢出中断入口地址(仅AT89S52/C52)深圳高级技工学校电子通信系数据存储器1、片内数据存储器片内数据存储器结构如图(a)所示;其具体位地址单元如表2-1所示;专用寄存器的地址映像如表2所示。深圳高级技工学校电子通信系外部RAM(I/O口地址)0000HFFFFH内部数据存储器(a)外部数据存储器(b)图2MCS-51单片机数据存储器结构90H98H特殊功能寄存器中位寻址特殊功能寄存器00H1FH20H2FH30H7FH80HFFH80H88HA0HA8HB0HB8HD0HE0HF0H工作寄存器区位寻址区通用RAM区深圳高级技工学校电子通信系表1内部数据存储器中的位地址深圳高级技工学校电子通信系表2特殊功能寄存器地址及功能表深圳高级技工学校电子通信系2.片外数据存储器外部数据存储器又称外部RAM,当片内RAM不能满足数量上的要求时,可通过总线端口和其他I/O口扩展外部数据RAM,其最大容量可达64K字节,其结构如图2(b)所示。在片外数据存储器中,数据区和扩展的I/O口是统一编址的,使用的指令也完全相同,因此,用户在应用系统设计时,必须合理地进行外部RAM和I/O端口的地址分配,并保证译码的唯一性。深圳高级技工学校电子通信系返回目录◆寻址方式是什么?深圳高级技工学校电子通信系寻址方式(找信方式)注:找信是找信的“地址”寻址是找数据的“地址”寻址方式:寻找地址的方式你知道两封信各在哪里?如何找到信的(方式)?深圳高级技工学校电子通信系8051单片机的寻址方式取得操作数的地址的方法叫做寻址方式。寻址方式与计算机的存储空间结构是密切相关的。灵活运用各种寻址方式,可以大大的提高程序的运行效率。立即寻址直接寻址间接寻址寄存器寻址变址寻址相对寻址位寻址深圳高级技工学校电子通信系1、立即寻址目的地目的地操作数指令:MOVP0,#0FFHMOVA,#0FEH#0FFH操作数目的地深圳高级技工学校电子通信系2、直接寻址目的地操作数20HXXH20H内部RAM或SFR寻的是操作数的“地址”!★直接给出地址20H——直接寻址指令:MOVP1,20HMOVP0,AP1是符号地址也是直接寻址你能说出是寻址方式吗?目的址注:直接地址必须是8位的深圳高级技工学校电子通信系MOVP0,#0FFHMOVA,#0FEHMOVP0,AMOVP1,20H你能说出立即寻址与直接寻址的区别吗?操作数操作数的地址数据前面有“#”数据前面没有“#”深圳高级技工学校电子通信系;**********************************************;点亮连在P0口上的八只灯;********************************************ORG0000H;从RAM内存地址00开始执行程序AJMPMAIN;跳过中断地址区ORG0100H;中断地址范围MAIN:MOVP0,#0FFH;初始化P0、P1、P2口为高电平MOVP0,#00H;置P0口为低电平,点亮引脚上8只LED指示灯AJMP$;死循环END;结束程序;;***********************************************深圳高级技工学校电子通信系3、寄存器寻址寄存器目的地寄存器操作数XXH目的址R0~R7ADPTR指令:MOVP0,AMOVR7,#200目的地址也可以是寄存器深圳高级技工学校电子通信系1号箱4、寄存器间接寻址目的址2号箱2号箱目的地寄存器操作数35H35H内部RAM23H23HR0R1DPTR寄存器间接寻址寄存器指令:MOVA,@R0注:寄存器前面要加“@”寻到的是操作数地址的地址深圳高级技工学校电子通信系你能说出寄存器寻址与寄存器间接寻址的区别?深圳高级技工学校电子通信系1.以A为目的操作数(4条指令)MOVA,Rn;A←(Rn)MOVA,direct;A←(direct)MOVA,@Ri;A←((Ri))MOVA,#data;A←data如:MOVR0,#40H;MOV40H,#02H;MOVA,R0;A←(R0),MOVA,40H;A←(40H),MOVA,@R;A←((R0))MOVA,#04H;A←#04H,40H02H40H02H(R0)=(40H)=(A)=(A)=((R0))=02H(A)=(R0)=40H(A)=04H注:Rn(R0~R7)Ri(R0、R1)direct(一般30H~7FHP0~P3)深圳高级技工学校电子通信系2.以Rn(R0~R7)为目的操作数MOVRn,A;Rn←(A)MOVRn,direct;Rn←(direct)MOVRn,#data;Rn←data如:MOVA,#30H;MOV30H,#25H;MOVR4,A;R4←(A),MOVR2,30H;R2←(30H)MOVR7,#100H;R7←#100H(R7)=100H(A)=30H(30H)=25H(R4)=30H(R2)=25H深圳高级技工学校电子通信系3.以直接地址为目的操作数MOVdirect,AMOVdirect,RnMOVdirect,dirrectMOVdirect,@RiMOVdirect,#data;direct(A);direct(Rn);direct((Ri));directdata;direct(direct)深圳高级技工学校电子通信系如:MOVA,#FEHMOVP1,AMOVP0,#FDHMOVR0,#50HMOV30H,@R0你能说出A,P0,P1,R0,30H中的数据是多少吗?深圳高级技工学校电子通信系4.以间接地址(Ri为R0或R1)为目的操作数MOV@Ri,A;(Ri)←AMOV@Ri,direct;(Ri)←(direct)MOV@Ri,#data;(Ri)←#data例如:MOV@R0,A;(R0)←AMOV@R1,30H;(R1)←(30H)MOV@R0,#02H;(R0)←#02H设(30H)=6FH,R1=40H,执行MOV@R1,30H想想看,40H单元中的数据是多少?深圳高级技工学校电子通信系5.以DPTR为目的操作数MOVDPTR,#data16;DPTR←#data16;DPL←#dataL,DPH←#dataH例如:执行MOVDPTR,#2000H后,(DPTR)=?即:(DPL)=?(DPH)=?深圳高级技工学校电子通信系灯两两分别向左右两边移动ORG0000H;从RAM内存地址00开始执行程序AJMPMAIN;跳过中断地址区ORG0100H;中断地址范围MAIN:MOVP0,#0FFH;初始化P0、P1、P2口为高电平MOVP1,#0FFH;花样从中间开始亮起START:MOVA,#0F7HMOVP0,AACALLDELAY;调用延时子程序MOVA,#0DBHMOVP0,AACALLDELAY;调用延时子程序MOVA,#0BDHMOVP0,AACALLDELAY;调用延时子程序MOVA,#7EHMOVP0,AACALLDELAY;调用延时子程序;每一花样走完停顿一下再走新的花样MOVP0,#0FFHACALLDELAYAJMPSTART;跳转到花样灯开始的地方;延时子程序先从后面借用,并照抄DELAY:MOVR7,#10;延时约1SDELAY01:MOVR6,#200DELAY02:MOVR5,#250DELAY03:DJNZR5,DELAY03DJNZR6,DELAY02DJNZR7,DELAY01RET;返回END;结束程序深圳高级技工学校电子通信系5、变址寻址基址寄存器1100H变址寄存器50H+ROM1150H1150H目的地23H23HDPTRPCAA指令:MOVCA,@A+DPTRMOVCA,@A+PC变址寻址主要用于查常数表查表指令深圳高级技工学校电子通信系将PC或DPTR的值作为基地址,将Acc的值作为变址地址,二者相加得到的值作为操作数的地址,如:MOVCA,@A+DPTR;A←((A)+(DPTR))这种寻址方式一般用于常数表,DPTR的内容为表头地址,Acc的内容就是数据在表中的位置。PC操作码程序存储器SFRA100100111EH02HALU030FHXXDPHDPLF1H02F1H02F1H+1EH=030FHXX深圳高级技工学校电子通信系ORG0000HAJMPMAINORG0100HMAIN:MOVP0,#0FFHMOVDPTR,#TABLEST1:MOVA,#00HMOVCA,@A+DPTRCJNEA,#01H,ST2AJMPMAINST2:MOVP0,AACALLDELAYINCDPTRAJMPST1;跳转到花样灯开始的地方;延时子程序先从后面借用,并照抄DELAY:MOVR7,#10;延时约1SDELAY01:MOVR6,#200DELAY02:MOVR5,#250DELAY03:DJNZR5,DELAY03DJNZR6,DELAY02DJNZR7,DELAY01RET;返回TABLE:DB0E7H,0DBH,0BDH,7EH,0FFHDB7EH,0BDH,0DBH,0E7H,0FFHDB01HEND;结束程序深圳高级技工学校电子通信系ORG0000H;从RAM内存地址00开始执行程序AJMPSTART;跳过中断地址区ORG0100H;中断地址范围START:MOV30H,#10MOVDPTR,#2000H;传送数据的源地址PUSHDPL;保存源地址PUSHDPHMOVDPTR,#3000H;传送数据的目的地址MOVR2,DPL;保存目的地址MOVR3,DPHST1:POPDPH;取源地