contador programable.

encontre un contador que se adecuaa mi circuito.
el problema es que al compilar en mplab me marca 1 Error
[141] C:\contador\..\Users\cross-had\Downloads\contador fin.asm; 3.30 can't open include file "H16f84a.inc": No such file or directory

esta es la pag http://www.iesleonardo.info/ele/pro/CURSO 2001-2002/p02-timer/
i el codigo
Código:
;#################### CABEZERAS ##############################
        LIST      p=PIC16F84A         ; Directiva para definir micro.
        #include <H16f84a.inc>        ; Fichero standard de cabezera.
                                       
        __CONFIG   _CP_OFF & _PWRTE_ON & _WDT_OFF & _XT_OSC
;#################### DEFINICIONES ###########################

w_temp          EQU     0x0C        ; Variable para guardar W. 
status_temp     EQU     0x0D        ; Variable para guardar STATUS.
con0            EQU     0x0E        ; Variable de temporizacion. 
con1            EQU     0x0F        ; Variable de temporizacion. 
con2            EQU     0x10        ; Variable de temporizacion. 
u_s             EQU     0x11        ; Unidades de segundo.
d_s             EQU     0x12        ; Decenas de segundo. 
c_s             EQU     0x13        ; Centenas de segundo. 
m_s             EQU     0x14        ; Millares de segundo. 
start           EQU     0x15        ; start=1 decrementa.
                                    ; start=0 se para.                                    
;################ COMIENZO DEL PROGRAMA  #####################

                ORG     0x00              ; Vector de Reset. 
                GOTO    inicio            ; Programa Principal.

;########## TRATAMIENTO DE INTERRUPCIONES ####################

                ORG     0x04              ; Vector de interrupcion.
                MOVWF   w_temp            ; Guarda W.
                MOVF    STATUS,W          
                MOVWF   status_temp       ; Guarda STATUS.             

                DECFSZ  con0,F            ; Salta si tiempo = 1 seg.
                GOTO    salir
                MOVLW   0x3D              ; Variable para temporizar.
                MOVWF   con0              ; con0 x divisor x TMR0 = 1 segundo.                     

; Tratamos unidades de segundos.
                DECF    u_s,F               
                MOVF    u_s,W
                SUBLW   0xFF              ; 11111111 - (u_s) --> W
                BTFSS   STATUS,Z          ; Si Z=1 => (u_s) = 0
                GOTO    salir
                MOVLW   0x09
                MOVWF   u_s               ; 9 --> u_s
; Tratamos decenas de segundos.
                DECF    d_s,F
                MOVF    d_s,W
                SUBLW   0xFF              ; 11111111 - (d_s) --> W
                BTFSS   STATUS,Z          ; Si Z=1 => (d_s) = 0
                GOTO    salir
                MOVLW   0x09
                MOVWF   d_s               ; 9 --> d_s  

; Tratamos centenas de segundos.
                DECF    c_s,F
                MOVF    c_s,W
                SUBLW   0xFF              ; 11111111 - (c_s) --> W
                BTFSS   STATUS,Z          ; Si Z=1 => (c_s) = 0
                GOTO    salir
                MOVLW   0x09
                MOVWF   c_s               ; 9 --> c_s  
                  
; Tratamos millares de segundos.
                DECF    m_s,F
                MOVF    m_s,W
                SUBLW   0xFF              ; 11111111 - (m_s) --> W
                BTFSS   STATUS,Z          ; Si Z=1 => (m_s) = 0
                GOTO    salir
                MOVLW   0x09
                MOVWF   m_s               ; 9 --> m_s            
                

salir           MOVF    status_temp,W
                MOVWF   STATUS            ; Recupera STATUS.
                SWAPF   w_temp,F
                SWAPF   w_temp,W          ; Recupera W.
                BCF     INTCON,T0IF       ; Bajamos Bandera T0IF.                              
                RETFIE                    ; Retorno de interrupcion.
;########## FIN DE TRATAMIENTO DE INTERRUPCIONES #############
;################ PROGRAMA PRINCIPAL #########################
inicio          BSF     STATUS,RP0        ; Banco 1
                MOVLW   B'10000101'       ; Divisor = 64      
                MOVWF   OPTION_REG        ; Configuramos TMR0
                MOVLW   B'11110000'
                MOVWF   TRISB             ; Configuramos I/O PORTB
                MOVLW   B'00000000'       ; 
                MOVWF   TRISA             ; Configuramos I/O PORTA

                BCF     STATUS,RP0        ; Banco 0                
                BCF     PORTA,4
                MOVLW   0x3D              ; Variable para temporizar.
                MOVWF   con0              ; con0 x divisor x TMR0 = 1 segundo.     
                CLRF    TMR0              ; TMR0 = 0
                MOVLW   0x09
                MOVWF   u_s               ; u_s = 9
                MOVWF   d_s               ; d_s = 9
                MOVWF   c_s               ; c_s = 9
                MOVWF   m_s               ; m_s = 9
                CLRF    start             ; temporizador parado                
                MOVLW   B'10100000'       ; Habilitamos Interrupciones TOIE.
                MOVWF   INTCON
                
               
