廣告廣告
  加入我的最愛 設為首頁 風格修改
首頁 首尾
 手機版   訂閱   地圖  簡體 
您是第 10104 個閱讀者
 
<< 上頁  1   2   3  下頁 >>(共 3 頁)
發表文章 發表投票 回覆文章
  可列印版   加為IE收藏   收藏主題   上一主題 | 下一主題   
ken0127
數位造型
個人文章 個人相簿 個人日記 個人地圖
小人物
級別: 小人物 該用戶目前不上站
推文 x0 鮮花 x0
分享: 轉寄此文章 Facebook Plurk Twitter 複製連結到剪貼簿 轉換為繁體 轉換為簡體 載入圖片

下面是引用cmovies於2007-03-1 01:33發表的 :
我印象中沒看過有人做過從內部ROM跳到外部ROM/RAM.
因為EA一旦拉為Low就會執行外部程式, 根本不會執行接下來的jmp指令
我也不確定EA可不可以動態改變!
除非外部硬體配合, 由軟體啟動後硬體會自動將 EA 拉Low, 並自動Reset, 這樣應該可以做到.

.......

嗯,我指的就是內部的FLASH ROM
我目前硬體的EA接是接地

若是由大大您所說的
那如果我在EA腳接一個開關
在程式下載完後
手動改變EA腳的電位
並RESET
是否就能達到我要的功能?
若是這樣的話當我改變EA電位後,
他會自動的跳到外部RAM而執行程式嗎?
若是此法行不通

那一開始將程式碼燒在外部ROM的話
下載的程式一樣是存在外部RAM
這樣是否就OK?
若是這樣的話,要如何讓51在一開機時就讀外部的ROM?

我的問題太多了
因為有關這方面的書籍我還沒看到過…

再次萬分感謝!!



獻花 x0 回到頂端 [10 樓] From:未知地址 | Posted:2007-03-01 01:46 |
cmovies
數位造型
個人文章 個人相簿 個人日記 個人地圖
小人物
級別: 小人物 該用戶目前不上站
推文 x0 鮮花 x20
分享: 轉寄此文章 Facebook Plurk Twitter 複製連結到剪貼簿 轉換為繁體 轉換為簡體 載入圖片

EA 接地那麼內部的 Flash ROM 就永遠執行不到!
那代表你外面應該還有一個外部ROM才可以.
你現在應該都是用 ICE 在測試吧? 那這個問題當你用CPU來測時就會出現.

如果你可以外部設計一個手動電路來達到我說的動作那應該可以做到執行外部RAM的功能.
PSEN 應該有接到外部RAM的OE吧? 而且位址應該是從 0 開始而不是 8000h


獻花 x0 回到頂端 [11 樓] From:台灣中華電信 | Posted:2007-03-01 01:55 |
ken0127
數位造型
個人文章 個人相簿 個人日記 個人地圖
小人物
級別: 小人物 該用戶目前不上站
推文 x0 鮮花 x0
分享: 轉寄此文章 Facebook Plurk Twitter 複製連結到剪貼簿 轉換為繁體 轉換為簡體 載入圖片

下面是引用cmovies於2007-03-1 01:55發表的 :
EA 接地那麼內部的 Flash ROM 就永遠執行不到!
那代表你外面應該還有一個外部ROM才可以.
你現在應該都是用 ICE 在測試吧? 那這個問題當你用CPU來測時就會出現.

如果你可以外部設計一個手動電路來達到我說的動作那應該可以做到執行外部RAM的功能.
.......

我目前都是用ICE來測試…但每次都出現time out = =


外部RAM的OE腳是接到51的RD腳
而PSEN是空接
WE腳接到WR
大大您說的是不是要將PSEN接到外部的ROM?
因為看我書上的接法
外部的ROM的OE是接到PSEN

那若是我用外接ROM的話
就可以直接將程式位置JMP到外接的RAM上囉?


