实在被STC单片机搞糊涂了。
STC单片机全面兼容51,但是现在我遇到一个很奇怪的问题。按照51来说,只要选好地址,可以像访问外部存储器一样访问外设。可是用到STC上面,外部存储器还行,但是外设(DA)怎么都访问不了。WR端一点信号都没有。有没有搞过的大侠指点一下。 看手册 里面有啊 这个要禁止访问内部AUX_RAM吧。下载时关掉选择禁止访问 已经关掉了。 WR无信号,你外部存贮器是如何访问的? 回复【4楼】BDXing6-----------------------------------------------------------------------
我晕就晕在这里。外部存储器我试过62256,一点问题没有。然后我在电路板上加上了DAC0832。电路形式为单缓冲方式,电路形式非常简单(各种单片机教材上都有),WR1和WR2都接到了WR上去,CS接到了P2.7。本想以访问地址0x7FFF的方式来访问DAC的数据寄存器,结果不行。然后我把接到WR的线接到了P2.6,单双缓冲形式都能用了。接到WR上时,WR一点信号都没有。程序是按照访问62256的形式改写的。 学习了.. 你换个AT的51来看看。先确定你程序没问题。 好像是的,我的板子的说明书和板子上的不一样. /* 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,没有办法试。 把WR外接一上拉电阻,使用STC中,发现除了P0口外其他的有的IO拉不起来,需接上拉电阻才可以。真不知道这玩意是怎么检测的,内部上拉出问题都没检测出来 回复【10楼】marshallemon
-----------------------------------------------------------------------
外接上拉电阻?WR是低电平有效的,我在测量的时候发现WR一直就是一个高电平,这应该说明已经被拉起来了吧。 应该是时序问题,能正常读取RAM,不能读0832,注意0832WR1和WR2要求的负脉冲宽至少500ns,不知道你用什么系列MCU,主频多少。好好看看资料,估计做不到这点,如何这个估计是对的,你可以不使用WR来控制0832,改用一般程序控制来解决。或者通过改变系统总线速度看是否可行。另外,测量WR一直是高电平,是什么测的?示波器?如果是电压表就没必要测了,那是测不出来的。对于标准的TTL电路,没有必要接上拉。
页:
[1]