STC单片机中双数据指针的使用方法

更新时间:2023-11-12 08:10:01 阅读量: 教育文库 文档下载

说明:文章内容仅供预览,部分内容可能不全。下载后的文档,内容与下面显示的完全一致。下载之前请确认下面内容是否您想要的,是否完整无缺。

STC单片机中双数据指针的使用方法

STC89系列单片机对数据指针也进行了扩展,由传统51的单数据指针,变成了双数据指针,并设置了相应的特殊功能寄存器对其进行控制,从而为应用系统设计中数据快速切换与访问提供了条件。下面就对双数据指针的使用方法进行介绍。在介绍中会涉及较多的汇编语言的内容,但非常简单,读者可以翻阅相关手册,或依程序中的注释理解。 双数据指针特殊功能寄存器

标识 地址 名称 7 6 5 4 3 2 1 0 - - DPS 初始值 AUXR1 A2H 辅助寄存器1 - - - - GF2 GF2:通用功能用户自定义位 DPS:DPTR寄存器选择位 0:DPTR0被选中 1:DPTR1被选中

xxxx,0xx0 单片机中有两个16位的数据指针,DPTR0与DPTR1。当DPS选择位为0时,

选DPTR0,当DPS选择位为1时,选择DPTR1。

AUXR1特殊功能寄存器,位于A2H单元中,其中的位是不可以位寻址的。但可

以采用位操作的方式对DPS位进行置1或清零。由于DPS位位于第0位,因此可以对AUXR1寄存器用INC(汇编中为INC,C中可以用++运算符),使DPS位反转,由0变为1或由1变为0,即实现双数据指针的快速切换。 用以下应用例程来说明其使用方法(只含核心代码): ;此程序用以说明STC单片机中双数据指针的使用方法

CLR A

;累加器A清零

;将A的值0传送给AUXR1,选中DPTR0

MOV AUXR1,A

MOV DPTR,#1FFH ;向DPTR0中装入地址1FFH MOV A,#000H MOVX

;向累加器A中装入000H

;将A的值传送到DPTR0所指向的外部存储单元中去

@DPTR,A

MOV DPTR,#2FFH ;向DPTR0中装入地址2FFH MOV A,#0FFH MOVX

;向累加器A中装入0FFH

;将A的值传送到DPTR0所指向的外部存储单元中去

@DPTR,A

ORL AUXR1,#01H ;将DPS位置1,选中DPTR1

MOV DPTR,#1FFH ;向DPTR1中装入地址1FFH MOVX A,@DPTR MOV P2,A

;将DPTR1指向的外部储存单元中的值传送给A

;将A中的值输出在P2口上 ;调用延时程序

LCALL L?0008

ANL AUXR1,#0FEH

;将DPS位清零,选中DPTR0,请注意前面的程序是使用DPTR1,此时DPTR0中的地址并 ;没变仍是2FFH

MOVX A,@DPTR

;将DPTR0所指向的外部存储单元(地址为2FFH)中的值传送给A

MOV P2,A

;将A中的值输出在P2口上 ;调用延时程序

LCALL L?0008

ORL AUXR1,#01H ;将DPS位置1,选中DPTR1,此时DPTR1中的地址值为1FFH MOVX A,@DPTR

;将DPTR1指向的外部存储单元中的值传送给A,即1FFH地址单元上的值,000H

MOV P2,A

;将A中的值输出在P2口上

;调用延时程序

LCALL L?0009

ANL AUXR1,#0FEH ;将DPS位清零,选中DPTR0,DPTR0中的地址值仍为2FFH MOVX A,@DPTR

;将DPTR0指向的外部存储单元中的值传送给A,即2FFH地址单元上的值,0FFH

MOV P2,A

;将A中的值输出在P2口上

NON_STOP:

SJMP NON_STOP ;程序最后的死循环

本文来源:https://www.bwwdw.com/article/tbnv.html

Top