單片機上電清空RAM區(qū)
編程的基本思想,根據白皮書(ELAN的官方說明書,咱們習慣的叫法)R0是間接尋址,R4是RAM選擇,根據這兩個的組合就可以完成操作。具體操作和說明可以參考白皮書。
hint: 根據我的理解,這里其實可以很簡單的,只需要知道,R4放的是寄存器的地址,R0是放對應的那個寄存器的數據,就OK了,例如
MOV A,@0X10
MOV R4,A
MOV A,@0X11
MOV R0,A
根據hint里面說的,R4放地址,看前兩句,將 0x10移入R4,對了,表示地址,表示 0x10號寄存器,而后面將0x11移入R0,這個就是數據,放在什么地方?就是放在當前R4指向的寄存器里面,也就是說 0x10地址放的數據是 0x 11,可能開始看有點抽象,不過相信我,那是很簡單的東西。
下面的程序都是按照這種思想來做的 EM78P156 的RAM從 0x10 ~ 0x3f ,如果153的話只有 0x2f,修改一下就行了,而259/260 468 的RAM比較多,ELAN 是以bank來處理的,也就是分頁處理,所以在清空的時候切換一下bank就可以了,關于bank的操作,看白皮書,說到低就是對R4最高兩位的操作而已。
有問題的話歡迎回帖子,或者發(fā)我郵件 etual@163.com
當然如果有更好的思想,或者我的程序里面犯錯誤的話,非常歡迎大家指出,大家共同討論,共同學習和進步,在下不吝賜教。
;--------------------------------------------------------------------
; 適用于 em78p156 & 153
; 如果Em78P153S 將 0x3f 改成 0x2f就可以了
;--------------------------------------------------------------------
clear_all_ram:
mov a,@0x10 ; 開始地址
mov r4,a
clr_ram:
clr r0 ; 清空內容
inc r4 ; 地址加1
mov a,@0x3f ; 是否達到最大的地址 ,bank最大為0x3f
and a,r4
jbs psw,z
jmp clr_ram ; 是的話推出,不是的話繼續(xù)循環(huán)
ret
;-------------------------------------------------------------------
; 適用于 em78p259/260 等只有2個bank的mcu
; 先做一下宏定義,不同的mcu宏定義可能不同,注意修改一下
;-------------------------------------------------------------------
;-------------------------macro definition--------------------------
bank0 macro
bc 0x04,6 ; R4 的第六位決定是bank0 還是bank1
endm
;------------------------
bank1 macro
bs 0x04,6
endm
;----------------------clear rams of all banks----------------------
clear_all_ram:
mov a,@0x10
mov r4,a
bank0
call clr_ram
bank1
call clr_ram
ret
clr_ram:
clr r0
inc r4
mov a,@0x3f
and a,r4
jbs psw,z
jmp clr_ram
mov a,@0x10
mov r4,a
ret
;-------------------------------------------------------------------
; 適用于 em78p468 4個bank , 而且本身有bank指令不用宏定義
;-------------------------------------------------------------------
;----------------------clear rams of all banks----------------------
clear_all_ram:
mov a,@0x10
mov r4,a
bank 0
call clr_ram
bank 1
call clr_ram
bank 2
call clr_ram
bank 3
call clr_ram
jmp clr_ram_end
clr_ram:
clr r0
inc r4
mov a,@0x3f
and a,r4
jbs psw,z
jmp clr_ram
mov a,@0x10
mov r4,a
clr_ram_end:
ret
評論