<meter id="pryje"><nav id="pryje"><delect id="pryje"></delect></nav></meter>
          <label id="pryje"></label>

          新聞中心

          EEPW首頁 > 嵌入式系統(tǒng) > 設(shè)計應(yīng)用 > 單片機上電清空RAM區(qū)

          單片機上電清空RAM區(qū)

          作者: 時間:2016-11-17 來源:網(wǎng)絡(luò) 收藏
          上電后清空RAM是必須要做的,由于上電后RAM中的數(shù)據(jù)處于不確定的狀態(tài),會給單片機的運算或者條件判斷帶來影響,所以是必須必須清空的。清空做的操作也不難,做成子程序后,在程序的開始調(diào)用一下就完事了,挺方便。下面分別是 EM78P156 , EM78P259/260 ,EM78P468 等有不同RAM數(shù)的單片機的清RAM操作。

          本文引用地址:http://www.ex-cimer.com/article/201611/315481.htm

          編程的基本思想,根據(jù)白皮書(ELAN的官方說明書,咱們習(xí)慣的叫法)R0是間接尋址,R4是RAM選擇,根據(jù)這兩個的組合就可以完成操作。具體操作和說明可以參考白皮書。

          hint: 根據(jù)我的理解,這里其實可以很簡單的,只需要知道,R4放的是寄存器的地址,R0是放對應(yīng)的那個寄存器的數(shù)據(jù),就OK了,例如

          MOV A,@0X10

          MOV R4,A

          MOV A,@0X11

          MOV R0,A

          根據(jù)hint里面說的,R4放地址,看前兩句,將 0x10移入R4,對了,表示地址,表示 0x10號寄存器,而后面將0x11移入R0,這個就是數(shù)據(jù),放在什么地方?就是放在當(dāng)前R4指向的寄存器里面,也就是說 0x10地址放的數(shù)據(jù)是 0x 11,可能開始看有點抽象,不過相信我,那是很簡單的東西。

          下面的程序都是按照這種思想來做的 EM78P156 的RAM從 0x10 ~ 0x3f ,如果153的話只有 0x2f,修改一下就行了,而259/260 468 的RAM比較多,ELAN 是以bank來處理的,也就是分頁處理,所以在清空的時候切換一下bank就可以了,關(guān)于bank的操作,看白皮書,說到低就是對R4最高兩位的操作而已。

          有問題的話歡迎回帖子,或者發(fā)我郵件 etual@163.com

          當(dāng)然如果有更好的思想,或者我的程序里面犯錯誤的話,非常歡迎大家指出,大家共同討論,共同學(xué)習(xí)和進步,在下不吝賜教。

          ;--------------------------------------------------------------------

          ; 適用于 em78p156 & 153

          ; 如果Em78P153S 將 0x3f 改成 0x2f就可以了

          ;--------------------------------------------------------------------

          clear_all_ram:

          mov a,@0x10 ; 開始地址

          mov r4,a

          clr_ram:

          clr r0 ; 清空內(nèi)容

          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



          關(guān)鍵詞: 單片機上電清空RAM

          評論


          技術(shù)專區(qū)

          關(guān)閉
          看屁屁www成人影院,亚洲人妻成人图片,亚洲精品成人午夜在线,日韩在线 欧美成人 (function(){ var bp = document.createElement('script'); var curProtocol = window.location.protocol.split(':')[0]; if (curProtocol === 'https') { bp.src = 'https://zz.bdstatic.com/linksubmit/push.js'; } else { bp.src = 'http://push.zhanzhang.baidu.com/push.js'; } var s = document.getElementsByTagName("script")[0]; s.parentNode.insertBefore(bp, s); })();