单片机上电清空RAM区
编程的基本思想,根据白皮书(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最高两位的操作而已。
有问题的话欢迎回帖子,或者发我邮件 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 ; 是的话推出,不是的话继续循环
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
单片机上电清空RAM 相关文章:
- Windows CE 进程、线程和内存管理(11-09)
- RedHatLinux新手入门教程(5)(11-12)
- uClinux介绍(11-09)
- openwebmailV1.60安装教学(11-12)
- Linux嵌入式系统开发平台选型探讨(11-09)
- Windows CE 进程、线程和内存管理(二)(11-09)