Está en la página 1de 16

Tacómetro con PIC16f84A

Para este proyecto nos basamos mucho en el trabajo del ING. FEDERICO
ALVAREZ MONTAÑO del TECNOLÓGICO DE ESTUDIOS SUPERIORES DE ECATEPEC .
INGENIERÍA ELECTRÓNICA. Al cual le agradecemos mucho.

PROGRAMA

;*********************************************************************
***

__CONFIG _CP_OFF & _WDT_ON & _PWRTE_ON & _XT_OSC


LIST P=16F84A
INCLUDE

; PROGRAMA PARA DETERMINAR LA VELOCIDAD DE GIRO DE UN MOTOR EN RPM


ORG 0X00
GOTO START
PORTA EQU 0X05
PORTB EQU 0X06
TMR0 EQU 0X01
PCL EQU 0X02
STATUS EQU 0X03
OPCION EQU 0X81
INTCON EQU 0X0B
PDel0 EQU 0X10
PDel1 EQU 0X11
PDel2 EQU 0X12
PDel01 EQU 0X13
PDel11 EQU 0X14
REG0 EQU 0X24
REG1 EQU 0X23
REG2 EQU 0X22
REG3 EQU 0X21
REG4 EQU 0X20
REGA EQU 0X0A
;--------------------------------------

; SECTOR DE INTERRUPCION
ORG 0X04
GOTO TEST
;--------------------------------------

; INICIO
ORG 0X50
START
MOVLW B'00010000'
TRIS PORTA ;CONFIGURA RA4 COMO ENTRADA Y RA3 A RA0 COMO SALIDAS
MOVLW 0X00
TRIS PORTB ;CONFIGURA EL PORTB COMO SALIDAS
BSF STATUS,5 ;CAMBIA A BANCO 1
MOVLW B'00111000' ;CONFIGURA EL REGISTRO OPTION COMO CONTADOR Y CON EL
MOVWF OPCION ;PRESCALER ASIGNADO AL PERRO
BCF STATUS,5 ;REGRESA A BANCO CERO
MOVLW B'10000000' ;HABILITA LAS INTERRUPCIONES GIE(NO HABILITA EL TMR0)
MOVWF INTCON ;EN EL CONTROL DE INTERRUPCIONES
;--------------------------------------------

; PROGRAMA PRINCIPAL
MAIN
CLRW
MOVWF REG0
MOVWF REG1
MOVWF REG2
MOVWF REG3
MOVWF REG4
CALL T6M
BCF PORTA,3 ;RS = 0
BCF PORTA,1 ;RW = 0
CALL INIEX ;INICIALIZA EL LCD
MOVLW 0X80 ;SELECCIONA PRIMER LINEA, PRIMER RENGLON
MOVWF PORTB
CALL HABI
BSF PORTA,3 ;RS = 1
CALL M1 ;PRIMER MENSAJE
BCF PORTA,3 ;RS = 0
CALL INIEXSC ; INICIALIZA EL DISPLAY SIN CLEAR
MOVLW 0XC0 ;SELECCIONA SEGUNDA LINEA 1ER COLUMNA

;---------

MOVWF PORTB
CALL HABI
BSF PORTA,3 ;RS = 1
CALL TESE ;MENSAJE "xxxxx DIGITALES2"
CONTA
MOVLW .255
MOVWF TMR0
BSF INTCON,5 ;HABI LITA EL TMR0
CALL T1S ;LLAMA RETARDO DE 1 SEGUNDO
BCF INTCON,5
BCF INTCON,2
CALL LEER
CLRW
MOVWF REG0
MOVWF REG1
MOVWF REG2
MOVWF REG3
MOVWF REG4
GOTO CONTA
;--------------------------------------------
; RUTINA DE ATENCION A LA INTERRUPCION
TEST
INCF REG0,1
MOVF REG0,0
XORLW 0X0A
BTFSS STATUS,2
GOTO SALTO
CLRF REG0
INCF REG1,1
MOVF REG1,0
XORLW 0X0A
BTFSS STATUS,2
GOTO SALTO
CLRF REG1
INCF REG2,1
MOVF REG2,0
XORLW 0X0A
BTFSS STATUS,2
GOTO SALTO
CLRF REG2
INCF REG3,1
MOVF REG3,0
XORLW 0X0A
BTFSS STATUS,2
GOTO SALTO
CLRF REG3
INCF REG4,1
MOVF REG4,0
XORLW 0X0A
BTFSS STATUS,2
GOTO SALTO
CLRF REG4
SALTO
BCF INTCON,2
BCF INTCON,0
MOVLW .255
MOVWF TMR0
RETFIE
;-----------------------------------
;-----------------------------------
; RUTINA PARA LECTURA DE DATOS