bucle           BTFSS   PORTB,6
                CALL    mas_cs            ; Se ha pulsado centenas de segundos
                BTFSS   PORTB,5
                CALL    mas_ds            ; Se ha pulsado decenas de segundos
                BTFSS   PORTB,4
                CALL    mas_us            ; Se ha pulsado unidades de segundos
                BTFSS   PORTB,7
                CALL    start_stop                
                CALL    todo_0
                CALL    display
                GOTO    bucle
;############### FIN DE PROGRAMA PRINCIPAL ##################
;#################### RUTINAS ###############################
;************************************************************
; RUTINA: display 
; Funcion: Muestra informacion en displays 7 segmentos.
; Entrada: u_s, d_s, c_s, m_s
; Salida: nada.
; Variables utilizadas: nada.
;************************************************************
display         MOVF    u_s,W           ; Visualizo unidades de segundos.
                MOVWF   PORTA
                BSF     PORTB,0
                CALL    delay
                BCF     PORTB,0

                MOVF    d_s,W           ; Visualizo decenas de segundos.
                MOVWF   PORTA
                BSF     PORTB,1
                CALL    delay
                BCF     PORTB,1

                MOVF    c_s,W           ; Visualizo centenas de segundos.
                MOVWF   PORTA
                BSF     PORTB,2
                CALL    delay
                BCF     PORTB,2

                MOVF    m_s,W           ; Visualizo millares de segundos.
                MOVWF   PORTA
                BSF     PORTB,3
                CALL    delay
                BCF     PORTB,3
                RETURN
;************************************************************
; FIN DE RUTINA: display 
;************************************************************
;************************************************************
; RUTINA: start_stop 
; Funcion: Establece el COMIENZO o la PARADA del TEMPORIZADOR.
; Entrada: nada
; Salida: nada
; Variables utilizadas: start
;************************************************************
start_stop      CALL   delay_r           ; Eliminamos rebotes del PULSADOR.
                MOVLW  0x01
                XORWF  start,F
                MOVF   start,W
                BTFSS  STATUS,Z
                GOTO   cuenta
                MOVLW  B'00100000'       ; Inhabilitamos Interrupciones GIE.
                MOVWF  INTCON
                GOTO   fuera

cuenta          MOVLW  B'10100000'       ; Habilitamos Interrupciones GIE.
                MOVWF  INTCON
fuera           RETURN
                
        
                
;************************************************************
; FIN DE RUTINA: start_stop 
;************************************************************

;************************************************************
; RUTINA: mas_us 
; Funcion: Modifica UNIDADES DE SEGUNDOS.
; Entrada: nada
; Salida: nada
; Variables utilizadas: nada
;************************************************************
mas_us
; Tratamos unidades de segundos.
                INCF    u_s,F
                MOVF    u_s,W
                SUBLW   0x0A              ; 10 - (u_s) --> W
                BTFSS   STATUS,Z          ; Si Z=1 => (u_s) = 10
                GOTO    salus
                MOVLW   0x00
                MOVWF   u_s               ; 0 --> u_s  
salus           CALL    delay_r           ; Eliminamos rebotes del PULSADOR.
                RETURN
;************************************************************
; FIN DE RUTINA: mas_us 
;************************************************************
;************************************************************
; RUTINA: todo_0 
; Funcion: Para el temporizador si todas las unidades est n a 0
; Entrada: nada
; Salida: nada
; Variables utilizadas: nada
;************************************************************
todo_0          MOVF    u_s,W             ; Movemos u_s al registro de trabajo   
                BTFSS   STATUS,Z          ; Si Z=1,u_s es 0 y salta una l¡nea
                GOTO    sal
                MOVF    d_s,W             ; Movemos d_s al registro de trabajo   
                BTFSS   STATUS,Z          ; Si Z=1,u_s es 0 y salta una l¡nea
                GOTO    sal
                MOVF    c_s,W             ; Movemos c_s al registro de trabajo   
                BTFSS   STATUS,Z          ; Si Z=1,u_s es 0 y salta una l¡nea
                GOTO    sal
                MOVF    m_s,W             ; Movemos m_s al registro de trabajo   
                BTFSS   STATUS,Z          ; Si Z=1,u_s es 0 y salta una l¡nea
                GOTO    sal
                MOVLW   B'00100000'       ; Inhabilitamos Interrupciones GIE.
                MOVWF   INTCON
                BSF     PORTA,4           ; Se activa el zumbador.
                CALL    zumba
                BCF     PORTA,4                