獻花 x0 回到頂端 [12 樓] From:未知地址 | Posted:2007-03-01 02:10 |
cmovies
數位造型
個人文章 個人相簿 個人日記 個人地圖
小人物
級別: 小人物 該用戶目前不上站
推文 x0 鮮花 x20
分享: 轉寄此文章 Facebook Plurk Twitter 複製連結到剪貼簿 轉換為繁體 轉換為簡體 載入圖片

PSEN 應該接到當成程式空間的OE腳(包括外部ROM跟外部RAM)

如果你要用外部ROM+外部RAM的話, 那麼CS要接成
外部ROM的/CS: 接到 P2.7
外部RAM的/CS: 接到 P2.7 的反相
這樣外部RAM的位址就是 8000h, 外部ROM的位址就為 0

如果你也想要讀取外部RAM的話, 就必須將 PSEN 跟 RD 做一個 AND 後到 OE


獻花 x0 回到頂端 [13 樓] From:台灣中華電信 | Posted:2007-03-01 02:18 |
ken0127
數位造型
個人文章 個人相簿 個人日記 個人地圖
小人物
級別: 小人物 該用戶目前不上站
推文 x0 鮮花 x0
分享: 轉寄此文章 Facebook Plurk Twitter 複製連結到剪貼簿 轉換為繁體 轉換為簡體 載入圖片

下面是引用cmovies於2007-03-1 02:18發表的 :
PSEN 應該接到當成程式空間的OE腳(包括外部ROM跟外部RAM)

如果你要用外部ROM+外部RAM的話, 那麼CS要接成
外部ROM的/CS: 接到 P2.7
外部RAM的/CS: 接到 P2.7 的反相
.......

嗯嗯
今天我在圖書館有找到一本書剛好跟你說的接法一樣
現在才知道原來外接rom在以前是專門給沒有內部程式記憶體的處理器用的

謝謝大大!!


獻花 x0 回到頂端 [14 樓] From:未知地址 | Posted:2007-03-01 20:02 |
ken0127
數位造型
個人文章 個人相簿 個人日記 個人地圖
小人物
級別: 小人物 該用戶目前不上站
推文 x0 鮮花 x0
分享: 轉寄此文章 Facebook Plurk Twitter 複製連結到剪貼簿 轉換為繁體 轉換為簡體 載入圖片

大大
我將我debug的情型報告給您

我將程式改完之後
在debug時
在run之後
我點了右鍵load hex or object files
將我的目標程式讀入
其實就是很簡單的讓七段顯示器不斷的計數的程式
之後我的監看P1視窗顯示P1不停變動
這樣代表程式成功了嗎??
我想應該是…

感謝cmovies大大相助~~~~~~~


獻花 x0 回到頂端 [15 樓] From:未知地址 | Posted:2007-03-01 21:29 |
ken0127
數位造型
個人文章 個人相簿 個人日記 個人地圖
小人物
級別: 小人物 該用戶目前不上站
推文 x0 鮮花 x0
分享: 轉寄此文章 Facebook Plurk Twitter 複製連結到剪貼簿 轉換為繁體 轉換為簡體 載入圖片

我發覺我好像錯了
因為載入目標檔好像就是直接執行那個程式= =

我原本debug是一個字元一個字元慢慢key
但當我key完一行時
照理來說記憶體裡應該已經存了那一行指令了呀
但當我jmp到08000h位置時
在那監看視窗裡
卻沒有顯示任何的值、資料
我的程式碼修改後如下

#include <reg52.h>
#include <stdio.h>

char xdata *pCode;
volatile unsigned char getChar;
unsigned int carry;
unsigned char Reg0;

extern void DONE();
void init();
void inchar();
void atoh();
void swap();
void loader();

main()
{
loader();
}

void loader()
{
     init();
     while( getChar !=0x1a )
     {            
           inchar();
           if( getChar ==0x1a )
           {
                 getChar = 0x00;
                 break;
           }
           atoh();
           swap();
           Reg0 = getChar;
           *((unsigned char *)&pCode + 0) = getChar; // high address
           inchar();
           if( getChar ==0x1a )
           {
                 getChar = 0x00;
                 break;
           }
           atoh();
           *((unsigned char *)&pCode + 1) = getChar; // low address
           inchar();
    atoh();
    *pCode = getChar;
     }

     DONE();
}