LEER
NOP
WR6
BCF PORTA,3 ;RS = 0
CALL INIEXSC ; INICIALIZA EL LCD SIN CLEAR
MOVLW 0X85 ;SELECCIONA PRIMER LINEA, COLUMNA 6
MOVWF PORTB
CALL HABI
BSF PORTA,3 ;RS = 1
MOVF REG4, 0
CALL TABLA
MOVWF PORTB
CALL HABI
WR7
BSF PORTA,3 ;RS = 1
MOVF REG3,0
CALL TABLA
MOVWF PORTB
CALL HABI
WR8
BSF PORTA,3 ;RS = 1
MOVF REG2,0
CALL TABLA
MOVWF PORTB
CALL HABI
WR9
BSF PORTA,3 ;RS = 1
MOVF REG1,0
CALL TABLA
MOVWF PORTB
CALL HABI
WR10
BSF PORTA,3 ;RS = 1
MOVF REG0,0
CALL TABLA
MOVWF PORTB
CALL HABI
RETURN
;---------------------------------------
; TABLA DE CONVERSION, DATOS A CARACTERES ASCI I
TABLA
ADDWF PCL ,1
RETLW "0"
RETLW "1"
RETLW "2"
RETLW "3"
RETLW "4"
RETLW "5"
RETLW "6"
RETLW "7"
RETLW "8"
RETLW "9"
RETLW "?"
;----------------------------------------
; MENSAJE DE INICIO
M1
BSF PORTA,2
MOVLW "V"
MOVWF PORTB
CALL T6M
BCF PORTA,2
CALL T6M
BSF PORTA,2
MOVLW "E"
MOVWF PORTB
CALL T6M
BCF PORTA,2
CALL T6M
BSF PORTA,2
MOVLW "L"
MOVWF PORTB
CALL T6M
BCF PORTA,2
CALL T6M
BSF PORTA,2
MOVLW ":"
MOVWF PORTB
CALL T6M
BCF PORTA,2
CALL T6M
BSF PORTA,2
MOVLW " "
MOVWF PORTB
CALL T6M
BCF PORTA,2
CALL T6M
BSF PORTA,2
MOVLW " "
MOVWF PORTB
CALL T6M
BCF PORTA,2
CALL T6M
BSF PORTA,2
MOVLW " "
MOVWF PORTB
CALL T6M
BCF PORTA,2
CALL T6M
BSF PORTA,2
MOVLW " "
MOVWF PORTB
CALL T6M
BCF PORTA,2
CALL T6M
BSF PORTA,2
MOVLW " "
MOVWF PORTB
CALL T6M
BCF PORTA,2
CALL T6M
BSF PORTA,2
MOVLW " "
MOVWF PORTB
CALL T6M
BCF PORTA,2
CALL T6M
BSF PORTA,2
MOVLW " "
MOVWF PORTB
CALL T6M
BCF PORTA,2
CALL T6M
BSF PORTA,2
MOVLW " "
MOVWF PORTB
CALL T6M
BCF PORTA,2
CALL T6M
BSF PORTA,2
MOVLW "R"
MOVWF PORTB
CALL T6M
BCF PORTA,2
CALL T6M
BSF PORTA,2
MOVLW "P"
MOVWF PORTB
CALL T6M
BCF PORTA,2
CALL T6M
BSF PORTA,2
MOVLW "S"
MOVWF PORTB
CALL T6M
BCF PORTA,2
CALL T6M
RETURN
;-------------------------------------------
;-------------------------------------------
; MENSAJE
TESE
BSF PORTA,2
MOVLW "X"
MOVWF PORTB
CALL T6M
BCF PORTA,2
CALL T6M
BSF PORTA,2
MOVLW "X"
MOVWF PORTB
CALL T6M
BCF PORTA,2
CALL T6M
BSF PORTA,2
MOVLW "X"
MOVWF PORTB
CALL T6M
BCF PORTA,2
CALL T6M
BSF PORTA,2
MOVLW "X"
MOVWF PORTB
CALL T6M
BCF PORTA,2
CALL T6M
BSF PORTA,2
MOVLW "X"
MOVWF PORTB
CALL T6M
BCF PORTA,2
CALL T6M
BSF PORTA,2
MOVLW " "
MOVWF PORTB
CALL T6M
BCF PORTA,2
CALL T6M
BSF PORTA,2
MOVLW "D"
MOVWF PORTB
CALL T6M
BCF PORTA,2
CALL T6M
BSF PORTA,2
MOVLW "I"
MOVWF PORTB
CALL T6M
BCF PORTA,2
CALL T6M
BSF PORTA,2
MOVLW "G"
MOVWF PORTB
CALL T6M
BCF PORTA,2
CALL T6M
;-----
BSF PORTA,2
MOVLW "I"
MOVWF PORTB
CALL T6M
BCF PORTA,2
CALL T6M
BSF PORTA,2
MOVLW "T"
MOVWF PORTB
CALL T6M
BCF PORTA,2
CALL T6M
BSF PORTA,2
MOVLW "A"
MOVWF PORTB
CALL T6M
BCF PORTA,2
CALL T6M
BSF PORTA,2
MOVLW "L"
MOVWF PORTB
CALL T6M
BCF PORTA,2
CALL T6M
BSF PORTA,2
MOVLW "E"
MOVWF PORTB
CALL T6M
BCF PORTA,2
CALL T6M
BSF PORTA,2
MOVLW "S"
MOVWF PORTB
CALL T6M
BCF PORTA,2
CALL T6M
BSF PORTA,2
MOVLW "2"
MOVWF PORTB
CALL T6M
BCF PORTA,2
CALL T6M
RETURN
;------------------------------------------
; RUTINA DE INICIALIZACION DEL DISPLAY
INIEX
BSF PORTA,2
MOVLW 0X38
MOVWF PORTB
CALL T6M
BCF PORTA,2
CALL T6M
BSF PORTA,2
MOVLW 0X38
MOVWF PORTB
CALL T6M
BCF PORTA,2
CALL T6M
BSF PORTA,2
MOVLW 0X06
MOVWF PORTB
CALL T6M
BCF PORTA,2
CALL T6M
BSF PORTA,2
MOVLW 0X0E
MOVWF PORTB
CALL T6M
;----
BCF PORTA,2
CALL T6M
BSF PORTA,2
MOVLW 0X01 ;LIMPIA EL DISPLAY
MOVWF PORTB
CALL T6M
BCF PORTA,2
CALL T6M
RETURN
;-------------------------------------------------------------
; RUTINA DE INICIALIZACIÓN SIN CLEAR
INIEXSC
BSF PORTA,2
MOVLW 0X38
MOVWF PORTB
CALL T6M
BCF PORTA,2
CALL T6M
BSF PORTA,2
MOVLW 0X38
MOVWF PORTB
CALL T6M
BCF PORTA,2
CALL T6M
BSF PORTA,2
MOVLW 0X06
MOVWF PORTB
CALL T6M
BCF PORTA,2
CALL T6M
BSF PORTA,2
MOVLW 0X0E
MOVWF PORTB
CALL T6M
BCF PORTA,2
CALL T6M
RETURN
;-------------------------------------------------------------
; RUTINA PARA HABILITAR EL DISPLAY
HABI
BSF PORTA,2 ;PULSO DE SUBIDA EN RA2
CALL T6M ;RETARDO DE 1 MILISEGUNDO
BCF PORTA,2 ;PULSO DE BAJADA EN RA2
RETURN
;-------------------------------------------------------------
; RETARDO DE 6 MILISEGUNDOS
;-------------------------------------------------------------
T6M
movlw .7 ; 1 s et numero de rep et i c i on (B)
movwf PDel01 ; 1
PLoop11
movlw .213 ; 1 s e t n ume ro de rep e t i c io n (A)
movwf PDel11 ; 1
PLoop21
clrwdt ; 1 c l ear wa t ch d og
decfsz PDel11,1 ; 1 + (1) es e l t iemp o 0 ? (A)
goto PLoop21 ; 2 n o, loo p
decfsz PDel01,1 ; 1 + (1) es e l t iemp o 0 ? (B)
goto PLoop11 ; 2 n o, loo p
PDelL11
goto PDelL21 ; 2 c i c los de lay
PDelL21
clrwdt ; 1 c i c l o de lay
return ; 2+2 Fin.
;-------------------------------------------------------------
;-------------------------------------------------------------
; RETARDO DE 1 SEGUNDO
;-------------------------------------------------------------
T1S
movlw 14 ; 1 s e t numero d e re pe t i c io n (C)
movwf PDel0 ; 1 |
PLoop0
movlw .72 ; 1 s e t n ume ro de repe t i c i on (B)
movwf PDel1 ; 1 |
PLoop1
movlw .247 ; 1 s e t nume ro d e re pe t i c io n (A)
movwf PDel2 ; 1 |

