您好,欢迎访问三七文档
华中科技大学文华学院单片机原理及接口技术任课教师:范娟华中科技大学文华学院第2章引言2.1寻址方式2.2数据传送与交换指令2.3算术运算和逻辑运算指令2.4控制转移指令2.5位操作指令2.6本章小结华中科技大学文华学院引言一个简单的彩灯设计下图中的8个发光二极管代表8组彩灯,让它们按你的想法显示华中科技大学文华学院引言•汇编语言程序START:MOVA,#0FEH;初始值LOOP:MOVR0,#7LOOPL:MOVP1,ARLA;左移ACALLDELAY;调用延时DJNZR0,LOOPLAJMPLOOPDELAY:MOVR7,#200;延时子程序D1:MOVR6,#250DJNZR6,$DJNZR7,D1RET程序是如何进单片机的?华中科技大学文华学院引言74FE7807F59023110BD8F97FC87EFADEFEDFFA22编程器开发软件WAVE6000keilC51华中科技大学文华学院引言51系列单片机汇编语言指令格式[标号]:操作码[操作数];[注释]标号:又称为指令地址符号①一般由1~8个字符组成,以字母开头,其余字符可以是字母、数字和其他特定字符。②不能使用助记符、伪指令或寄存器的名称做标号。操作码:表示指令要完成的具体操作操作数:是指参加操作的数据或数据的地址,操作数之间用“,”隔开注释:对指令所做的说明,用“;”和指令分开华中科技大学文华学院引言常用符号Rn:工作寄存器中的寄存器R0、R1…R7之一Ri:工作寄存器中的寄存器R0或R1#data:8位立即数#data16:16位立即数direct:8位直接字节地址(片内RAM或SFR地址)@:间接寻址寄存器前缀Bit:片内RAM或SFR的位地址addr11:11位目的地址addr16:16位目的地址rel:补码形式的8位地址偏移量。偏移范围为-128~127/:位操作指令中,该位求反后参与操作,不影响该位X:片内RAM的直接地址或寄存器(X):相应地址单元中的内容华中科技大学文华学院寻址方式MCS-51有7种不同的寻址方式:立即寻址直接寻址寄存器寻址寄存器间接寻址变址寻址相对寻址位寻址华中科技大学文华学院寻址方式立即寻址(ImmediateAddressing)指令中直接给出操作数的寻址方式称为立即寻址。立即数用一个前面加“#”号的8位数或16位数表示,存放在程序存储器中。指令的机器码中立即数在操作符之后,因此立即寻址的指令多为二字节或三字节指令。直接寻址(DirectAddressing)指令中直接给出操作数的字节地址(dir)的寻址方式称为直接寻址。寻址对象:内部数据存储器、SFR、位寻址空间华中科技大学文华学院寻址方式如:MOVA,R0H;设R0的值为40H寄存器寻址(RegisterAddressing)以通用寄存器的内容为操作数的寻址方式称为寄存器寻址。寻址对象:工作寄存器R0~R7、累加器A、寄存器B、数据指针DPTR。R0MOVA,R0XX40H40HA提一个问题:工作寄存器就是内存单元的一部分,如果我们选择工作寄存器组0,则R0就是RAM的00H单元,那么这样一来,MOVA,00H和MOVA,R0不就没什么区别了吗?华中科技大学文华学院寻址方式寄存器间接寻址(RegisterIndirectAddressing)以寄存器中的内容为地址,该地址中的内容为操作数的寻址方式称为寄存器间接寻址。寻址对象:片内RAM(采用@R0,@R1),MOV指令片外RAM(采用@R0,@R1或@DPTR),MOVX指令R0,R1----8位地址,片内低128字节或片外(由P2口提供高8位外部RAM地址)DPTR----16位,片外64KB华中科技大学文华学院寻址方式变址寻址(基址+变址)(Base-Register-plus-Index-Register-IndirectAddressing)以基址寄存器PC或DPTR中内容加上变址寄存器(累加器A)之和形成操作数地址的寻址方式称为变址寻址。这种寻址方式主要用于查表操作,只有读操作无写操作,共有以下三条变址寻址指令。MOVCA,@A+DPTR;(A+DPTR)→AMOVCA,@A+PC;PC+1→PC,(A+PC)→AJMP@A+DPTR;A+DPTR→PC操作数在程序存储器中华中科技大学文华学院寻址方式E0A程序存储区2040H9320E0H472041H………DPH20DPL00ALU如:MOVCA,@A+DPTR;设DPTR=2000H,A=E0H20E0H47指令代码华中科技大学文华学院寻址方式E0A程序存储区ALU如:MOVCA,@A+PC;设A=E0H2121H452040H832121H452041H………2120H47当前PC指令代码华中科技大学文华学院寻址方式相对寻址(RelativeAddressing)以当前PC的内容为基值,加上指令给出的一个字节补码数(偏移量),形成新的PC值的寻址方式称为相对寻址。这种寻址方式主要用于分支转移指令中修改PC值。如:SJMP08H;指令执行后,转移到地址为当前PC+08H处执行程序JC23H;若C=0,不跳转;C=1,跳转。华中科技大学文华学院寻址方式程序存储区ALUJC23H1025H1000H401025H451001H23……1024H471002H3023H1002H指令代码当前PC华中科技大学文华学院寻址方式位寻址(BitAddressing)对位地址中的内容作位操作的寻址方式称为位寻址。位寻址是一种直接寻址方式,由指令给出直接位地址。如:SETB20H;20H位置1CLR20H.0;把字节地址20H的第0位清0ANLC,P;把PSW中P与C相与,结果送CCPLPSW.6;PSW第6位AC取反,结果送AC华中科技大学文华学院寻址方式寻址方式涉及的存储器空间寻址方式寻址空间(操作数存放空间)立即寻址程序存储器直接寻址片内RAM低128字节、SFR寄存器寻址工作寄存器R0~R7,A,B,DPTR寄存器间接寻址片内RAM:@R0,@R1片外RAM:@R0,@R1,@DPTR变址寻址程序存储器:@A+PC,@A+DPTR相对寻址程序存储器256字节范围内:PC+偏移量位寻址片内RAM的位寻址区(20H~2FH字节地址)某些可位寻址的SFR华中科技大学文华学院数据传送与交换指令(29条)除了目的操作数为ACC的指令影响奇偶标志P外,一般不影响标志位。常用助记符:MOV单片机内部RAM中的数据传递MOVX累加器和单片机外部数据存储器间数据传递MOVC累加器和程序存储器之间的数据传递XCH累加器和某个内部RAM单元进行数据交换XCHD累加器和某个内部RAM单元进行低半字节数据交换PUSH将某个内部RAM单元的数据压入堆栈POP将堆栈内的数据弹出操作符目的操作数源操作数华中科技大学文华学院外部RAM外部I/O接口芯片外部ROMMOVCMOVXMOVCMOV内部RAM内部ROMCPUXCHXCHDPUSHPOPSWAP数据传送与交换指令(29条)华中科技大学文华学院一、内部RAM数据传送指令(15条)例:把存放在片内RAM30H单元中的数据送到累加器A中directA@RiRn#data例:(40H)=30H,则执行MOVR7,40H后,R7=?例:把放在片内RAM20H单元的数据0CDH送到30H单元中例:将片内RAM40H的内容与50H的内容交换MOVR0,#40HMOVR1,#50HMOVA,@R0MOVB,@R1MOV@R1,AMOV@R0,BMOVDPTR,#data16指令功能:将一个16位的立即数送入DPTR中去。其中高8位送入DPH,低8位送入DPL。十六位数的传递指令(1条)华中科技大学文华学院二、外部数据传送指令(4条)MOVXA,@Ri/@DPTRMOVX@Ri/@DPTR,A例:现有一输入设备口地址为DE00H,在这个口中已有数据A8H,欲将此值存入片内30H单元中,试编写程序例:将片外RAM2020H单元中的数据传送到4000H单元中去,试编写程序说明:1.在51中,与外部RAM打交道的只可以是累加器A2.在后两条指令中,外部RMA地址是被直接放在DPTR中的。而前两条指令,由于Ri只提供低8位地址,高8位地址由P2口来提供。3.使用时应先将要读或写的地址送入DPTR或Ri中,然后再用读写命令。华中科技大学文华学院三、查表指令(访问程序存储器指令2条)说明:常用此指令来查一个已做好在ROM中的表格。查找到的结果被放在A中,因此,本条指令执行前后,A中的值不一定相同MOVCA,@A+PCMOVCA,@A+DPTR指令功能:将ROM中的数送入A中例:以查表方式求出片内RAM中20H单元数的平方值,存入片内21H单元中。解决方案一:以DPTR为基址寄存器,平方表首址可灵活安排在适当的位置如2000H,即平方表的内容从2000H单元放起。解决方案二:以PC为基址寄存器,此时表格须紧跟程序之后,且要计算好表格首址位置。华中科技大学文华学院四、堆栈操作指令(2条)PUSHdirectPOPdirectPUSH指令功能:先将堆栈指针SP的内容加1,然后把直接寻址单元中的数据压入到SP所指示的单元中。若数据已压入堆栈,则堆栈指针SP指向最后推入数据所在存储单元。POP指令功能:先将堆栈指针SP所指单元内容送入直接寻址单元中,然后将SP的内容减1,此时堆栈指针SP指向新的栈顶。说明:堆栈操作指令时直接寻址方式,直接地址不能是寄存器,因此应注意指令的书写格式。华中科技大学文华学院五、字节交换指令(5条)XCHA,RnXCHA,directXCHA,@RiXCHDA,@RiSWAPA说明:前三条是整字节交换指令,后两条是半字节交换指令。例:试用交换指令使片内20H单元的高4位与21H单元的低4位交换。华中科技大学文华学院算术运算和逻辑运算指令(48条)一、算术运算类指令(24条)ADDA,Rn/direct/@Ri/#data指令功能:将A中的值与源操作数所指内容相加,最终结果存在A中。1.不带进位位的加法指令(4条)2.带进位位的加法指令(4条)ADDCA,Rn/direct/@Ri/#data指令功能:将A中的值和其后面的值以及进位位CY的值相加,最终结果存在A,常用于多字节数运算中。例:将片内RAM中21H,20H单元的16位二进制数与片内RAM中31H、30H单元的16位二进制数相加,并将结果存放到片内RAM的41H,40H单元中。华中科技大学文华学院SUBBA,RnSUBBA,directSUBBA,@RiSUBBA,#data指令功能:将A中的值减去源操作数所指内容以及进位位C中的值,最终结果存在A中。3.带借位的减法指令(4条)说明:没有不带借位的减法指令,如果需要做不带借位的减法指令(在做第一次相减时),只要将CY清零即可。例:已知A=CAH,R2=55H,CY=1,分析“SUBBA,R2”指令的执行结果。华中科技大学文华学院INCAINCRnINCdirectINC@RiINCDPTR指令功能:使操作数所指定的单元的内容加14.加1指令(5条)说明:除了“INCA”影响奇偶标志位外,其余操作均不影响PSW;“INCDPTR”是一条16位加1指令,这条指令在加1过程中,若低8位有进位可直接向高8位进位,不需要通过进位位Cy传送。例:已知A=12H,R0=33H,(21H)=32H,(34H)=22H,DPTR=1234H,连续执行下面的指令。INCAINCR0INC21HINC@R0INCDPTR华中科技大学文华学院DECADECRnDECdirectDEC@Ri指令功能:使操作数所指定的单元的内容减15.减1指令(4条)说明:减1指令中没有DPTR减1指令,要实现DPTR减1运算,需编程实现例:编程实现DPTR减1的运算华中科技大学文华学院DAA指令功能:在进行BCD码加法运算时,跟在ADDC和ADD指令之后,用来对BCD码加法运算结果进行自动修正。6.十进制调整指令(1条)说明:①该指令只对一
本文标题:单片机课件第二章.
链接地址:https://www.777doc.com/doc-2594628 .html