1. 單片機程序運行要不要把程序從ROM中讀入到RAM中
不要。但是ram中肯定會保留與當前程序運行狀態有關的寄存器(SFR,對於ST89C52應該就是0x80~0xFF的單元)。
對於51系列或者類51的單片機,程序空間和數據空間是分開的,並不存在由rom載入到ram的問題。
這么說吧,ST89C52可以支持到64K的程序存儲,如果都載入到外部RAM里,那RAM肯定是放不下了。
data是內部直接定址的RAM,idata是內部間接定址的RAM
2. 單片機 ram 中執行代碼的 如何鏈接
單片機的程序一般默認從Fash啟動。要想在RAM執行程序,首先得單片機支持,一般只要Flash和RAM是統一編址的都可以在RAM運行程序。
程序的啟動一般都是從一個固定地址(廠家規定)啟動的,而這個地址一般都不在RAM地址范圍內。因此常用的做法是在單片機廠家規定的啟動的地址開始處預先燒錄一段啟動代碼,這就是我們常說的BootLoader,然後再在BootLoader中按照單片機的運行規則跳轉到RAM中代碼(我們一般稱為App程序)的起始地址。
鏈接的不同之處就是ROM模型,一般,按照單片機對應的開發工具,默認都是將ROM的起始地址設置到了廠家規定的啟動地址處,要將程序編譯到其他地址,只需要找到這個ROM的配置修改其起始地址和空間大小即可。例如Keil裡面的Target頁面或者sct文件,還有DSP中的link文件……
根據上述說明可知想要在非廠家規定的地址跑程序,需要有一個BootLoader引導程序(如果是使用在線模擬器模擬跑可以不要):
App程序:鏈接到實際需要的地址(可能是Flash也可能是RAM),如果為RAM要注意掉電後程序丟失;
BootLoader程序:鏈接到廠家規定的啟動地址,在BootLoader中再通過軟體跳轉到App的地址。
3. 單片機 51的一個項目的參數是放在ram裡面的,下次在上電應該數據會丟失啊但是,下面,一定採納
這是一條 偽指令 設置 setno 變數為 23h,
至於在程序中 怎麼使用 這個 setno 變數 是另外回事,
如果在 變數中 存放 一個什麼 數據 (這個數據是存放在 23h RAM 中)
你們關閉電源後 過 一段時間 再打開電源 這個變數 中的數據 就不一定 了。
這要看你 單片機 的電 是否 完全 放盡。如果 放盡電後肯定 保存不住的。