Hola a todos!!
Este es mi primir post en el foro
, y como suele ser normal comienzo con una pregunta mi participación en él.
Mi problema es el siguiente:
Estoy empleando el MCU 8051, y este no posee el protocolo SPI, y por lo tanto tengo que simularlo empleando las patillas del MCU para comnicarlo con el dispositivo de comunicación de Microchip ENC28J60. Ya he hecho la inicialización del dispositivo, pero no estoy seguro que se carga en él, ya que no consigo leer ninguno de los registro que supuestamente he cargado. Según he leido en el Datasheet del dispositivo, la entrada de datos se realiza en el flanco de subida y la salida de datos en el flanco de bajada. Pero no consigo leer, y por lo tanto creo que tampoco escribirlos.
Aqui les dejo escrito el código correspondiente con el envio y recepción de datos ya que el resto creo que no tiene el menor interes ya que es la inicialización del dispositivo. Espero vuestros comentarios, un saludo y gracias.
Codigo (ASM)
;------------------------------------------------------------------------------
;Dirección de acceso
;------------------------------------------------------------------------------
SPI: MOV R0,#08H
MOV A,ADDRESS
SPI_8: CLR SCK
RLC A
MOV MO,C
; MOV P3.4,C
; MOV R2,#064H
;LOOP_SPI: MOV R1,#0FFH
; DJNZ R1,$
; DJNZ R2,LOOP_SPI
SETB SCK
CLR SCK
DJNZ R0,SPI_8
RET
;------------------------------------------------------------------------------
;Transmisión de datos
;------------------------------------------------------------------------------
BEAM: MOV A,TX_MEM
MOV R0,#08H ;Número de bits a mandar
BEAM_8: RLC A
MOV MO,C ;Bit a mandar
CLR SCK
; MOV R1,#0FFH
; DJNZ R1,$
SETB SCK
CLR SCK
DJNZ R0,BEAM_8 ;Comprobación de envio de 8 bits
RET
;------------------------------------------------------------------------------
;Recepción de datos
;------------------------------------------------------------------------------
RECEIVE_8: MOV R0,#08H ;Número de bits a recibir.
SJMP RECEIVE
RECEIVE_16: MOV R0,#10H ;Número de bits a recibir.
RECEIVE: SETB SCK
; MOV R2,#064H
;LOOP_RECEIVE: MOV R1,#0FFH
; DJNZ R1,$
; DJNZ R2,LOOP_RECEIVE
CLR SCK ;Flanco de subida
MOV C,MI ;Bit recibido se guarda en carry
MOV P3.4,C ;Prueba
RLC A ;Roto acumulador y así paso el bit al acumulador
DJNZ R0,RECEIVE
MOV RX_MEM,A
RET