找回密码
 注册

QQ登录

只需一步,快速开始

扫一扫,访问微社区

巢课
电巢直播8月计划
查看: 38|回复: 1
打印 上一主题 下一主题

MCS-51单片机地址指针及其应用

[复制链接]

156

主题

543

帖子

1180

积分

四级会员(40)

Rank: 4Rank: 4Rank: 4Rank: 4

积分
1180
跳转到指定楼层
1#
发表于 2016-8-15 15:03 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

EDA365欢迎您!

您需要 登录 才可以下载或查看,没有帐号?注册

x
MCS-51单片机外部RAM的地址空间为64K,地址总线为16位,访问外接RAM可执行如下4条指令:4 M  @0 O6 E7 P: I
MOVX A,@DPTR
6 o: K( O/ F. @* c; O" P. Q   MOVX      @DPTR,A
4 ^: s) R0 S+ G: J* |; BMOVX    A,@RI
* x/ P( S4 U" u- ]9 ?MOVX    @RI,A! l7 }6 L6 p  Z, @; y% B! O) j
其中DPTR为16位地址寄存器,地址高8位存于DPH,地址低8位存于DPL;Ri(I=0,1)是8位寄存器,作为地址指针时仅存低8位地址。) o! V1 T( n$ T# F
MCS-51执行上述指令时分为两个阶段:首先,是从外接程序存储器中取出指令代码,并进行分析。然后,执行对外接RAM的数据读/写操作。在这两个阶段,P0口、P1口上的地址选通是有区别的。
2 j" D7 x+ Z& g4 _1 r6 V7 T9 J% T执行“MOVX A,@DPTR”和“MOVX     @DPTR,A”指令时,在读指令代码阶段,由程序计数器(PC)提供A0~A15,低8位地址稳定后,在单片机地址锁存信号ALE作用下,P0.X口开始读入MOVX指令代码。在对外接RAM读写阶段,其过程与前述相同,只不过低8位地址不是来自程序计数器的低8位PCL,而是来自地址寄存器的高8位DPH;高8位地址不是来自程序计数器的高8位PCH,而是来自地址寄存器的高8位PCH。当DPL稳定后,由地址锁存器锁存,P0.X口上出现的是读/写外接RAM的数据信息。! p$ j1 O  x* K8 [+ l5 l$ c
执行“MOVX        A,@Ri”和“MOVX     @RI,A”指令时,取指阶段舆“movx a, @ dptr”和“movx @ dptr, a”过程完全相同。但在执行对外部RAM的读/写阶段,低8位地址来自Ri;高8位地址来自P2口锁存器(P2 SFR)。
, `! i1 M4 K0 s) P9 Y/ q由上所述,用R0和R1对外接RAM的间接寻址,可看作是一种页面寻址,由P2锁存器(P2 SFR)的当前值决定了当前页面地址。MCS-51单片机在复位时,P2 SFR为FFH,若程序运行中没有改变P2 SFR中的值,R0和R1只能对FF00H~FFFFH范围的外接RAM进行间接寻址,即FF页面寻址。由于用指令改变P2 SFR的值并不影响程序正常运行,因此可以用R0和R1对64K外接RAM空间的任意一个单元进行间接寻址。这样就使MCS-51单片机外接RAM的地址指针由1个变成3个,大大方便了程序设计。/ y" {, E! s; O- E7 b& u/ h
下面以数据块传送子程序为例,说明R0和R1对外接RAM间接寻址的程序设计方法。假定数据块的源首地址为1000H,目的首地址为3045H,数据块长度为50H,程序清单如下所示:
/ T( |5 p9 q- T程序1—用DPTR做地址指针
! S& j$ s4 V% P1 i, Q% \% cMOV      R2,#00H
0 A0 w4 o' S6 Y" P3 kMOV      R3,#10H
! @, O  i  u* l0 N! F& ^, G- cMOV      R4,45H
2 e6 J5 o2 u0 ~" EMOV      R5,#30H
$ ~) w0 u/ I- P2 j0 bMOV      R7,#50H( _5 C2 u8 W' S' \$ I+ C
LOOP:    MOV      DPL,R25 S* x' P! A1 X' ?  E0 x: V
               MOV      DPH,R34 d0 L' m9 d; t( B  F1 x
               MOVX    A,@DPTR5 L1 T! w- |8 d& N
               INC         DPTR$ }: I- |+ G( y* t" `6 T; @; X
               MOV      R2,DPL
: B+ x6 S" Y/ r0 ]- T9 a               MOV      R3,DPH2 h" R( H2 k. Q( A8 P9 M
               MOV      DPL,R47 A- P; H5 ^* e0 @' |
               MOV      DPH,R54 e3 S" c0 R9 T6 @6 x, f, |4 {1 Y
               MOVX    @DPTR,A9 y1 u2 S! X2 O3 {; p
               INC         DPTR
! h! F. F" f; M               MOV      R4,DPL
0 ]! g+ F9 L; a- ^& g% B6 g               MOV      R5,DPH
  C- t, f& |: d8 a$ N1 X               DJNZ      R7,LOOP
. u" C* e) u  J6 ^6 s9 }, X$ R- q. d               RET9 p" @6 Y- e' k- n# i! i! q
$ u4 s, C! p0 Y: g* ~4 T
程序2—使用R0和R1做地址指针
& z) R; |, s4 ^2 O0 a' TMOV      DPTR,#1000H
! N& }- e! ]! w2 M1 B; WMOV      P2,#30H, f; ?2 \' E& u% A. M6 v
MOV      R0,#45H
! w# f0 }9 e+ K; ^$ `* C) HMOV      R7,#50H
4 u& G; ~9 P# ]; hLOOP:    MOVX    A,@DPTR" [9 @1 _) p, h1 g& |/ l0 n
MOVX    @R0,A7 s6 M4 x% `5 E  q) `
INC         DPTR7 \2 p% c3 v( z0 [* i; j# M  a1 s8 ?
INC         R01 Y* h  c: d1 s. @2 c
DJNZ      R7,LOOP3 r0 A: m& g, @$ o3 {& e
RET
0 O) n! K1 n/ O' P) K; y程序1用了19条指令,程序2用了10条指令。适当应用R0和R1地址指针,可以大大提高程序运行效率。5 G! V" u; e& {6 c1 V2 S1 |, {
在应用R0和R1间址的外接RAM数据传送操作中,一般使用“MOV P2,#ADDR”和“MOV      A,@RI”形式,其中#ADDR为高8位地址。在这两条指令之间不应插入有关改变P2 SFR值的指令。对P2口的读有两种情况:一种是读P2锁存器,如执行“MOV A,P2”指令,这并不会改变P2 SFR中的内容;另一种是读P2锁存器,如执行“INC P2”指令,该指令中的P2既是源操作数,又是目的操作数,通常称为“读—修改—写”指令,即从P2 SFR中读出内容,修改后又写入P2 SFR中。' o" ^1 a/ D9 I( E8 y0 A
在中断服务程序中,如果要用到地址指针,必须在保护现场程序段保护使用的地址指针,即使用“PUSH P2”和“PUSH Ri”指令。在中断返回之前又必须在恢复现场程序段恢复使用过的地址指针,即用“POP RI”和“POP P2”指令。
) }4 X1 O: B0 H2 }6 j当单片机进入等待方式或节电方式,且又用硬件复位返回到原来的正常操作状态时,由于复位对P2 SFR写入FFH,改变了页地址。因此,在单片机进入等待方式或节电方式之前,也必须先将P2 SFR内容进行保护。当状态恢复进入原正常操作程序入口处时,再恢复P2 SFR的内容。! P6 @' o+ m* ~3 A: p4 Y4 ?* K
, U# m3 D9 y, z* c/ W
                                            摘自《嵌入式系统应用》
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友 微信微信
收藏收藏 支持!支持! 反对!反对!

155

主题

662

帖子

1191

积分

四级会员(40)

Rank: 4Rank: 4Rank: 4Rank: 4

积分
1191
2#
发表于 2016-8-16 09:33 | 只看该作者
资源多,学习不止步,共同进步
) w2 g  j. J: ?; d  A* o: D/ b
您需要登录后才可以回帖 登录 | 注册

本版积分规则

关闭

推荐内容上一条 /1 下一条

巢课

技术风云榜

关于我们|手机版|EDA365 ( 粤ICP备18020198号 )

GMT+8, 2024-11-15 06:22 , Processed in 0.055448 second(s), 32 queries , Gzip On.

深圳市墨知创新科技有限公司

地址:深圳市南山区科技生态园2栋A座805 电话:19926409050

快速回复 返回顶部 返回列表