?? 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 + -