Emular SPI para ENC28J60

A

aiken

Hola a todos de nuevo, estoy creando un programa para emular el puerto SPI y así poder comunicar un 8051 sin dicho puerto con el controlador de Ethernet ENC28J60.
La inicialización de este dispositivo ya la tengo realizada, mi problema es que no se si este dispositivo recibe o no los comandos que le mando desde el micro, ya que no consigo leer ningún registro.
Mi duda es la siguiente, siguiente, mi código para recibir y mandar datos es el siguiente:
SPI: CLR CS
MOV R0,#08H
MOV A,ADDRESS
SPI_8: RLC A
MOV MI,C
SETB SCK
MOV R1,#010H
DJNZ R1,$
CLR SCK
DJNZ R0,SPI_8
SETB CS
RET

;------------------------------------------------------------------------------
;Transmisión de datos
;------------------------------------------------------------------------------
BEAM: CLR CS
MOV A,TX_MEM
MOV R0,#08H ;Número de bits a mandar
BEAM_8: RLC A
MOV MI,C
SETB SCK
MOV R1,#010H
DJNZ R1,$
CLR SCK
DJNZ R0,BEAM_8 ;Comprobación de envio de 8 bits
SETB CS
RET
;------------------------------------------------------------------------------
;Recepción de datos
;------------------------------------------------------------------------------
RECEIVE_8: CLR CS
MOV R0,#08H ;Número de bits a recibir.
SJMP RECEIVE
RECEIVE_16: CLR CS
MOV R0,#10H ;Número de bits a recibir.
RECEIVE: SETB SCK
MOV R1,#080H
DJNZ R1,$
CLR SCK ;Flanco de bajada
MOV C,MO ;Bit recibido se guarda en carry
RLC A ;Roto acumulador y así paso el bit al acumulador
DJNZ R0,RECEIVE
MOV RX_MEM,A
SETB CS
RET

El controlador emplea el modo 0,0 del protocolo SPI.
¿Hay algo que este mal en este código?
Y otra pregunta,¿ si reseteo por software el ENC28j60, tengo que notar algo en los led, o no se percibe nada?
Gracias por vuestra ayuda, un saludo a todos
 
Nunca programé un 8051, pero viendo el código me llama la atención no ver ninguna rutina de retardo para el envío ni la recepción de datos. ¿Cómo fijás la velocidad de la transmisión?.
Superado lo de la velocidad de transmisión, el código te serviría para half duplex solamente no? (digo, por estar la rutina de envío de datos separada de la de recepción de datos), configuraste el ENC28J60 para half duplex? (sección 9 de la hoja de datos).
 
Hola Ardogan, lo primero si que he creado unos retardos, y si, como bien has dicho la comunicación que empleo es half duplex, pero esto solo respecto a la comunicación Ethernet.
Aunque en modo en que tengo implementado la comunicación SPI, también es half duplex, pero cuando consiga que funcione mediante esta comunicación, intetntaré el full duplex.
Un saludo y gracias por tu ayuda.
 
Atrás
Arriba