广告广告
  加入我的最爱 设为首页 风格修改
首页 首尾
 手机版   订阅   地图  繁体 
您是第 9811 个阅读者
 
<< 上页  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.024482 second(s),query:16 Gzip disabled
本站由 瀛睿律师事务所 担任常年法律顾问 | 免责声明 | 本网站已依台湾网站内容分级规定处理 | 连络我们 | 访客留言