Autor Tema: Contador hexadecimal 0 a 9 con tmr0 p16f84a  (Leído 2795 veces)

0 Usuarios y 1 Visitante están viendo este tema.

Desconectado leonardolizardi

  • PIC10
  • *
  • Mensajes: 5
Contador hexadecimal 0 a 9 con tmr0 p16f84a
« en: 04 de Diciembre de 2012, 00:13:01 »
Saludos. Quisiera pedirles ayuda con este programa. La idea es que muestre los números del 0 a 9 en un display 7 seg cátodo común. Al simular en proteus solo me muestra el 7 y no hace más nada. Estoy iniciándome en el tema por lo que agradezco de antemano sus valioso aportes...   



list      p=16F84A            ; list directive to define processor
   #include <p16F84A.inc>        ; processor specific variable definitions
  
   __CONFIG   _CP_OFF & _WDT_OFF & _PWRTE_ON & _XT_OSC

; '__CONFIG' directive is used to embed configuration data within .asm file.
; The lables following the directive are located in the respective .inc file.
; See respective data sheet for additional information on configuration word.


OPTIONR   EQU   01H               
PCL      EQU   02H
STATUS   EQU   03H
PORTB   EQU   06H
INTCON   EQU   0BH
ACUM   EQU   0CH
STAT    EQU   0DH
CUENTA   EQU   0EH               
RETARDO   EQU   0FH               

 
F   EQU   1
w   EQU   0
 
#DEFINE   BANCO0   BCF   STATUS,5
#DEFINE   BANCO1   BSF   STATUS,5
 
      ORG   00H
      GOTO   INICIO          
      ORG   04H                
      BCF   INTCON,2           
      MOVWF   ACUM          
      MOVF   STATUS,W        
      BANCO0                
      MOVWF   STAT          
SUMA1   INCF   CUENTA,F        
      MOVLW   0AH             
      SUBWF   CUENTA,W        
      BTFSC   STATUS,2        
      CLRF   CUENTA         
      RETURN                   
INICIO   BANCO1                
      CLRF   TRISB             
      BCF   OPTIONR,3          
      BCF   OPTIONR,0         ;\
      BCF   OPTIONR,1          ; }Prescaler a 1/2
      BCF   OPTIONR,2          ;/
      BCF   OPTIONR,5          
      BANCO0                
      BSF   INTCON,7          
      BSF   INTCON,5
GOTO       ORLANDO          
DISP           RETLW   03FH         ;Para mostrar el 0
      RETLW   006H         ;Para mostrar el 1
      RETLW   05BH         ;Para mostrar el 2
      RETLW   04FH         ;Para mostrar el 3
      RETLW   066H         ;Para mostrar el 4
      RETLW   06DH         ;Para mostrar el 5
      RETLW   07DH         ;Para mostrar el 6
      RETLW   007H         ;Para mostrar el 7
      RETLW   07FH         ;Para mostrar el 8
      RETLW   067H         ;Para mostrar el 9
 
ORLANDO   BANCO1               
      CLRF   TRISB         
      BANCO0               
      CLRF   CUENTA         
MUESTRA   MOVLW   DISP         
      ADDLW   CUENTA         
      CALL   TABLA         
      MOVWF   PORTB         
      BTFSS   INTCON,2      
      CALL   SUMA1         
      GOTO   MUESTRA
   
      END                  
« Última modificación: 04 de Diciembre de 2012, 14:18:36 por leonardolizardi »

Desconectado BrunoF

  • Administrador
  • DsPIC30
  • *******
  • Mensajes: 3865
Re: Contador hexadecimal 0 a 9 con tmr0 p16f84a
« Respuesta #1 en: 04 de Diciembre de 2012, 03:25:11 »
Hola Leonardo,

por favor lee las reglas del foro. No repitas el mísmo mensaje en más de un subforo. Con uno alcanza.

Me parece que tenés varios errores, pero para empezar podés probar reemplazando:

Código: ASM
  1. MUESTRA   MOVLW   DISP        
  2.       ADDLW   CUENTA
por:

Código: ASM
  1. MUESTRA   MOVF CUENTA, W

y

Código: ASM
  1. DISP           RETLW   03FH         ;Para mostrar el 0
