Estoy intentando conectar una interfaz ADXL345 a 8051 - AT89C51RC2 a través de la interfaz SPI.
He usado el siguiente código tomado de aquí :
include "Init.h"
define SS_ADXL P1_0;
void SPI_interr_routine(void);
char serial_data;
char data_example;
char data_save;
char transmit_completed;
void main(void)
{
// Insert code
Hardware_init();
transmit_completed = 0;
data_example=0x55;
data_save = 0;
printf("\n\r1111111111111");
SPCON |= 0x10; /* Master mode */
P1_1=1; /* enable master */
SPCON |= 0x82; /* Fclk Periph/128 */
SPCON &= ~0x08; /* CPOL=0; transmit mode example */
SPCON |= 0x04; /* CPHA=1; transmit mode example */
IEN1 |= 0x04; /* enable spi interrupt */
SPCON |= 0x40; /* run spi */
P1_1 = 0;
EA=1; /* enable interrupts */
//while(1) /* endless */
//{
SS_ADXL = 0;
SPDAT= (0x32 | 0x80); /* send an example data */ //
while(!transmit_completed);/* wait end of transmition */
transmit_completed = 0; /* clear software transfert flag */
SPDAT=0x00; /* data is send to generate SCK signal */
while(!transmit_completed);/* wait end of transmition */
transmit_completed = 0; /* clear software transfert flag */
data_save = serial_data; /* save receive data */
SS_ADXL = 1;
//}
printf("\n\r%c data_save = " , data_save);
}
void it_SPI(void) __interrupt (9)
{
SPI_interr_routine();
return;
}
void SPI_interr_routine(void)
{
if((SPSTA & 0x80) == 1)
{
serial_data = SPDAT;
transmit_completed=1;
}
return;
}
Conexiones de hardware:
He usado este convertidor de nivel lógico para conectar el 8051 a ADXL345.
El pin P1.1 (SS) de 8051 no está conectado y lo habilito en el software al configurar P1.1 a 1.
El pin CS del ADXL345 está conectado a un GPIO de 8051 y estoy seleccionando el esclavo (ADXL345) configurando el pin GPIO a bajo antes de escribir / leer y luego configurarlo en alto. Estoy usando el módulo SPI incorporado en 8051.
Cuando ejecuto el código anterior, el bit SPIF no se establece.
déjeme saber si hay algún problema con la conexión del hardware o el código.
Gracias