Autor Tema: Contador BCD ascendente  (Leído 8042 veces)

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

Desconectado Napster321

  • PIC10
  • *
  • Mensajes: 2
Contador BCD ascendente
« en: 24 de Abril de 2010, 13:41:30 »
Apenas me estoy iniciando en el mundo de los PICs, y me pidieron hacer un contador BCD ascendente de 0 a 99 (dos displays. Este siempre estará contando y si llega a 99, regresa a 0 y sigue contando) en donde en el puerto A cargue el digito de menor peso y que al introducirlo a partir de ahi empiece a contar con la condicion de que incremente el numero de veces que se introdujo, digamos por ejemplo si se introdujo un 3 empezara a contar de la siguiente manera 3,6,9,12... asi, sucesivamente. Supongo que se hace por interrupciones pero la verdad no le se mucho, y bueno, pues una vez que se resetee el pic comience a contar de nuevo de 0 a 99. Por favor, háganme saber sugerencias para saber cómo hacerle. Gracias

 


Desconectado septiembre_negro

  • PIC18
  • ****
  • Mensajes: 310
Re: Contador BCD ascendente
« Respuesta #1 en: 24 de Abril de 2010, 16:20:17 »
No estaría mal si indicas  en  que lenguaje vas a programar y que  microcontrolador vas a usar.
Tu practica no es nada complicada prácticamente es un ejerció de lectura escritura de puertos.
Lo primero es divide y vencerás   analiza lo que te solicitan  e identifica las distintas rutinas o sub. Programas en que puedes dividir el  ejercicio
Por ejemplo  1 contar de 00 a 99
                      2 convertir a bcd
                      3 mostrar por displey
Realiza estas sub rutinas  de a una   así te será mas fácil  avanzar y detectar algún fallo.

En cuanto comiences a postear tus avances seguro abra alguien dispuesto a ayudarte
Suerte


Desconectado todopic

  • Administrador
  • DsPIC30
  • *******
  • Mensajes: 3495
    • http://www.todopicelectronica.com.ar
Re: Contador BCD ascendente
« Respuesta #2 en: 24 de Abril de 2010, 16:32:41 »
Si es en ensamblador, en el almacen hay "rutinas para compartir"  :mrgreen:

Suerte!

Norberto
Firmat - Santa Fe - Argentina

www.TodoPic.net

Solo se tiran piedras, al arbol que tiene frutos...

Desconectado Napster321

  • PIC10
  • *
  • Mensajes: 2
Re: Contador BCD ascendente
« Respuesta #3 en: 26 de Abril de 2010, 04:27:37 »
Bueno en estos dias le he estado avanzando y pues ya he logrado hacer que cuente de 0 a 99 en forma ascendentee (estuve leyendo en varios lados, pero principalmente me base en esta pagina http://jimjim17.blogspot.com/2009/07/tercer-programa-pic-contador-0-99-99-0.html , lo modifique algunas cosas)

Asi me quedo el programa:

LIST P=16f873a   
#INCLUDE <p16f873a.inc>
   
__CONFIG _CP_OFF&_PWRTE_ON&_WDT_OFF&_XT_OSC
   
;Variables que se usaran en el programa   
DECENAS        EQU     0X30        ;Display 1
UNIDADES       EQU     0X31        ;Display 2
CONTADOR       EQU     0X39       ;Contador de 1seg
CONTDEC               EQU            0X40       ;Contador de decenas
CONTUNI         EQU            0X41       ;Contador de unidades
RET1                 EQU            0X42              ;Retardo 1
RET2                 EQU            0X43              ;Retardo 2

;Inicio del programa
            ORG      0x00               
            GOTO   INICIO
            ORG      0x05

;Configuración de puertos
INICIO      BSF         STATUS,RP0   
         CLRF              TRISA      ;PORTA como salida
         CLRF              TRISB      ;PORTB como salida
         BCF         STATUS,RP0
         CLRF              PORTA
         CLRF              PORTB

;Programa principal
CICLO      CALL              CONTASC
         GOTO      CICLO

CONTASC      MOVLW       0x01         ;Movemos un 1 a DECENAS
         MOVWF       DECENAS 
            MOVLW       0x0A         ;Movemos un 10 a CONTDEC
         MOVWF       CONTDEC
RESETDEC    MOVLW       0x01         ;Movemos un 1 a UNIDADES
         MOVWF       UNIDADES
            MOVLW       0x0A         ;Movemos un 10 a CONTUNI
         MOVWF       CONTUNI
RESETUNI      MOVLW       0xFA        ;Movemos un 250 a CONTADOR
         MOVWF       CONTADOR
 
ret1seg      MOVF       DECENAS,W       ;Movemos decenas a W
          CALL       TABLA          ;Llamamos al numero
          MOVWF       PORTB          ;Se pasa al display
         BSF                PORTA,0        ;Encendemos el display de decenas
      CALL        RETARDO        ;Retardo pequeño
          BCF                PORTA,0          ;Apagamos display
          MOVF       UNIDADES,W      ;Movemos unidades a W
          CALL       TABLA         ;Llamamos al numero
          MOVWF      PORTB         ;Se pasa al display
          BSF                PORTA,1          ;Encendemos el display de unidades
      CALL       RETARDO        ;Retardo pequeño
          BCF                PORTA,1        ;Apagamos display
          DECFSZ       CONTADOR,F        ;Decrementamos contador
          GOTO       ret1seg          ;Hacemos que la imagen dure 1seg
         INCF       UNIDADES,F       ;Incrementamos unidades
          DECFSZ       CONTUNI          ;Comprobamos que llegue a 9
          GOTO       RESETUNI        ;Reseteamos unidad
          INCF       DECENAS,F      ;Incrementamos decenas
          DECFSZ       CONTDEC        ;Comprobamos que llegue a 9
          GOTO       RESETDEC        ;Reseteamos decenas
          RETURN                   ;Volvemos a ciclo

;Tabla del display
TABLA      ADDWF       PCL,F
         NOP 
         RETLW      B'00111111'    ;Numero 0
         RETLW      B'00000110'    ;Numero 1
         RETLW       B'01011011'    ;Numero 2
         RETLW       B'01001111'    ;Numero 3
         RETLW       B'01100110'    ;Numero 4
         RETLW       B'01101101'    ;Numero 5
         RETLW       B'01111101'    ;Numero 6
         RETLW       B'00000111'    ;Numero 7
         RETLW       B'01111111'    ;Numero 8
         RETLW       B'01100111'    ;Numero 9


;Retardo pequeño entre displays 2ms aprox
RETARDO       MOVLW      0x05   
         MOVWF      RET1
   DOS      MOVLW      0x83   
         MOVWF      RET2
   UNO      DECFSZ      RET2,1
         GOTO      UNO
         DECFSZ      RET1,1
         GOTO      DOS
         RETURN

END

Creo que hasta aqui tengo todo bien, bueno ahora tengo que introducirle un valor del 1 al 9 en binario como entrada y que el contador comience a contar desde el numero que introduje pero que vaya incrementando por ejemplo si pongo 0010 (2 en decimal) en el display muestre 02,04,06 y asi susesivamente , la verdad no se muy bien como incluir esto al programa espero puedan ayudarme gracias.  (Tambien tengo que ponerle una entrada de un push button para ir aumentando la velocidad del contadorr hasta que al darle click 10 veces vuelva a la velocidad normal, pero bueno primero lo del digito que tengo que introducir, ya que creo esto es mas facil)
« Última modificación: 26 de Abril de 2010, 04:30:11 por Napster321 »