sal             RETURN
;************************************************************
; FIN DE RUTINA: todo_0 
;************************************************************
;************************************************************
; RUTINA: zumba 
; Funcion: zumba
; Entrada: nada
; Salida: nada
; Variables utilizadas: nada
;************************************************************
zumba           MOVLW   0x3D
                MOVF    con1
zumba_1         DECFSZ  con2,F
                GOTO    zumba_1
                Return

;************************************************************
; FIN DE RUTINA: todo_0 
;************************************************************
;************************************************************
; RUTINA: mas_ds 
; Funcion: Modifica DECENAS DE SEGUNDOS.
; Entrada: nada
; Salida: nada
; Variables utilizadas: nada
;************************************************************
mas_ds
; Tratamos decenas de segundos.               
                INCF    d_s,F
                MOVF    d_s,W
                SUBLW   0x0A              ; 10 - (d_s) --> W
                BTFSS   STATUS,Z          ; Si Z=1 => (d_s) = 10
                GOTO    salds
                MOVLW   0x00
                MOVWF   d_s               ; 0 --> d_s  
salds           CALL    delay_r           ; Eliminamos rebotes del PULSADOR.
                RETURN
;************************************************************
; FIN DE RUTINA: mas_ds 
;************************************************************
;************************************************************
; RUTINA: mas_cs 
; Funcion: Modifica CENTENAS DE SEGUNDOS.
; Entrada: nada
; Salida: nada
; Variables utilizadas: nada
;************************************************************
mas_cs
; Tratamos centenas de segundos.                
                INCF    c_s,F
                MOVF    c_s,W
                SUBLW   0x0A              ; 10 - (c_s) --> W
                BTFSS   STATUS,Z          ; Si Z=1 => (c_s) = 10
                GOTO    salcs
                MOVLW   0x00
                MOVWF   c_s               ; 0 --> c_s  
                INCF    m_s,F
                MOVF    m_s,W
                SUBLW   0x0A
                BTFSS   STATUS,Z
                GOTO    salcs
                MOVLW   0x00
                MOVWF   m_s
salcs           CALL    delay_r           ; Eliminamos rebotes del PULSADOR.
                RETURN
;************************************************************
; FIN DE RUTINA: mas_cs 
;************************************************************
;************************************************************
; RUTINA: delay 
; Funcion: Produce un retardo para displays.
; Entrada: nada
; Salida: nada
; Variables utilizadas: con1, con2
;************************************************************
delay           CLRF    con1
                MOVLW   0x05
                MOVWF   con2

loop            DECFSZ  con1,F
                GOTO    loop
                DECFSZ  con2,F
                GOTO    loop
                RETURN
;************************************************************
; FIN DE RUTINA: delay 
;************************************************************
;************************************************************
; RUTINA: delay_r 
; Funcion: Produce un retardo para evitar rebotes en PULSADORES.
; Entrada: nada
; Salida: nada
; Variables utilizadas: con1, con2
;************************************************************
delay_r         MOVLW   0x2D
                MOVWF   con1

loop_r          DECFSZ  con1,F
                GOTO    loop_r
                RETURN
;************************************************************
; FIN DE RUTINA: delay_r 
;************************************************************
;################## FIN DE RUTINAS ##########################
;################## FIN DE PROGRAMA  ########################
                END                     ; Fin de programa.
 
Última edición por un moderador:
encontre un contador que se adecuaa mi circuito.
el problema es que al compilar en mplab me marca 1 Error
[141] C:\contador\..\Users\cross-had\Downloads\contador fin.asm; 3.30 can't open include file "H16f84a.inc": No such file or directory
Saludos. Quita la H de "H16f84a.inc" y cambiala por una p
Debe quedar así:
LIST p=16f84a ;Procesador utilizado.
INCLUDE <p16f84a.inc>
ERRORLEVEL -302 ;suprime los mensajes de selección de banco
; o así:
list p=16f84a
#include p16f84a.inc
ERRORLEVEL -302 ;suprime los mensajes de selección de banco
Ok. con eso lo podras compilar. :apreton:
 
Última edición:
Atrás
Arriba