打印

跪求大侠赐教:C8051F040的外部存储接口配置(已解决)

[复制链接]
2142|10
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
geergeer|  楼主 | 2008-9-20 19:38 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
首先对浏览帖子的大侠表示深深的感谢!
C8051F040的外部存储器接口配置代码如下所示(用低口作存储器接口,非复用方式,有块选择的分片模式,使用了串口0和外部中断0)
void Config_IO (void)
{
    SFRPAGE  = EMI0_PAGE;
    EMI0CF   = 0X18;
    EMI0CN   = 0X80;
    EMI0TC   = 0X83;

    SFRPAGE  = CONFIG_PAGE; //Port SFR's on Configuration page
    P0MDOUT  = 0XFF;
    P1MDOUT  = 0XFF;
    P2MDOUT  = 0XFF;
    P3MDOUT  = 0XFF;    
    XBR0     = 0X04;
    XBR1     = 0X04;
    XBR2     = 0X42;
    P0       = 0XC0;
    P1       = 0X00;
    P2       = 0X00;
    P3       = 0X00;
}
初始化好之后,我用仿真器单步执行程序,每次对外部存储单元(例如0X8010)寻址时,即执行指令MOVX @DPTR A时,用示波器无法抓到地址线(P1,P2口)上的电平变化(芯片工作在11M频率,示波器调到10NS级),说明地址线没有工作啊,这是为什么呢?
恳请大侠们赐教,再次感激!

相关帖子

沙发
geergeer|  楼主 | 2008-9-22 08:25 | 只看该作者

大家帮帮忙啊

使用特权

评论回复
板凳
lnskngdc| | 2008-9-22 09:18 | 只看该作者

hoho

对外部RAM操作前,要加上  SFRPAGE  = CONFIG_PAGE; 
你试试看,呵呵

使用特权

评论回复
地板
geergeer|  楼主 | 2008-9-22 09:34 | 只看该作者

多谢lnskngdc的回复

我已经在外部寻址的函数里加了SFRPAGE = CONFIG_PAGE,如下:

 功能:向端口发送数据
void outportb(unsigned int DataOrCmd, unsigned char Data)
{
    SFRPAGE  = CONFIG_PAGE;
    *((volatile unsigned char *) DataOrCmd) = Data;//向外部写
}

 功能:向端口接收数据
unsigned char inportb(unsigned int DataOrCmd)
{
    SFRPAGE  = CONFIG_PAGE;
    return *((volatile unsigned char *) DataOrCmd);//从外部读
}

示波器依然没有能够抓到地址线的变化。
之前,我反反复复用示波器抓地址线波形,重新编译,然后再抓,试了不下几十次,曾经有几次编译后能够抓到每次向外部选址时地址线的变化,但是重新编译后又抓不到了,好奇怪!!!

使用特权

评论回复
5
lnskngdc| | 2008-9-22 10:42 | 只看该作者

客气了

EMI0CF   = 0X18  改为0x1b,
最好把你的图发出来看看,外部ram起始地址多少啊?
你测试的小段程序也发出来,这样才能分析,仅凭现有的东西看不出来哪里错了

使用特权

评论回复
6
农民讲习所| | 2008-9-22 11:23 | 只看该作者

你的示波器才差,单步发出的地址脉冲你抓不到

只有连续地址信号才能抓到

使用特权

评论回复
7
geergeer|  楼主 | 2008-9-22 11:51 | 只看该作者

多谢两位

多谢农民讲习所的回复

我用的是泰克TDS1012,应该性能不错的

多谢lnskngdc的回复,我现在要做的是用51控制PDIUSBD12实现USB通信,对一个微控制器而言,PDIUSBD12 看起来就象一个带 8 位数据总线和一个地址位 占用 2 个位置 的存储器件,51的P1.7通过反向器与PDIUSBD12的使能端(低有效)相连,51的P2.4与D12的A0相连,用来选择51给D12写入的是命令还是数据.于是51通过外部寻址的瞬间使能D12(地址为0X8000或0X8010),从而在寻址有效时间内写入或读取数据,51的ALE没有和D12相连,读写信号线两者之间直接相连。电路图我截图了,207KB,但是传不上来啊~~

使用特权

评论回复
8
lnskngdc| | 2008-9-22 14:26 | 只看该作者

是不是太快了?

你在主程序里编写一段测试程序,就是往固定一个单元里不断的写0x55,0xaa,再观察一下,示波器的扫描时间调到1ms都可以,关键是不断的对PDIUSBD12操作,没程序,没图,没法判断,可能性太多了,你也可以先用示波器看PDIUSBD12接的晶振的引脚是否有波形,频率是多少。

使用特权

评论回复
9
geergeer|  楼主 | 2008-9-22 15:30 | 只看该作者

感谢lnskngdc

按lnskngdc所说,写了一段不断读写的测试程序,然后把一些焊点补焊了一下,已能多次抓到波形,但是还是有个别时候抓不到波形~~USB通信依然不行,看来还有别的问题存在~~非常感激lnskngdc同志宝贵的时间和有效的指导~~
农民讲习所同志的建议也是正确的,再次感谢!

使用特权

评论回复
10
gjg191| | 2008-9-22 15:35 | 只看该作者

o

看来硬件问题不小!!

使用特权

评论回复
11
lnskngdc| | 2008-9-22 16:17 | 只看该作者

太客气了

呵呵,解决了就好,硬件连接是关键啊。

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

13

主题

54

帖子

0

粉丝