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