# Emular SPI para ENC28J60



## aiken (May 12, 2008)

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


----------



## Ardogan (May 12, 2008)

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).


----------



## aiken (May 12, 2008)

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.


----------

