16F883 - SPI - Interrupcion

Todos los Microcontroladores y sus diferentes "familias". Todo este espacio es tuyo para mostrar tu código, consultar con los que más conocen del tema y para disfrutar de estos increíbles y poderosos componentes electrónicos.

Moderador: HJ

Re: 16F883 - SPI - Interrupcion

Notapor Switchxxi » Vie Jun 21, 2013 7:25 pm

Código: Seleccionar todo
clrf byte                ; Byte = 0
movf byte, w
movwf SSPBUFF    ; Apenas se carga el registro SSPBUFF la transmisión comienza automáticamente.

;(movf byte, w) Acá se podría cargar el siguiente byte a W para ganar tiempo ya que el micro de todas formas estará
; aun ocupado enviando por SPI.

L1
btfss SSPSTAT, 0   ; Espero a que termine de enviar los datos.
goto L1
movf SSPBUFF, w  ; Leo el buffer para borrar la bandera SSPSTAT bit 0 (no se si se puede hacer un bcf SSPSTAT, 0 por software
                            ; de todas maneras tardaría lo mismo, lo malo es que me mata lo que cargue antes para ganar tiempo xD.
                            ; Habría que probar ambas opciones.


Repetir el pedazo de código 5 veces.

Lo malo es que ASM es mas lindo de pulir cuando ya se tiene algo andando. Ahí se ve, con un poco de imaginación, si se puede usar alguna u otra aproximación para ganar toda milésima de segundo que se pueda =).
Como se ve en ASM seria mucho mas rápido por lo siguiente: (no se si lo hará así, solo son mis conjeturas)

-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
movf byte, w
movwf SSPBUFF
; Apenas se carga el registro SSPBUFF la transmisión comienza automáticamente.

En C debería llegar a algo muy similar, así que acá mucho no se gana.
-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
L1
btfss SSPSTAT, 0
goto L1
movf SSPBUFF, w


Acá es donde debe flaquear el C ya que imagino que hará lo siguiente:

L1
movlw 0x01
andwf SSPSTAT, w
btfsc STATUS, Z ; Si "C" es lo suficientemente inteligente como para hacer esto
goto L1
movf SSPBUFF, w

-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

Habría que ver como se incrusta ASM en "C", en el compilador HI-TECH C es:

#asm
rutina 1
rutina 2
Etiqueta: // Usar dos puntos al final ":"
#endasm


si el dato que se usa en c es de 8 bits:

unsigned char Dato;

se puede incrustar dentro de la parte de asm así

#asm

movf _dato, w

#endasm


Igual yo primero estructuraría todo el programa aun sabiendo que quizás me quede corto con todo. A partir de ahí se comenzaría a ir afinando cada parte hasta llegar al mejor resultado, ya que una vez se ve cada cosa uno termina diciendo "ahhh, mira, esto si lo hago así tengo esta ventaja". De otra forma lo que en un principio parecía ser la mejor opción puede terminar empeorándola en algunos casos xD.

Saludos.
En mis circuitos, el humo no se cobra, va de regalo.
            Imagen
Avatar de Usuario
Switchxxi
 
Mensajes: 215
Registrado: Sab Mar 23, 2013 4:10 pm
Ubicación: Bs. As - Argentina

Anterior

Volver a Microcontroladores

¿Quién está conectado?

Usuarios navegando por este Foro: No hay usuarios registrados visitando el Foro y 1 invitado