资源预览内容
第1页 / 共61页
第2页 / 共61页
第3页 / 共61页
第4页 / 共61页
第5页 / 共61页
第6页 / 共61页
第7页 / 共61页
第8页 / 共61页
第9页 / 共61页
第10页 / 共61页
亲,该文档总共61页,到这儿已超出免费预览范围,如果喜欢就下载吧!
资源描述
第2章 51单片机的指令系统,单片机原理、接口及应用,内 容 提 要,寻址方式 数据传送与交换指令 算术运算、逻辑运算指令 控制转移指令 位操作指令,计算机通过执行程序完成人们指定的任务,程序由一条一条指令构成,能为CPU识别并执行的指令的集合就是该CPU的指令系统。,指令的格式: LOOP: MOV A, R0 ;将R0的内容送A 标号 操作码 第一操作数 第二操作数 注释 (目的操作数) (源操作数) 寻址方式:寻找(或确定)操作数所在单元地址的方式。 寻址方式越多,计算机寻址能力越强,但指令系统也越复杂。 说明:以下讨论的寻址方式都是针对源操作数的。但实际上目的操作数也有寻址问题。,指令中的常用符号 Rn: n=(07),表示当前工作寄存器R0R7中的一个 Ri: i=(0、1),代表R0和R1寄存器中的一个,用作间接寻址寄存器 dir : 8 位直接字节地址(片内 RAM 和 SFR ) #data: 8位立即数,即8位常数。可以为2进制(B)、10进制、 16进制(H)、 字符( ) #data16: 表示16位立即数,即16位常数,取值范围为#0000H#0FFFFH addr16 : 表示16位地址 addr11 : 表示11位地址 rel : 相对偏移量(为一字节补码)用于相对转移指令中 bit :位地址,在位地址空间中。 $: 表示当前指令的地址。,2.1 寻址方式,1、立即寻址 指令中直接给出操作数的寻址方式。在51系列单片机的指令系统中,立即数用一个前面加 “#“号的8位数(#data,如#30H)或16位数(#data16,如#2052H)表示。立即寻址中的数,称为立即数。 例如指令:MOV A,#30H,2、直接寻址 操作数的地址直接出现在指令中。 寻址对象: 内部数据存贮器:使用它的地址。 特殊功能寄存器:既可使用它的地址,也可以 直接使用寄存器名。,例:MOV A,40H ; A=56H 机器码 E540,MOV P0,#45H ;45HP0, P0为直接寻址的 SFR,其地址为 80H, 机器码为758045,MOV 40H,41H ; 机器码为854140 内部RAM (41H)(40H) (40H)=(41H)=78H,3、寄存器寻址 操作数存放在寄存器中。 寻址对象:A,B,DPTR,R0R7 。 B 仅在乘除法指令中为寄存器寻址,在其他指令中为直接寻址。 A 可以寄存器寻址又可以直接寻址,直接寻址时写作ACC 例如:MOV A,R0 ;R0A,A、R0均为寄 存器寻址,机器码E8 MUL AB ;A*BBA,A、B为寄 存器寻址,机器码A4,MOV B,R0 ;R0B,R0为寄存器寻 址,B为直接寻址 机器码 88F0,其中 F0为B的 字节地址(见表1-2) PUSH ACC ;A的内容压入堆栈 机器码C0E0,4、寄存器间址 操作数存放在以寄存器内容为地址的单元中。 例如: MOV R0,#20H MOV R0,A ;A(20H) 地址的内部RAM MOVX A,R1 ;外部RAM(地址为P2 R1 ) 的 内容A MOVX DPTR,A ;A以DPTR内容为地址的 外部RAM,5、变址寻址 以DPTR或PC寄存器内容为基地址,和A的内容为相加形成操作数的地址。其中累加器A内容是可变的。 例如: MOVC A, A+DPTR 6、相对寻址 相对寻址是将程序计数器PC的当前值与指令第二字节给出的偏移量相加,从而形成转移的目标地址。 例如:JZ 61H,7、位寻址 对片内RAM中20H2FH中的128个位地址及SFR中的可位寻址的位地址寻址。 例如: MOV C,20H;20H位的内容送CY标志 位,C称为位累加器。 MOV A,20H ;字节寻址,将内部 RAM中20H单元中的 内容送给累加器A。 以上两条指令均为寻址,究竟是位寻址还是字节寻址,根据两操作数类型一致的原则,由另一个操作数决定。,dir,Ri,Rn,#data,A,MOV A ,Rn #data dir Ri,MOV dir ,A Rn Ri #data dir,MOV Rn ,MOV Ri,A dir #data,1、内部RAM、SFR之间的传送MOV指令,A dir #data,2.2 数据传送与交换指令,2.2.1 传送类指令,例 R1=20H,(20H)=55H, MOV A,R1 ;执行后,A=55H。 例 (40H)=30H,指令 MOV R7,40H 执行后,R7=30H。 例 MOV R7,40H 执行后,R7=40H。,例 判断下列指令的正误: MOV 29H,R7 MOV 25H,P1 MOV 56H,#70H MOV 34H,28H MOV R3,R7 MOV R3,R7 MOV R3,#0D2H MOV #34H,28H MOV A,#280H MOV P3,P1,编程将R3的内容送R1。 MOV A,R3 MOV R1,A, , ,应用举例1,MOV P1, #0FEH ; 11111110B 可以使P1.0上的发光二极管点亮 MOV P1, #0F0H ; 11110000B 可以使P1口上的上面4个发光二极管点亮,8段数码管显示,MOV P1, #00H ; 显示 8. MOV P1, #0F8H ; 显示 7 MOV P1, #88H ; 显示 A,应用举例2,一个引脚的高低电平,可以通过“光电耦合器”控制继电器,从而以“弱电”控制“强电”。,A,外部数据 存储器,程序 存储器,Ri , A DPTR , A A , Ri A , DPTR,MOVX,MOVC,A , A+PC A , A+DPTR,2、外部数据存储器和A累加器之间的传送,MOVX,MOVC,3、程序存储器和A累加器之间的传送,MOVX指令举例 例: 实现片外数据存储器数据传送 (2000H)(2100H)。,MOV DPTR,#2000H MOVX A,DPTR MOV DPTR,#2100H MOVX DPTR,A,; DPTR= 2000H,; DPTR= 2100H,; A X,;(2100H) X,x,片外数据存储器不能直接寻址。下列为非法指令: MOVX A,2000H MOVX 2100H,2000H ,使用P2口和8位寄存器Ri间址: MOV P2,#20H ;高位地址 MOV R0,#00 ;低位地址 MOVX A,R0 ;读片外RAM MOV P2,#21H ;改变高位地址 MOVX R0,A ;写片外RAM,查表指令MOVC 注:只能从程序存储器读取数据到A累加器。 只能使用变址间接寻址方式 多用于查常数表程序,直接求取常数表中的函数值,1)DPTR为基址寄存器 MOVC A,A+DPTR ;A(A+DPTR) 查表范围为 64KB 程序存储器任意空间。,2)PC为基址寄存器 MOVC A,A+PC ;A (A+PC) 常数表只能在查表指令后 256B 范围内。,例 查表法求 Y=X2。设 X(0X15)在片内 RAM 20H单元,要求将查表求 Y,存入片内 RAM 21H单元,1)用DPTR作基址寄存器 ORG 0100H SQU: MOV DPTR,#TAB ;确定表首地址 MOV A,20H ;取 X MOVC A,A+DPTR ;查表求 Y=X2 MOV 21H,A ;保存Y RET ;子程序结束 ;其它程序段,ORG 0200H ;常数表格首地址 TAB: DB 00,01,04,09,225 ;平方表,2)用PC作基址寄存器 指令地址 源程序 ORG 0100H ;程序起始地址 0100H SQU: MOV A,20H ;取X 0102H ADD A,#3 ;修正偏移量 0104H MOVC A,A+PC ;查表求Y=X2 0105H MOV 21H,A ;存结果 0107H RET ;子程序结束 0108H TAB: DB 00,01,04 ;平方表 010BH DB 09,225,思考题 当0X255时,如何用查表法编程求Y=X2,3.堆栈操作指令,例:设 A=02,B=56H,执行下列指令序列后,SP = ?A = ? ,B = ?,SBR:MOV SP,#30H PUSH A PUSH B MOV A,#0 MOV B,#01 POP B POP A RET,;设栈底,;保护现场,;恢复现场,入栈指令:PUSH dir ;SPSP+1,(SP) (dir ) 出栈指令:POP dir ;(dir )(SP),SPSP-1, SP 02 , SP 56 02 , 56 SP 02 , 56 02 SP , SP ,堆栈操作示意:,2.2.2 交换指令 实现片内RAM区的数据双向传送,1. 字节交换指令 XCH A,Rn ;ARn XCH A,Ri ;A(Ri) XCH A,n ;A (n),习题 将片内RAM 60H单元与 61H单元的数据交换,例 设A= 29H,(2AH ) 38H 执行指令 XCH A,2AH 后, A= ? ,(2AH)= ?,38H,29H,XCH 60H,61H 对吗?,2. 半字节交换指令,XCHD A,Ri ;A03 (Ri)03 SWAP A ;A47A03,例3-4-3:将片内 RAM 2AH和 2BH单元中的 ASCII码转换成压缩 BCD码存入 20H单元,数字 09的ASCII码30H39H,85H,压缩的BCD码和非压缩的BCD码见图 如 1823压缩的BCD码为1823H 非压缩的BCD码为01080203H,A,A,08,例 将片内RAM 2AH和 2BH单元中的ASCII码转换成压缩式BCD码存入 20H单元,MOV A,#00H ;A=00 MOV R0,#2AH MOV R1,#2BH XCHD A,R0 SWAP A XCHD A,R1 XCH A,20H,85H,R1,R0,习题:交换片内RAM 40H单元和 41H单元的低半字节,0,0,;低4位交换A=08,; A=80H,; 低4位交换,;(20H)=85H,3 8,0 0,A,3 5,8 0,8 5,R1,R0,3 0,3 0,ADD ADDC SUBB ANL ORL XRL,A ,Rn, Ri #data dir,加 进位加 借位减 与 或 异或,1.以A为目的操作数的算术、逻辑运算指令(24条),以dir为目的操作数逻辑运算指令(6条),与 ANL 或 ORL 异或 XRL,2.3算术运算和逻辑运算指令,算术类指令的操作意义非常明确,不一一赘述, 注意减指令只有带借位减,因此在多字节减法中, 最低字节作减法时,注意先清CY。 逻辑运算是按位进行的,两数运算的运算法则是: 与:有“0”则“0”; 或:有“1”则“1” 异或:同为“0” , 异为“1”; 与“0”异或值不变:与“1”异或值变反。 逻辑指令常用于对数据位进行加工。,例:A=0FH, 执行XRL A,#86H 后 A06HH,例:A
收藏 下载该资源
网站客服QQ:2055934822
金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号