Autor Tema: Emular o simular por software el protocolo SPI  (Leído 3151 veces)

0 Usuarios y 1 Visitante están viendo este tema.

aiken86

  • Visitante
Emular o simular por software el protocolo SPI
« en: 09 de Mayo de 2008, 15:03:11 »
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