;--------

PLoop2
clrwdt ; 1 c le ar wa t c hd o g
decfsz PDel2,1 ; 1 + (1) e s e l t i empo 0 ? (A)
goto PLoop2 ; 2 no , lo op
decfsz PDel1,1 ; 1 + (1) e s e l t i empo 0 ? (B)
goto PLoop1 ; 2 no , lo op
decfsz PDel0,1 ; 1 + (1) e s e l t i empo 0 ? (C)
goto PLoop0 ; 2 no , lo op
PDelL1
goto PDelL2 ; 2 c i c lo s d elay
PDelL2
clrwdt ; 1 c i c lo d e la y
return ; 2+2 Fin.
;-------------------------------------------------------------
;-------------------------------------------------------------
; RETARDO DE 1 MINUTO CON EXIBICION AL DISPLAY LCD
T1M
MOVLW .60
MOVWF REGA
LAZO
DECFSZ REGA,1
GOTO Y1
GOTO F1
Y1
CALL T1S
CALL LEER
GOTO LAZO
F1
RETURN
;-------------------------------------------------------------
END ;DIRECTIVA DE FIN DE PROGRAMA

http://bio-medicos.blogspot.pe/2009/07/tacometro-con-pic16f84a.html

Ing. Federico Alvarez

LIST P=16F84A

