📄 sfrrdwr.a51
字号:
$NOMOD51
$include (reg1210.inc)
PUBLIC _sfr_rd, _sfr_wr, _code_read, deltasigma
EXTRN code (_tx_byte, _tx_hex)
SfrRdWr SEGMENT CODE
RSEG SfrRdWr
dir_sfr_uam EQU 87FDh
_code_read:
clr a
mov dph,r6
mov dpl,r7
movc a,@a+dptr
mov r7,a
ret
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
; char sfr_rd(char)
; sfr read: R7 sfr addr, return R7 sfr data
; Building sfr rd in Dmmap address:
; 10101rrr-dir mov R7,dir
; 00100010 ret
; where rrr is R7 (op=af), dir is @R7!!
; then call dir_sfr
_sfr_rd:
mov a,#0afh ;opcode: mov R7,dir
sjmp sfr_rdwr
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
; void sfr_wr(char,char)
; sfr write: R7 sfr addr, R5 sfr data
; Building sfr wr code in Dmmap address:
; 10001rrr-dir mov dir,R5
; 00100010 ret
; where rrr is R5 (op=8d), dir is @R7!!
; then call dir_sfr
_sfr_wr:
mov a,#8dh ;opcode: mov dir,r5
sfr_rdwr:
push acc
orl mcon, #1 ; enable dmmap
mov dptr,#dir_sfr_uam
pop acc
movx @dptr, a
inc dptr
mov a,r7 ;sfr address
movx @dptr,a
inc dptr
mov a,#22H ;opcode: ret
movx @dptr,a
lcall dir_sfr_uam
sfr_rdwr_cnxt:
anl mcon,#0feh;
ret
;;;;;;;;;;;;;;;;;;;;;
; signed long deltasigma(void)
; return the 3 byte adres to R4567 (MSB~LSB)
; return signed long int with sign-extend R4 for bipolar
; and stuff 0 on R4 for unipolar
deltasigma:
mov r4,#0
mov r5,adresh
mov r6,adresm
mov r7,adresl
ret
end
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -