Не могу считать ни статусный регистр, ни один байт памяти.
Выход микросхемы находится всегда в третьем состоянии.
Нога запрещения записи #WP подана через 1к резистор на +5В.
Нога #HOLD на земле.
Схема подключения трехпроводная, подключение к pic30f2011.
выводы памяти SO/SI (выход/вход данных) подключены к RC13;
вывод памяти #CS (выбор микросхемы) подключены к RC14;
вывод памяти SCK (синхроимпульсы) подключены к RC15.
Пробовал разъединять вход и выход данных, всё по прежнему, на выходе ИМС памяти ни чего.
Все тайминги проверял, вроде соответсвуют заявленным в DataSheet!
Помогите разобраться!!!!
Код программы содержит инициализацию памяти и дальнейшее чтение статусного регистра в бесконечном цикле.
Код
#include "p30fxxxx.h"
#include <libpic30.h>
#include <adc12.h>
_FOSC(0xFFE3);
_FWDT(WDT_OFF);
_FBORPOR(MCLR_EN & PWRT_OFF);
_FGS(CODE_PROT_OFF);
_FICD(ICS_PGD);
unsigned int N;
unsigned int Nstr;
void WriteCom(unsigned char wrcom) //Transmite byte of data
{
unsigned char i;
unsigned char j;
for (i=0;i<8;i++)
{
PORTCbits.RC13=wrcom%0x02;
for (j=0;j<2;j++);
PORTCbits.RC15=1;
for (j=0;j<2;j++);
PORTCbits.RC15=0;
for (j=0;j<2;j++);
wrcom=wrcom/0x02;
};
}
void InitMem () //Initializate memory
{
unsigned int j;
unsigned int i;
LATCbits.LATC14=0; //WREN
WriteCom(0x60);
for (j=0;j<2;j++);
LATCbits.LATC14=1;
for (j=0;j<2;j++);
LATCbits.LATC14=0; //WRSR
WriteCom(0x80);
WriteCom(0x41);
for (j=0;j<2;j++);
LATCbits.LATC14=1;
for (j=0;j<2;j++);
}
int main()
{
OSCCON=0xff34;
ADPCFG = 0xFFFF;
TRISCbits.TRISC15=0; //SCK
PORTCbits.RC15=0;
TRISCbits.TRISC14=0; // #CS
LATCbits.LATC14=1;
TRISCbits.TRISC13=0; // SI/SO
PORTCbits.RC13=0;
int k=0;
unsigned int i;
unsigned char j;
unsigned int rd=0;
for (i=0;i<4;i++) //Timing for start memory
{
for (rd=0x00;rd<0x93fe;rd++);
};
InitMem();
N=0;
Nstr=0;
unsigned int match_value=0x55;
while (1)
{
LATCbits.LATC14=0; //WREN
WriteCom(0x60);
for (i=0;i<2;i++);
LATCbits.LATC14=1;
for (i=0;i<2;i++);
LATCbits.LATC14=0;
WriteCom(0xa0);
TRISCbits.TRISC13=1;
for (j=0;j<8;j++)
{
for (i=0;i<2;i++);
PORTCbits.RC15=1;
for (i=0;i<2;i++);
rd=rd+PORTCbits.RC13;
rd=rd*0x2;
PORTCbits.RC15=0;
for (i=0;i<2;i++);
};
LATCbits.LATC14=1;
for (i=0;i<2;i++);
TRISCbits.TRISC13=0;
for (i=0;i<2;i++);
}
return 0;
}
#include <libpic30.h>
#include <adc12.h>
_FOSC(0xFFE3);
_FWDT(WDT_OFF);
_FBORPOR(MCLR_EN & PWRT_OFF);
_FGS(CODE_PROT_OFF);
_FICD(ICS_PGD);
unsigned int N;
unsigned int Nstr;
void WriteCom(unsigned char wrcom) //Transmite byte of data
{
unsigned char i;
unsigned char j;
for (i=0;i<8;i++)
{
PORTCbits.RC13=wrcom%0x02;
for (j=0;j<2;j++);
PORTCbits.RC15=1;
for (j=0;j<2;j++);
PORTCbits.RC15=0;
for (j=0;j<2;j++);
wrcom=wrcom/0x02;
};
}
void InitMem () //Initializate memory
{
unsigned int j;
unsigned int i;
LATCbits.LATC14=0; //WREN
WriteCom(0x60);
for (j=0;j<2;j++);
LATCbits.LATC14=1;
for (j=0;j<2;j++);
LATCbits.LATC14=0; //WRSR
WriteCom(0x80);
WriteCom(0x41);
for (j=0;j<2;j++);
LATCbits.LATC14=1;
for (j=0;j<2;j++);
}
int main()
{
OSCCON=0xff34;
ADPCFG = 0xFFFF;
TRISCbits.TRISC15=0; //SCK
PORTCbits.RC15=0;
TRISCbits.TRISC14=0; // #CS
LATCbits.LATC14=1;
TRISCbits.TRISC13=0; // SI/SO
PORTCbits.RC13=0;
int k=0;
unsigned int i;
unsigned char j;
unsigned int rd=0;
for (i=0;i<4;i++) //Timing for start memory
{
for (rd=0x00;rd<0x93fe;rd++);
};
InitMem();
N=0;
Nstr=0;
unsigned int match_value=0x55;
while (1)
{
LATCbits.LATC14=0; //WREN
WriteCom(0x60);
for (i=0;i<2;i++);
LATCbits.LATC14=1;
for (i=0;i<2;i++);
LATCbits.LATC14=0;
WriteCom(0xa0);
TRISCbits.TRISC13=1;
for (j=0;j<8;j++)
{
for (i=0;i<2;i++);
PORTCbits.RC15=1;
for (i=0;i<2;i++);
rd=rd+PORTCbits.RC13;
rd=rd*0x2;
PORTCbits.RC15=0;
for (i=0;i<2;i++);
};
LATCbits.LATC14=1;
for (i=0;i<2;i++);
TRISCbits.TRISC13=0;
for (i=0;i<2;i++);
}
return 0;
}