STATUS EQU 03
TRISA EQU 05
TRISB EQU 06
PORTA EQU 05
PORTB EQU 06
OPTION_REG EQU 01
TMR0 EQU 01
RP0 EQU 05
W EQU 00
F EQU 01

REVOLUCION EQU 10
RETRASO EQU 11
RETRASO1 EQU 12
RETRASO2 EQU 13
NUMERO EQU 14
NUMERO1 EQU 15

ORG 0

;Configuramos los archivos.

CONFIGURACION
bsf STATUS,RP0
clrf TRISB
movlw b'10000'
movwf TRISA
movlw b'10101000'
movwf OPTION_REG
bcf STATUS,RP0
clrf PORTA
clrf PORTB

;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
goto PAUSA2
decfsz RETRASO1
goto PAUSA1
decfsz RETRASO2
goto PAUSA

;Rutina de para reconocer los impulsos del TMR0.

movf TMR0,W
movwf REVOLUCION
movwf PORTB
goto INICIO

END

http://www.todopic.com.ar/foros/index.php?topic=13378.40

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.

1. LIST P = 16F84A
2. INCLUDE <P16F84A.INC>
3. ERRORLEVEL -302
4.
5. ;-------------------------------------------------------
6.
7. REVOLUCION EQU H'0C'
8. RETRASO EQU H'0D'
9. RETRASO1 EQU H'0E'
10. RETRASO2 EQU H'0F'
11.
12. ;-------------------------------------------------------
13.
14. ORG .0
15. bcf STATUS,RP0
16. bcf STATUS,RP1
17. GOTO CONFIGURACION
18.
19. ORG .4
20. bcf INTCON,GIE
21. RETURN
22.
23. ;-------------------------------------------------------
24.
25. ;Configuramos los archivos.
26.
27. CONFIGURACION
28.
29. clrf PORTA
30. clrf PORTB
31.
32. bsf STATUS,RP0
33. clrf TRISB
34. movlw B'00010000'
35. movwf TRISA
36. movlw b'10101000'
37. movwf OPTION_REG
38. bcf STATUS,RP0
39. goto INICIO
40.
41. ;-------------------------------------------------------
42.
43. ;Rutina de retardo de unos 250 milisegundos.
44.
45. INICIO
46. clrf TMR0
47. movlw .4
48. movwf RETRASO2
49. PAUSA
50. movlw .250
51. movwf RETRASO1
52. PAUSA1
53. movlw .250
54. movwf RETRASO
55. PAUSA2
56. decfsz RETRASO,F
57. goto PAUSA2
58. decfsz RETRASO1,F
59. goto PAUSA1
60. decfsz RETRASO2,F
61. goto PAUSA
62.
63. movf TMR0,W ;Rutina para reconocer los
impulsos del TMR0.
64. movwf REVOLUCION
65. movwf PORTB
66. goto INICIO
67.
68. ;-------------------------------------------------------
69. END

http://www.todopic.com.ar/foros/index.php?topic=13378.40