|
技术交流 | 电路欣赏 | 工控天地 | 数字广电 | 通信技术 | 电源技术 | 测控之家 | EMC技术 | ARM技术 | EDA技术 | PCB技术 | 嵌入式系统 驱动编程 | 集成电路 | 器件替换 | 模拟技术 | 新手园地 | 单 片 机 | DSP技术 | MCU技术 | IC 设计 | IC 产业 | CAN-bus/DeviceNe |
RAM BANK使用 |
作者:第五生産隊 栏目:MCU技术 |
中穎單片機的RAM如果超出128個單元后,就採用分BANK的結構,每128個單位為一個BANK,也就是說:00h~7Fh為Bank0,80h~FFh為Bank1,依此類推。 對於Bank0的RAM,可以用任意指令尋址,而對於其他的Bank中的RAM,是不可以做立即數操作的,也就是在指令中帶有“i”的指令是不可以直接對地址大於7Fh的RAM操作的。只能間接尋址,間接尋址方法如下: 1、使用DPH、DPM、DPL和INX寄存器。 如:寫入的地址是381h,寫入的内容為05h 可以這樣寫: Ldi DPH,07h Ldi DPM,00h Ldi DPL,01h Ldi INX,05h 其中的DPH就是包含了BANK的意義,DPM、DPL值的就是RAM在BANK中的偏移量。(沒有找到貼圖的方法,不好意思啦) 2、使用指令直接包含要尋址的RAM所在的Bank號。我們的指令集中您可以看到有部分的指令的描述比如: STA Mx(,B);其中的“,B”就是BANK的意思。 這樣,上面的例子就可以這樣來寫了:(標準的寫法) Ldi TEMP,05h ;TEMP是一個您安排的臨時RAM。這條指令的目的是讓ACC的内容等於05h STA (0x381-0x380),(0x380/0x80) ;(0x380/0x80)是爲了取模,只要整數部分。 ;(0x381-0x380)得到的RAM在Bank中的偏移, 對於這樣的一種寫法,使用起來比較麻煩,在編譯器中現在有做了一些改進,所以現在您在程序中寫的就簡單很多了,如下面方法3。 3、對於我們目前和以後新的編譯器來説,還可以更簡單一點。(只有最新的編譯器才支持) 如:對於0x381來寫入05H TEMP equ 0x7F DATARAM equ 0x381 ldi TEMP,05h ;讓ACC的内容為05h Sta DATARAM ;這樣雖然沒有加Bank號,但是,編譯器會自動加上,在編譯器中的WATCH窗口也可以直接看到。 |
2楼: | >>参与讨论 |
作者: 第五生産隊 于 2006/11/23 9:23:00 发布:
試試方法 |
3楼: | >>参与讨论 |
作者: crukiss 于 2007/4/14 10:30:00 发布:
不错哦 不错,谢谢拉 |
|
|
免费注册为维库电子开发网会员,参与电子工程师社区讨论,点此进入 |
Copyright © 1998-2006 www.dzsc.com 浙ICP证030469号 |