MOV MOVC MOVX的相同点和不同点是什么?

博客介绍了单片机的MOV、MOVX、MOVC三种数据传送指令。MOV是内部数据传送指令,用于寄存器间等;MOVX是外部数据存储器与累加器A间的传送指令;MOVC是累加器与程序存储区间的传送指令。还说明了它们之间的区别。
  1. MOV:MOV是内部数据传送指令,什么是内部数据传送呢?就是寄存器之间、寄存器与通用存储区之间的数据传送。

  2. MOVX:MOVX是外部数据存储器(外部RAM)与累加器A之间的数据传送指令。因为内部与外部的RAM地址有重叠现象,所以需要用不 同的指令予以区分。

  3. MOVC:MOVC是累加器与程序存储区之间的数据传送指令。它比MOV指令多了一个字母“C”,这个“C”就是“Code”的意思,翻译过来就是“代码”的意思,就是代码区(程序存储区)与A之间的数据传送指令。

     

  4. 区别在于:MOV指令表示单片机内部的寄存器或者存储器之间相互传递数据,而MOVX则表示单片机内部的A累加器与片外的数据存储器传送数据.还有两条是MOVC的指令,它们表示A向ROM(程序存储器)读取数据,因为程序存储器是固定的不可以写的,所以,A只能读数据,却不能向它写数据.换句话说MOVX和MOVC是针对两种不同的存储器而言,一个是数据存储器,另一个却是程序存储器.

复习题 用数据传送指令来实现如下要求。(每小题2分,合计10分) 1.将R2内容的高低4位互换。 MOV A, R2 ; SWAP A :MOV R2, A ; 2.内部RAM 40H单元内容送A中。 MOV A, 40H 3.设置栈底地址为30H。 MOV SP, #2FH 4.外部RAM 50H单元内容送A中。 MOV R0, #50H ; MOVX A, @R0 ; 5.内部RAM 50H单元内容传送到R2中。 MOV R2, 50H R0的内容传送到R3。 MOV A, R0 ; MOV R3, A ; 外部RAM 50H单元内容送R0。 MOV R1, #50H ; MOVX A, @R1 ;MOV R0, A ; 程序存储器ROM 2000H单元内容送A。 MOV DPTR, #2000H ; CLR A ; MOVC A, @A+DPTR ; 片内RAM 30H单元内容取反。 MOV A, 30H ;CPL A ; MOV 30H, A ; 累加器A的内容送R5。 MOV R5, A: 一、指令分析题(每小题2分,合计20分) 1. MOV #30H,A错 目的在前,源在后 2. MOVC A,@R0 错 MOV仅支持@A+R0/@A+DPTR,需A作为偏移量 3. POP DPL 对 4. DEC DPTR错“MCS-51 无DEC DPTR指令”,需拆分 DPH/DPL 分别自减 5. ANL 40H,#0FFH对 6. CPL A对 7.RLC B错RLC仅支持累加器A格式RLC A,B寄存器无此操作 8. SETB TR0对 9.ANL C,/TR1对 10.JBC TCON.0,1FFFH对 11.MOV R2,R3错寄存器间不可直接传送,需 A 中转 12. MOVX @DPTR,P0错MOVX仅支持 A 作为数据缓冲,P0口需先送A再传送 13. PUSH A 对,但最好写成PUSH ACC 14. ANL 30H,@R0 错ANL无direct与@Ri格式,需先MOV A, @R0,再ANL 30H, A 15. SUBB B,@R1 错SUBB仅支持 A 作为目的操作数,B寄存器不可作为目的 16. CLR @R1 错CLR仅支持 A 位操作,需MOV A, #0→MOV @R1, A 17. SWAP A对 8. SETB TR1对 9. 0000H:AJMP 25FFH 错AJMP是2KB短跳转。0000H执行AJMP后 PC=0002H,25FFH高5位01001,超出范围 20. CJNE R0,#30H 错CJNE需完整格式CJNE Rn, #data, addr,缺少跳转目标地址 三、计算题(每空1分,分析过程4分,合计10分) 执行下面指令 MOV A,#7FH MOV R0,#20H ADD A,#57H MOV @R1,A 后,(A)=( D6H)、(Cy)=(0)、(AC)=(1)、(OV)=(1)、(P)=(1)、(R0)=(20H)。 三、计算题(每空1分,分析过程4分,合计10分) 执行下面指令 设(A)=63H,(R0)=0FFH,执行指令 ADD A,R0 后,(A)=(52H)、(Cy)=(1)、(AC)=(1)、 (OV)=(0)、(P)=(1)、(R0)=(0FFH)。 四、综合应用题。(每小题15分,合计60分) 1.若fosc=6MHz,定时/计数器T1工作于方式1,定时10ms发中断请求,编写初始化程序。 INIT_T1: MOV TMOD, #10H ; MOV TH1, #0ECH ; MOV TL1, #78H ; SETB ET1 ; SETB EA ; SETB TR1 ; SJMP $ ; 2.编程序实现片外RAM 从2000H开始存放的26个数(A-Z,26个英文字母)。 MOV DPTR, #2000H ; MOV R0, #26 ; MOV A, #41H ; LOOP: MOVX @DPTR, A ; INC DPTR ; INC A ; DJNZ R0, LOOP ; SJMP $ ; 3.已知在23H中存放一个二进制数,将它转换成十进制数的BCD码,转换后百位数存放于R5中,十位个位数分别存于R6的高四位低四位中。 MOV A, 23H ; MOV B, #100 ; DIV AB ; MOV R5, A ; MOV A, B ; MOV B, #10 ; DIV AB ; SWAP A ; ORL A, B ; MOV R6, A ; SJMP $ ; 4.8051单片机的串行口,若采用异步通信,定时器1工作于方式2, 振频率为11.0592MHz,SMOD=0,当选择波特率为9600bit/s,计算: 1)T1定时器的计数初值是多少?E2H 2)若已知每分钟能连续传送36000帧数据,每帧数据10位,求此时的波特率是多少? 6000BIT\S 1.若fosc=6MHz,定时/计数器T0工作于方式0,定时5ms产生中断请求,编写初始化程序。(15分) INIT_T0: MOV TMOD, #00H ; MOV TH0, #0B1H ; MOV TL0, #0CH ; SETB ET0 ; SETB EA ; SETB TR0 ; SJMP $; 2. 编程实现:8051单片机使用外部中断0、外部中断1、T0、T1中断源,要求T1为最高级。 (1)写出IE、IP控制字。 IE=0BH IP=08H (2)编写中断初始化程序。(合计15分) INIT_INT: MOV IE, #0BH ; MOV IP, #08H ; SJMP $ 4.编写程序,完成内部RAM的30H(高)-35H(低)40H(高)-45H(低)两个多字节无符号数相加,结果存入30H(高)-35H(低)单元。(15分) MOV R0, #35H ; MOV R1, #45H ; MOV R2, #6 ; CLR C ; LOOP: MOV A, @R0 ; ADDC A, @R1 ; MOV @R0, A ; DEC R0 ; DEC R1 ; DJNZ R2, LOOP ; SJMP $ 4. 编程序,把片外RAM 从3000H开始存放的26个数,传送到片内RAM 30H为首地址的单元中。(15分) MOV DPTR, #3000H ; MOV R0, #30H ; MOV R1, #26 ; LOOP: MOVX A, @DPTR ; MOV @R0, A ; INC DPTR ; INC R0 ; DJNZ R1, LOOP ; SJMP $ 检查
11-15
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

水能zai舟

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值