数据采集存储,求助大家好,我是新手。有问题请教大家啊!
我要做一个数据采集存储的东西,程序编完了,可是运行起来不对。请大家帮我看一下!问题处在那儿?我用的单片机是C8051F021,AD是内部AD,存储器是AT45DB321C
void SPI0_Write(unsigned char ch,unsigned char N) //SPI向AT45DB081B写一个字节
{
int i;
CS1 = 0;
//for(i=0;i <20;i++); //片选信号使能
SPIF = 0; //准备输出数据
SPI0DAT = ch; //初始化输出,提供SCK信号,向器件写一个字节
while(TXBSY==0); //等待一个字节数据输出完毕
//for(i=0;i <100;i++);
if ( N==0x01 )
{CS1 = 1;} //通讯结束
}
WDTCN = 0xde; //禁止看门狗定时器
WDTCN = 0xad;
SYSCLK_Int();
PORT_Int();
SPI0_Init();
ADC_Int();
REF0CN=0x03; //允许内部基准点压
for(i=0;i <256;i++); //延时
xr=0; //以下是FLASH擦除
k=0x1000;
for(n=0;n <64;n++)
{ pwrite = k;
FLSCL |= 0x01;
PSCTL = 0x03; // MOVX writes erase FLASH page
*pwrite = 0; // initiate page erase
PSCTL = 0; // MOVX writes target XRAM
FLSCL &= ~0x01; // disable FLASH writes/erases from user software
k+=0x0200;
} //以上是片内FLASH擦除
//CS1=0;
EMI0CF=0x06;
// P1 =0xFF;
//允许输入
//CS1=0;
/*for(i=0;i <10000;i++)
{//CS1=0;
SPI0_Write(0x84,0x01);
for(n=0;n <2000;n++);
CS1=1;
for(n=0;n <200;n++);
}*/
CS1=1;
for(i=0;i <100;i++);
for(i=0;i <5;i++)
{
//CS1=0;
//for(j=0;j <20;j++);
/*ADC1CN &= 0xdf;
ADC1CN |= 0x10;
while(ADC1 <=0x90) //预采集
{ ADC1CN &= 0xdf;
ADC1CN |= 0x10;
while(!(ADC1CN&0x20));
}*/
//CS1=0;
//for(j=0;j <40;j++);
SPI0_Write(0x84,0x00); //向片外FLASH写指令
SPI0_Write(0x00,0x00); //以下三行是写初始地址
SPI0_Write(0x00,0x00);
SPI0_Write(0x00,0x00);
for(j=0;j <10;j++)
for(r=0;r <528;r++) //以下是写buffer1
{
ADC1CN &= 0xdf; //AD转换器清标志位
ADC1CN |= 0x10; //AD转换开始
while(!(ADC1CN&0x20)); //等待采集结束
ch=ADC1;
//ch=0x50;
SPI0_Write(0x00,0x01); //写数据
while(TXBSY==0);
//for(n=0;n <1000;n++); //等待
}
//CS1=1; //以上是写buffer1
l=0x00;
m=0x04;
p=0x00;
SPI0_Write(0x88,0x00); //写指令
SPI0_Write(l,0x00); //写地址
SPI0_Write(m,0x00);
SPI0_Write(p,0x01);
for(i=0;i <528;i++) //以下是从buffer1向主存储器写数据
{ //CS1=0;
for(j=0;j <20;j++);
SPI0_Write(ch,0x01); //写数据
//while(TXBSY==0);
//for(j=0;j <800;j++); //等待
//xr++;
//CS1=1;
/*if (m <0x210) //增地址
{p=0x00;
m++;}
else if (l <0x210)
{
p=0x00;
m=0x00;
l++;}*/
for(j=0;j <800;j++);
}