Veo que hay un 6 en el contador de bits + la primera ejecución tengo 7 bits? O como queda el 8°?
Muchas gracias por tu apoyo.
Saludos
Perdon seguro que fue el copy-paste de alguna parte del borrador que habia realizado, la idea era un contador para los 8 bits y el otro un contador para los 4 bytes.
Una cosa que me acorde el otro dia y es:
No pone nuevamente CS1 a 1Por los contadores deberian quedar:
MOVLW 0x05 ; Por que tiene el decrementar ANTES de la funcion
MOVF CONTADOR_BYTE
MOVLW 0x07 ; Por que decremento despeus de la funcion
MOVF CONTADOR_BITS
Muy buena la rutina KillerJC, muchas gracias. Creo que en definitiva si es mejor, solo un par de preguntas, sucede que no entiendo del todo como funcionan los FSR...
en los FSR cargas la direccion de memoria del registro que vos queres acceder.
Entonces si queres leer/escribir ESA direccion utilizas el INDF ( es decir el contenido de esa direccion )
Ej:
MI_REG EQU 0x20
MI_REG2 EQU 0x21
MI_REG3 EQU 0x22
cargo 0x20 en FSR0 (MOVLW y MOVWF )
Quiero asignarle el valor de 0x35 a ese registro
MOVLW 0x35
MOVWF INDF0 ; No es un registro de por si INDF solo apunta a lo que le dice FSR, por lo tanto aca estaria cargando el valor en MI_REG
INCF FSR0,F ; Incremento direccion ahora 0x21
MOVLW 0x98
MOVWF INDF0 ; Ahora MI_REG2 vale 0x98
Tambien otra cosa que podras notar es que no me importa donde esta ubicado el registro en cuestion, me puedo mantener en el banco donde estan los registros CONTADOR_BITS y CONTADOR_BYTES y los demas pueden estar en cualquier banco sin necesidad de cambiar los BSR, igual los PIC18 tienen mucha mas complejidad y yo los maneje muy poco en ASM, por eso seguro que se puede hacer algo mas pequeño o eficiente y no lo que hice. Algunas de las cosas que agrega el PIC18:
Por ejemplo podes reemplazar:
MOVLW direccion del primer registro alto ;Aqui meto la direccion? Por ejemplo 0x020?
MOVF FRS0H
MOVLW direccion del primer registro bajo ; Aqui seria la 4 consecutiva?
MOVF FRS0L
por
LFSR 0,DIRECCION ; DIRECCION, es la direccion del registro (12 bits)
Tambien si queres asignar un valor y luego incrementar el valor del FSR0 sin necesidad de realizar 2 instrucciones para eso, simplemente usas un registro que se llama POSTINC0 , este funciona igual que el INDF pero ademas incrementa FSR0 ( y no tenes que preocuparte por que estan divididos en FSR0H:FSR0L ya que lo maneja como si fuera uno de 12 bits, me refiero al overroll de FSR0L de 0xFF a 0x00 influye en FSR0H )
De todas formas tu codigo es mas rapido, pero ocupa mas espacio, asi que depende de lo que queres hacer vos.
Y como dije en mi post, es solo fue solo un intento de hacerlo, por eso me quedaron algunos valores mal y la falta del CS1 a 1, veo que no recarga el contador de bits, hay varias fallas xD. Y puede que tenga mas cosas malas.