📄 en_copy.a51
字号:
#include <REG400.H>
;汇编代码
; 在代码段中定义段
?PR?en_copy?LOWLVL SEGMENT CODE
; 输出函数名
PUBLIC en_copy
;这个函数可被连接器放置在任何地方
RSEG ?PR?en_copy?LOWLVL
;*****************************************************************
; Function: _dpread
; Description: 等待定时器0溢出向外部器件表明P1中的数据是有效的如果定时器尚
; 未溢出被写入XDATA的指定地址中
; Parameters: R7 – 存放要等待的时标数
; R4|R5 – 存放要写入的XDATA区地址
; Returns: 读数成功返回1,时间到返回0
; Side Effects: none.
;*****************************************************************
;
; The speaker.a51 tbin NEEDS to go in bank 2
;
TBIN_SPEAKER equ 41h
TBIN_SPEAKER_SRC equ 420000h
TBIN_SPEAKER_TARGET equ 07h
TBIN_SPEAKER_DEST equ 070000h
TIMED_ACCESS MACRO
mov ta, #0AAh ; Enable access to ACON
mov ta, #055h
ENDM
;
; initialize our data pointers
;
; we will copy the TBIN_SPEAKER
; SOURCE = dptr0 TARGET = dptr1
;
de_copy:
mov dpx, #TBIN_SPEAKER
mov dph, #0
mov dpl, #0
mov dpx1, #TBIN_SPEAKER_TARGET
mov dph1, #0
mov dpl1, #0
lcall Copy64K
;
; Now we need to jump to TBIN_SPEAKER_TARGET
;
ljmp TBIN_SPEAKER_DEST
Copy64K:
;
; Get the original bank number
;
mov r0, dpx
;
; Unroll the loop 8 times
;
mov dps,#030h
movx a, @dptr ; 1
movx @dptr, a
movx a, @dptr ; 2
movx @dptr, a
movx a, @dptr ; 3
movx @dptr, a
movx a, @dptr ; 4
movx @dptr, a
movx a, @dptr ; 5
movx @dptr, a
movx a, @dptr ; 6
movx @dptr, a
movx a, @dptr ; 7
movx @dptr, a
movx a, @dptr ; 8
movx @dptr, a
movx a, @dptr ; 1
movx @dptr, a
movx a, @dptr ; 2
movx @dptr, a
movx a, @dptr ; 3
movx @dptr, a
movx a, @dptr ; 4
movx @dptr, a
movx a, @dptr ; 5
movx @dptr, a
movx a, @dptr ; 6
movx @dptr, a
movx a, @dptr ; 7
movx @dptr, a
movx a, @dptr ; 8
movx @dptr, a
;
; see if we rolled into another bank
;
mov a, dpx
mov dps, #0x00
cjne a, #TBIN_SPEAKER, copy_exit
;
; Not rolled over yet...
;
ljmp Copy64K
copy_exit:
ret
RET
END
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -