📄 pointer.inc
字号:
;*************************************************************************
;实用的8051单片机通用指针操作程序
;适用于Keil C51编译器
;*************************************************************************
;关于通用指针:
; 在80C51中,数据可能存储在不同的逻辑地址空间中,如idata、xdata、
; pdata、code等,如果要进行统一的操作,就必须引入通用指针的概念
;通用指针用3个字节表示,第1字节为指针类型,第2、3字节表示指针内容
; 类型 类型值 属性 常用性
; idata 0x00 读/写 很常用
; xdata 0x01 读/写 常用
; pdata 0xFE 读/写 不常用
; code 0xFF 只读 很常用
;通用指针的运算:
; 提取指针数据
; 保存指针数据
; 指针加常数
; 指针减常数
; 两个指针相减
;通用指针用法:
; 对数据的存取操作:将通用指针复制到(R1,DPTR)中,再调用相应的子程序
; 对通用指针的算术运算:可通过双字节算术运算来实现
;*************************************************************************
;*************************************************************************
;定义指针类型
;*************************************************************************
PtrTypeIDATA EQU 0x00
PtrTypeXDATA EQU 0x01
PtrTypePDATA EQU 0xFE
PtrTypeCODE EQU 0xFF
;*************************************************************************
;函数:BytePtrLD()
;功能:从字节型通用指针指向的存储单元提取数据
;参数:(R1,DPTR)为通用指针
; R1:指针类型
; DPTR:指针内容
;返回:提取的数据保存在A中
;*************************************************************************
BytePtrLD:
CJNE R1, #PtrTypeIDATA, BytePtrLD_code
MOV R0, DPL
MOV A, @R0
RET
BytePtrLD_code:
CJNE R1, #PtrTypeCODE, BytePtrLD_xdata
CLR A
MOVC A, @A+DPTR
RET
BytePtrLD_xdata:
CJNE R1, #PtrTypeXDATA, BytePtrLD_pdata
MOVX A, @DPTR
RET
BytePtrLD_pdata:
CJNE R1, #PtrTypePDATA, BytePtrLD_end
MOV R0, DPL
MOVX A, @R0
BytePtrLD_end:
RET
;*************************************************************************
;函数:BytePtrST()
;功能:保存数据到字节型通用指针指向的存储单元
;参数:(R1,DPTR)为通用指针
; R1:指针类型
; DPTR:指针内容
; A:要保存的数据
;注意:不能是code型指针
;*************************************************************************
BytePtrST:
CJNE R1, #PtrTypeIDATA, BytePtrST_xdata
MOV R0, DPL
MOV @R0, A
RET
BytePtrST_xdata:
CJNE R1, #PtrTypeXDATA, BytePtrST_pdata
MOVX @DPTR, A
RET
BytePtrST_pdata:
CJNE R1, #PtrTypePDATA, BytePtrST_end
MOV R0, DPL
MOVX @R0, A
BytePtrST_end:
RET
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -