Hola Lorenzo, si, el funcionamiento de la electrónica de un motor la conosco bastante, pero el sensor de fase debes tener en cuenta que no todos los autos lo traen, algunos solo disponen de la rueda fónica.
Pasando al tema que nos compete:
Tal y como suponía tienes varios errores en el programa que as realizado, aquí te dejo el programa, pero bien estructurado:
LIST P = 16F84A
INCLUDE <P16F84A.INC>
ERRORLEVEL -302
;-------------------------------------------------------
REVOLUCION EQU H'0C'
RETRASO EQU H'0D'
RETRASO1 EQU H'0E'
RETRASO2 EQU H'0F'
;-------------------------------------------------------
ORG .0
bcf STATUS,RP0
bcf STATUS,RP1
GOTO CONFIGURACION
ORG .4
bcf INTCON,GIE
RETURN
;-------------------------------------------------------
;Configuramos los archivos.
CONFIGURACION
clrf PORTA
clrf PORTB
bsf STATUS,RP0
clrf TRISB
movlw B'00010000'
movwf TRISA
movlw b'10101000'
movwf OPTION_REG
bcf STATUS,RP0
goto INICIO
;-------------------------------------------------------
;Rutina de retardo de unos 250 milisegundos.
INICIO
clrf TMR0
movlw .4
movwf RETRASO2
PAUSA
movlw .250
movwf RETRASO1
PAUSA1
movlw .250
movwf RETRASO
PAUSA2
decfsz RETRASO,F
goto PAUSA2
decfsz RETRASO1,F
goto PAUSA1
decfsz RETRASO2,F
goto PAUSA
movf TMR0,W ;Rutina para reconocer los impulsos del TMR0.
movwf REVOLUCION
movwf PORTB
goto INICIO
;-------------------------------------------------------
END
Como podras apreciar hay unas cuantas diferencias, que tratare de explicarte:
INCLUDE , esta instrucción hace que el compilador incluya en tu programa las definiciones para cada una de las funciones de las cuales dispone el PIC, de esta manera no tienes que andar definiendolas tú en el programa, como puedes ver yo las e borrado y el compilador no te tira ningun error.
ERRORLEVEL , esta instruccion le indica al compilador que no te de una advertencia cuando un reguistro no se encunetra en la paguina 0 de la memoria RAM, pero si deseas sacarla no habra problemas, y el compilador te indicara que reguistros estan en una paguina distinta a la cero para que tu prestes atencion si previamente as seleccionado la paguina correcta, esto te ayuda a no comenter errores de paguinacion de RAM.
ORG 0 y ORG4, son las direcciones de arranque y de interrupcion del PIC, despues de ORG0 yo e colocado las 2 instrucciones bcf, para asegurarme de que el PIC se inicialice en el banco de mamoria RAM cero. Luego de ORG 4 coloco desactivar las interrupciones, ya que de la unica forma que llegue a esa posicion es que estas se activen, y si quedan de esa manera haran que tu programa pueda funcionar mal, luego retorno donde estaba con anterioridad.
CONFIGURACIÓN, los clrf deben ir delante de la configuración de los puertos, para asegurarte de que luego de configurados ya se encuentran en el estado deseado.
Se configura puerto B como salida y el pin correspondiente a la entrada de TMR0 (RA4) como entrada.
Hay que acordarce de pasar nuevamente a la paguina cero de la RAM con la funcion bcf, de lo contrario no funcionará el programa.
Con el goto saltamos a la rutina de INICIO, que en este caso esta seguido de lo anterior, pero si de por medio hubiera otra rutina el programa comensaría en un lugar no deseado.
En la sub-rutina de INICIO, estaba casi todo bien, salvo que te faltaba definir el destino de los DECFSZ colocando ",F", si no lo haces el compilador te indicaria una advertencia, no te olvides nunca de definir el destino que para esta y la gran mayoria de las instrucciones pueden ser 2, el propio reguistro que se indica con ",F", o el reguistro W que se indica con ",W"
En el proximo mensaje incluire un circuito de entrada para que puedas sensar bien la señal del auto.
Bueno, espero que puebes esta nueva rutina y me comentes tus dudas y experiencias.
Un saludo.
Atte. CARLOS.