por:

Código: ASM
  1. DISP           ADDWF PCL,F
  2.            RETLW   03FH         ;Para mostrar el 0
« Última modificación: 04 de Diciembre de 2012, 03:29:40 por BrunoF »
"All of the books in the world contain no more information than is broadcast as video in a single large American city in a single year. Not all bits have equal value."  -- Carl Sagan

Sólo responderé a mensajes personales, por asuntos personales. El resto de las consultas DEBEN ser escritas en el foro público. Gracias.

Desconectado willynovi

  • Colaborador
  • PIC24F
  • *****
  • Mensajes: 546
Re: Contador hexadecimal 0 a 9 con tmr0 p16f84a
« Respuesta #2 en: 04 de Diciembre de 2012, 11:37:15 »
Es de tus primeros programas?

Yo empezaría con algún tutorial con algo mas simple y de a poco ir aumentando en complejidad, mas que nada para dominar bien cada instrucción o bucle.

Es buena técnica en programación no usar el GOTO, o lo menos posible.

Yo nunca he usado el Proteus, pero te diria que trates de armar los circuitos y tambien probar fisicamente los programas.
Intento enseñarte a pescar, si solo quieres pescados, espera que un pescador te regale los suyos.

Desconectado leonardolizardi

  • PIC10
  • *
  • Mensajes: 5
Re: Contador hexadecimal 0 a 9 con tmr0 p16f84a
« Respuesta #3 en: 04 de Diciembre de 2012, 14:15:35 »
Hola Leonardo,

por favor lee las reglas del foro. No repitas el mísmo mensaje en más de un subforo. Con uno alcanza.

Me parece que tenés varios errores, pero para empezar podés probar reemplazando:

Código: ASM
  1. MUESTRA   MOVLW   DISP        
  2.       ADDLW   CUENTA
por:

Código: ASM
  1. MUESTRA   MOVF CUENTA, W

y

Código: ASM
  1. DISP           RETLW   03FH         ;Para mostrar el 0
por:

Código: ASM
  1. DISP           ADDWF PCL,F
  2.            RETLW   03FH         ;Para mostrar el 0






Desconectado leonardolizardi

  • PIC10
  • *
  • Mensajes: 5
Re: Contador hexadecimal 0 a 9 con tmr0 p16f84a
« Respuesta #4 en: 04 de Diciembre de 2012, 14:17:39 »
Gracias BrunoF por la información. Aún sigo sin ubicar el problema, me sigue mostrando "7" solamente . Creo que no he podido relacionar la señal de incont2 con el llamado a muestra. Tengo la idea, pero mientras más leo más me enredo... Esto es para un examen de Automatización Industrial... Una vez más agradezco la colaboración...


OPTIONR   EQU   01H               
PCL      EQU   02H
STATUS   EQU   03H
PORTB   EQU   06H
INTCON   EQU   0BH
ACUM   EQU   0CH
STAT    EQU   0DH
CUENTA   EQU   0EH               
RETARDO   EQU   0FH               

 
F   EQU   1
w   EQU   0
 
#DEFINE   BANCO0   BCF   STATUS,5
#DEFINE   BANCO1   BSF   STATUS,5
 
      ORG   00H
      GOTO   INICIO          
      ORG   04H                
      BCF   INTCON,2           
      MOVWF   ACUM          
      MOVF   STATUS,W        
      BANCO0                
      MOVWF   STAT          
SUMA1   INCF   CUENTA,F        
      MOVLW   0AH             
      SUBWF   CUENTA,W        
      BTFSC   STATUS,2        
      CLRF   CUENTA         
      RETURN                   
INICIO   BANCO1                
      CLRF   TRISB             
      BCF   OPTIONR,3          
      BCF   OPTIONR,0         ;\
      BCF   OPTIONR,1          ; }Prescaler a 1/2
      BCF   OPTIONR,2          ;/
      BCF   OPTIONR,5          
      BANCO0                
      BSF   INTCON,7          
      BSF   INTCON,5
