Autor Tema: contador up-down de tres digitos - problemas  (Leído 5781 veces)

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

Desconectado gergh

  • PIC10
  • *
  • Mensajes: 1
contador up-down de tres digitos - problemas
« en: 16 de Mayo de 2009, 01:31:11 »
se trata  de un contador up/down de 3 dígitos que cuenta desde 000 hasta 999. la entrada de pulsos a contar se aplica por ra4 que es sensible al flanco descendente la entradara3 determina si la cuenta es ascendente o descendente, lo simulo en isis de proteus, pero me marca errores la verdad soy nuevo con el tema pero con lo que  he leido en el foro me he podido familiarizar con el codigo y entender la logica del mismo, solo que no puedo detectar el error en el, si alguien fuera tna amable, para echarme una ayuda y comentar mas o menos el problema o hacer observaciones se lo agradecere. adjuntare el archivo de isis y una imagen jpg del circuito. muchisimas gracias que ya no puedo y me heroto la cabeza con esto jejejejeje disculpen mi ignorancia :s :) :)
codigo :


List    p=16F84A
           include "P16F84A.inc"

DIG0           equ     0x0c
DIG1           equ     0x0d
DIG2           equ     0x0e
Delay_Fijo     equ     0x0f

                org      0x00
                goto     Inicio
                org     0x05
           
         
      
      
Tabla_7_seg     addwf   PCL,F
                  retlw   b'11000000'
            retlw   b'11111001'
            retlw   b'10100100'
            retlw   b'10110000'
            retlw   b'10011001'
            retlw   b'10010010'
            retlw   b'10000010'
            retlw   b'11111000'
            retlw   b'10000000'
            retlw   b'10011000'

Display         bsf     PORTA,0
                movf    DIG0,W
                call    Tabla_7_seg
                movwf   PORTB
               call    Delay
                bcf     PORTA,0
                movlw   b'11111111'
                mmovwf   PORTB
                bsf     PORTA,1
            movf   DIG1,W
            call   Tabla_7_seg
            movwf   PORTB
            call   Delay
            bcf      PORTA,1
            movlw   b'11111111'
            movwf   PORTB
            bsf      PORTA,2
            movf   DIG2,W
            call   Tabla_7_seg
            movwf   PORTB
            call   RETARDO_200MS
            bcf      PORTA,2
            movlw   b'11111111'
            movwf   PORTB
            return

Delay         clrf   Delay_Fijo
Delay_1         nop   
            decfsz   Delay_Fijo,F
            goto   Delay_1
            return

Incrementa      incf   DIG0,F
            movlw   0x0a
            subwf   DIG0,W
            btfss   STATUS,Z
            return
            clrf   DIG0
            incf   DIG1,F
            movlw   0x0a
            subwf   DIG1,W
            btfss   STATUS,Z
            return
            clrf   DIG1
            incf   DIG2,F
            movlw   0x0a
            subwf   DIG2,W
            btfss   STATUS,Z
            return
            clrf   DIG2
            return

Decrementa      decfsz   DIG0,F
            movlw   0xff
            subwf   DIG0,W
            btfss   STATUS,Z
            return
            movlw   .9
            movwf   DIG0
            decf   DIG1,F
            movlw   0xff
            subwf   DIG1,W
            btfss   STATUS,Z
            return
            movlw   .9
            movwf   DIG1
            decf   DIG2,F
            movlw   0xff
            subwf   DIG2,W
            btfss   STATUS,Z
            return
            movlw   .9
            movwf   DIG2
            return

Inicio         movlw   b'11111111'
            movwf   PORTB
            clrf   PORTB
            bsf      STATUS,RP0
            clrf   TRISB
            movlw   b'00011000'
            movwf   TRISA
            movlw   b'00000111'
            movwf   OPTION_REG
            bcf      STATUS,RP0

            clrf   DIG0
            clrf   DIG1
            clrf   DIG2



Loop         clrwdt
            btfsc   PORTA,3
            goto   Descendente
            call   Display
            goto   Loop

Descendente      clrwdt
            btfss   PORTA,4
            goto   Pulso
            call   Display
            goto   Descendente

Pulso         btfss   PORTA,3
            goto   Dec_Cont
            call   Incrementa
            goto   Loop
Dec_Cont      call   Decrementa
            goto   Loop
            


END      


Desconectado tapi8

  • Colaborador
  • PIC24H
  • *****
  • Mensajes: 1506
Re: contador up-down de tres digitos - problemas
« Respuesta #1 en: 16 de Mayo de 2009, 18:04:31 »
http://www.todopic.com.ar/foros/index.php?topic=24720.msg201403#msg201403

Echale un ojo a esto, tienes varias cosas mal entre ellas el delay, temporiza algo?

saludos tapi8

Desconectado tapi8

  • Colaborador
  • PIC24H
  • *****
  • Mensajes: 1506
Re: contador up-down de tres digitos - problemas
« Respuesta #2 en: 17 de Mayo de 2009, 05:48:07 »
Picdel_sp.zip   Aqui tienes un programa, el que usamos casi todos en el foro, que te hace los delays.

Porque esto no te funciona, haces un clrf y lo pones a 0 y despues lo decrementas, pero ya esta a 0

Delay         clrf   Delay_Fijo
Delay_1         nop   
            decfsz   Delay_Fijo,F
            goto   Delay_1
            return

Aqui configuras el timer0 para dividir la frec por 256 pero no tienes habilitada la interrupcion por timer, no te vale para nada.

ovlw   b'00000111'
            movwf   OPTION_REG

Para multiplexar los displas, fijate en la direccion del post anterior, tienes que hacer delays pequeños y repetirlos varias veces si haces un delay de 200 ms, se veran encendidos y apagados, y no encendidos todo el tiempo, que tu no haces ningun delay como te dije antes

saludos tapi8