honestapple 发表于 2011-10-15 10:50:49

实在被STC单片机搞糊涂了。

STC单片机全面兼容51,但是现在我遇到一个很奇怪的问题。按照51来说,只要选好地址,可以像访问外部存储器一样访问外设。可是用到STC上面,外部存储器还行,但是外设(DA)怎么都访问不了。WR端一点信号都没有。有没有搞过的大侠指点一下。

lixupeng 发表于 2011-10-15 12:45:37

看手册 里面有啊

xzyang 发表于 2011-10-15 13:56:52

这个要禁止访问内部AUX_RAM吧。下载时关掉选择禁止访问

honestapple 发表于 2011-10-15 19:05:48

已经关掉了。

BDXing6 发表于 2011-10-15 21:01:55

WR无信号,你外部存贮器是如何访问的?

honestapple 发表于 2011-10-15 23:12:07

回复【4楼】BDXing6
-----------------------------------------------------------------------

我晕就晕在这里。外部存储器我试过62256,一点问题没有。然后我在电路板上加上了DAC0832。电路形式为单缓冲方式,电路形式非常简单(各种单片机教材上都有),WR1和WR2都接到了WR上去,CS接到了P2.7。本想以访问地址0x7FFF的方式来访问DAC的数据寄存器,结果不行。然后我把接到WR的线接到了P2.6,单双缓冲形式都能用了。接到WR上时,WR一点信号都没有。程序是按照访问62256的形式改写的。

iceq90821 发表于 2011-10-15 23:24:32

学习了..

zouyf12 发表于 2011-10-16 00:27:41

你换个AT的51来看看。先确定你程序没问题。

hu71613528 发表于 2011-10-16 00:39:56

好像是的,我的板子的说明书和板子上的不一样.

honestapple 发表于 2011-10-16 18:47:35

/* DAC0832 单缓冲工作方式 */
/* DAC0832 CS + XFER ---> P27 */
/* DAC0832 WR1 + WR2 ---> WR */
#include <STC\stc11.h>
#include <intrins.h>
#include <absacc.h>

unsigned char xdata *dac_cs = 0x7FFF;

void Delay1ms(unsigned int i);

void main( void )
{
        unsigned char a;
        AUXR |= EXTRAM;   // 禁止访问内部存储器
    a = 0;
        while( 1 ) {
                *dac_cs = a;
                Delay1ms( 10 );
                a++;
        }                                                       
}

//Delay subroutine(22.1184Mhz)
void Delay1ms(unsigned int i)
{
    unsigned char j,k;
    do
        {
      j = 44;
      do
                {
            k = 100;
            do
                        {
                _nop_();
            } while (--k);
      } while (--j);
    } while (--i);
}

程序贴在上面了。因为手头没有AT的51,没有办法试。

marshallemon 发表于 2011-10-16 20:21:13

把WR外接一上拉电阻,使用STC中,发现除了P0口外其他的有的IO拉不起来,需接上拉电阻才可以。真不知道这玩意是怎么检测的,内部上拉出问题都没检测出来

honestapple 发表于 2011-10-16 21:22:20

回复【10楼】marshallemon
-----------------------------------------------------------------------

外接上拉电阻?WR是低电平有效的,我在测量的时候发现WR一直就是一个高电平,这应该说明已经被拉起来了吧。

BDXing6 发表于 2011-10-17 09:47:55

应该是时序问题,能正常读取RAM,不能读0832,注意0832WR1和WR2要求的负脉冲宽至少500ns,不知道你用什么系列MCU,主频多少。好好看看资料,估计做不到这点,如何这个估计是对的,你可以不使用WR来控制0832,改用一般程序控制来解决。或者通过改变系统总线速度看是否可行。另外,测量WR一直是高电平,是什么测的?示波器?如果是电压表就没必要测了,那是测不出来的。对于标准的TTL电路,没有必要接上拉。
页: [1]
查看完整版本: 实在被STC单片机搞糊涂了。