GOTO       ORLANDO          
DISP           ADDWF   PCL,F
                RETLW   03FH         ;Para mostrar el 0
      RETLW   006H         ;Para mostrar el 1
      RETLW   05BH         ;Para mostrar el 2
      RETLW   04FH         ;Para mostrar el 3
      RETLW   066H         ;Para mostrar el 4
      RETLW   06DH         ;Para mostrar el 5
      RETLW   07DH         ;Para mostrar el 6
      RETLW   007H         ;Para mostrar el 7
      RETLW   07FH         ;Para mostrar el 8
      RETLW   067H         ;Para mostrar el 9
 
ORLANDO   BANCO1               
      CLRF   TRISB         
      BANCO0               
      CLRF   CUENTA         
MUESTRA   MOVF   CUENTA,W   
      ADDLW   CUENTA         
      CALL   TABLA         
      MOVWF   PORTB         
      BTFSS   INTCON,2      
      CALL   SUMA1         
      GOTO   MUESTRA
   
      END         
« Última modificación: 04 de Diciembre de 2012, 14:22:08 por leonardolizardi »

Desconectado leonardolizardi

  • PIC10
  • *
  • Mensajes: 5
Re: Contador hexadecimal 0 a 9 con tmr0 p16f84a
« Respuesta #5 en: 04 de Diciembre de 2012, 14:27:18 »
Saludos willynovi, gracias por tu aporte. En realidad es una materia que estoy viendo en la universidad. Hemos hecho cosas pequeñas como encender y apagar leds y algunas subrutinas. Este programa es para un examen, por lo que estoy en busca de descifrarlo... Nuevamente te agradezco la colaboración...

Desconectado BrunoF

  • Administrador
  • DsPIC30
  • *******
  • Mensajes: 3865
Re: Contador hexadecimal 0 a 9 con tmr0 p16f84a
« Respuesta #6 en: 04 de Diciembre de 2012, 15:16:52 »
Hola,

fijate que hiciste mal uno de los reemplazos. ADDLW   CUENTA   no debería quedar en el código reemplazado.

Qué es lo que querés hacer con la interrupción? Porque estás indeciso. Si usás la interrupción no es normalmente utilizado chequear el estado del Flag de la interrupción, ya que la ISR lo está limpiando, haciendo que tu código no logre satisfacer la condición nunca.

Tampoco estas restaurando las variables criticas dentro de la interrupción. Revisá el datasheet la sección de Context Saving sobre cómo deberías hacerlo.
Dentro de la ISR, no estás rehabilitando INTCON,7(GIE) por lo que la interrupcion solo sucede una vez y no vuelve a producirse. Podes utilizar RETFIE en lugar de RETURN, pero deberias sacar la pseudo-subrutina SUMA1 de ahí. Me parece que has mezclado muchas cosas...

« Última modificación: 04 de Diciembre de 2012, 17:45:35 por BrunoF »
"All of the books in the world contain no more information than is broadcast as video in a single large American city in a single year. Not all bits have equal value."  -- Carl Sagan

Sólo responderé a mensajes personales, por asuntos personales. El resto de las consultas DEBEN ser escritas en el foro público. Gracias.

Desconectado willynovi

  • Colaborador
  • PIC24F
  • *****
  • Mensajes: 546
Re: Contador hexadecimal 0 a 9 con tmr0 p16f84a
« Respuesta #7 en: 04 de Diciembre de 2012, 16:38:40 »
Leonardo, asi como te dice Bruno creo tenes algunos conceptos equivocados sobre las interrupciones, perdón que suene pesado pero insisto en que tendrias que empezar un buen tutorial y te recomiendo el de Suky.

Te dejo el link del tutorial y el de la parte donde trata las interrupciones, esta muy bien explicado y ejemplificado, no tenes forma de equivocarte.

Mis primeros programas en ASM. PIC16F84A y PIC16F628A/648A

Interrupciones, Registros y guardado temporario de STATUS y W
Intento enseñarte a pescar, si solo quieres pescados, espera que un pescador te regale los suyos.

Desconectado leonardolizardi

  • PIC10
  • *
  • Mensajes: 5
Re: Contador hexadecimal 0 a 9 con tmr0 p16f84a
« Respuesta #8 en: 05 de Diciembre de 2012, 19:41:44 »
Muchas gracias amigos. Casi lo tengo...


 

anything