void init()
{
     SCON = 0X50;
     TMOD = 0X20;
     TH1 = 0XFD;
     TR1 = 1;
     TI = 1;
     return;
}


void inchar()
{
REload:
     while( 1 ) if( RI ) break;

     getChar = SBUF;            
     if( getChar == 0x3a )
     {
           RI = 0;
           goto REload;
     }

     RI = 0;
     return;
}

void atoh()
{
     carry = 0;
     if( getChar < 0x3a ) carry = 1;

     if( carry != 1 ) getChar += 9;
     
     
     getChar = getChar & 0x0f;

     return;
}

void swap()
{
     unsigned char high,low;

     high = getChar & 0xF0;
     high = high >> 4;
     low = getChar & 0x0F;
     low = low << 4;
     getChar = high | low;
}


獻花 x0 回到頂端 [16 樓] From:未知地址 | Posted:2007-03-02 00:06 |
cmovies
數位造型
個人文章 個人相簿 個人日記 個人地圖
小人物
級別: 小人物 該用戶目前不上站
推文 x0 鮮花 x20
分享: 轉寄此文章 Facebook Plurk Twitter 複製連結到剪貼簿 轉換為繁體 轉換為簡體 載入圖片

你有將 PSEN 跟 RD 做 AND 後接到外部RAM的OE嗎?


獻花 x0 回到頂端 [17 樓] From:台灣中華電信 | Posted:2007-03-02 00:20 |
cmovies
數位造型
個人文章 個人相簿 個人日記 個人地圖
小人物
級別: 小人物 該用戶目前不上站
推文 x0 鮮花 x20
分享: 轉寄此文章 Facebook Plurk Twitter 複製連結到剪貼簿 轉換為繁體 轉換為簡體 載入圖片

看了一下程式發現這應該像是要接收 HEX 檔案的 Loader 吧!? 只是你把它簡化了
但是位址部分應該還是要有有 4 個 Bytes 才對.
而且你要考慮偏移位址(8000h)的問題及中斷向量的處理才算是完整的 Loader.

建議你用單步執行配合 Disassembly 來看整個動作及流程, 這樣比較容易找出問題.


獻花 x0 回到頂端 [18 樓] From:台灣中華電信 | Posted:2007-03-02 00:45 |
ken0127
數位造型
個人文章 個人相簿 個人日記 個人地圖
小人物
級別: 小人物 該用戶目前不上站
推文 x0 鮮花 x0
分享: 轉寄此文章 Facebook Plurk Twitter 複製連結到剪貼簿 轉換為繁體 轉換為簡體 載入圖片

下面是引用cmovies於2007-03-2 00:45發表的 :
看了一下程式發現這應該像是要接收 HEX 檔案的 Loader 吧!? 只是你把它簡化了
但是位址部分應該還是要有有 4 個 Bytes 才對.
而且你要考慮偏移位址(8000h)的問題及中斷向量的處理才算是完整的 Loader.

建議你用單步執行配合 Disassembly 來看整個動作及流程, 這樣比較容易找出問題.


位址部分有4個byte,之前看外國朋友寫的
他也是將high、low address讀取之後
他又讀了兩次
但在第三次他的註解是寫get record type(ignore)
我以為是要乎略這行
現在經您提起我才了解…

我想我需要研究有關intel發佈的hex的格式…汗顏


獻花 x0 回到頂端 [19 樓] From:未知地址 | Posted:2007-03-02 15:52 |

<< 上頁  1   2   3  下頁 >>(共 3 頁)
首頁  發表文章 發表投票 回覆文章
Powered by PHPWind v1.3.6
Copyright © 2003-04 PHPWind
Processed in 0.056954 second(s),query:16 Gzip disabled
本站由 瀛睿律師事務所 擔任常年法律顧問 | 免責聲明 | 本網站已依台灣網站內容分級規定處理 | 連絡我們 | 訪客留言