Haz una pregunta
  Foros de Electrónica » Diseño digital » Microcontroladores y sistemas embebidos
Foros Registrarse ¿Olvidaste tu contraseña?

Temas similares

30/08/2011 #1


Buenas!

tengo una consulta de un trabajo, el problema es el siguiente: tengo que hacer tipo reloj que muestre las dos cifras de los segundos y por lo menos una cifra de los minutos pero para empezar tengo que hacer que cuente solo hasta 59 seg, una vez hecho esto paso a agregar el siguiente display de los minutos pero logro hacer que las cifras de los minutos se mantenga encendida, el tiempo si lo se hacer pero mi prioridad es mantener encendido los numeros sin que se apaguen
Bueno la idea no es que me hagan la tarea sino que tiren un par de palos para ver mas o menos como voy o que es lo que falta hacer
gracias

este es mi codigo


Código PHP:

_CONFIG_CP_OFFAND_WDT_OFFAND_PWRTE_ONAND_XT_OSC
       
LIST       P=16F84A        
INCLUDE  <P16F84A.INC>    
PORTA     EQU 0x05
PORTB    EQU    0x06
ContA    EQU 0x0C
ContB    EQU    0x0D        
ContC    EQU    0x0E        
R_ContA       EQU    0x0C
R_ContB       EQU    0x0D
R_ContC    EQU    0x0E
ORG        0
    

Inicio
        bsf        STATUS
,RP0
        clrf    PORTB
        clrf    PORTA
        bcf        STATUS
,RP0            

;COMIENZA UNIDADES DE SEGUNDOS

principal   
        movlw    0x3F 
;CERO
        movwf    PORTB
        movlw    
b'00000100'
        
movwf    PORTA
        call    retardo

        movlw    0x06 
;UNO
        movwf    PORTB
        movlw    
b'00000100'
        
movwf    PORTA
        call    retardo

        movlw    0x5B 
;DOS
        movwf    PORTB
        movlw    
b'00000100'
        
movwf    PORTA
        call    retardo

        movlw    0x4F 
;TRES
        movwf    PORTB
        movlw    
b'00000100'
        
movwf    PORTA
        call    retardo

        movlw    0x66 
;CUATRO
        movwf    PORTB
        movlw    
b'00000100'
        
movwf    PORTA
        call    retardo

        movlw    0x6D 
;CINCO
        movwf    PORTB
        movlw    
b'00000100'
        
movwf    PORTA
        call    retardo

        movlw    0x7D 
;SEIS
        movwf    PORTB
        movlw    
b'00000100'
        
movwf    PORTA
        call    retardo

        movlw    0x07 
;SIETE
        movwf    PORTB
        movlw    
b'00000100'
        
movwf    PORTA
        call    retardo

        movlw    0x7F 
;OCHO
        movwf    PORTB
        movlw    
b'00000100'
        
movwf    PORTA
        call    retardo

        movlw    0x67 
;NUEVE
        movwf    PORTB
        movlw    
b'00000100'
        
movwf    PORTA
        call    retardo



;CONTINUA DECENAS DE SEGUNDOS

        movlw    0x3F 
;CERO
        movwf    PORTB
        movlw    
b'00000010'
        
movwf    PORTA         
        call     retardo2


        movlw    0x06 
;UNO
        movwf    PORTB
        movlw    
b'00000010'
        
movwf    PORTA
        call    retardo2


        movlw    0x5B 
;DOS
        movwf    PORTB
        movlw    
b'000000010'
        
movwf    PORTA         
        call     retardo2


        movlw    0x4F 
;TRES
        movwf    PORTB
        movlw    
b'000000010'
        
movwf    PORTA         
        call     retardo2


        movlw    0x66 
;CUATRO
        movwf    PORTB
        movlw    
b'000000010'
        
movwf    PORTA         
        call     retardo2


        movlw    0x6D 
;CINCO
        movwf    PORTB
        movlw    
b'000000010'
        
movwf    PORTA         
        call     retardo2


;CONTINUA DECENAS DE SEGUNDOS


        movlw    0x3F
        movwf    PORTB
        movlw    
b'0000001'
        
movwf    PORTA         
        call     retardo2


        movlw    0x06
        movwf    PORTB
        movlw    
b'0000001'
        
movwf    PORTA
        call    retardo2


        movlw    0x5B
        movwf    PORTB
        movlw    
b'0000001'
        
movwf    PORTA         
        call     retardo2


        movlw    0x4F 
        movwf    PORTB
        movlw    
b'0000001'
        
movwf    PORTA         
        call     retardo2


        movlw    0x66
        movwf    PORTB
        movlw    
b'0000001'
        
movwf    PORTA         
        call     retardo2


        movlw    0x6D
        movwf    PORTB
        movlw    
b'0000001'
        
movwf    PORTA         
        call     retardo2


        movlw    0x7D
        movwf    PORTB
        movlw    
b'0000001'
        
movwf    PORTA         
        call     retardo2




        
goto    principal        



retardo        
;RETARDO 1 SEGUNDO

           movlw      d
'10'
           
goto          Retardo_1Decima
Retardo_1Decima
           movwf      R_ContC
R1Decima_BucleExterno2
           movlw      d
'100'
           
movwf      R_ContB
R1Decima_BucleExterno
           movlw      d
'249'
           
movwf      R_ContA
R1Decima_BucleInterno
           nop
           decfsz     R_ContA
,F
           
goto          R1Decima_BucleInterno
           decfsz      R_ContB
,F
           
goto          R1Decima_BucleExterno
           decfsz      R_ContC
,F
           
goto          R1Decima_BucleExterno2
           
return



retardo2        ;RETARDO 1 MINUTO

           movlw      d
'10'
           
goto          Retardo_1Decima
Retardo_1Decimal
           movwf      R_ContC
R1Decima_BucleExtern
           movlw      d
'249'
           
movwf      R_ContA
R1Decima_BucleIntern
           nop
           decfsz     R_ContA
,F
           
goto          R1Decima_BucleInterno
           decfsz      R_ContB
,F
           
goto          R1Decima_BucleExterno
           decfsz      R_ContC
,F
           
goto          R1Decima_BucleExterno2
           
return


 
END 
salutes ^^
espero que puedan ayudarme
01/09/2011 #2


Contador MM:SS con pic 16f84a
a ver si entiendo , tu problema es que se te apaga los digitos que te representan los seg? y se mantiene el de minutos?. podrías indicarme sobre que estas escribiendo , si es un display o un LCD , detalla un poco mas lo que haces en ASM y yo te doy una mano.
01/09/2011 #3


presumo que es display en led (no veo libreria de lcd ni rutina para ello), tiene que tener en cuenta que hay que refrescarlo, unas 20 a 26 veces por segundo pero resta presicion al tiempo, tons deberia manejarlo por interrupcion que en asm es otro cuento...
02/09/2011 #4


gracias por la respuesta.

primero soy hiper novato en esto jajaj recien estamos entrando en tema. es un display de 7 segmentos anodo comun.
como recien estamos empezando lo que tengo qe hacer es que cuente hasta 60 segundos y con lo que me explicaron pude llegar hasta aqu, el problema es que luego de llegar al 9 sigue el 10 es decir que se usa un display mas (queda 1 sin usar de los 3) pero el no se visualiza el 10 sino solo el 1 en el segundo y el cero que tendria que verse en el otro display no aparece
si necesitan mas detalle les cuento todo jejej
saludos!
05/09/2011 #5


ps no me acurdop mucho de asm, pero no deberia setear trisa y trisb como salidas?
algo asi?
start movlw 0x00 ; load W with 0x00 make port B output (p. 45) tris myPortB ; copy W tristate, port B outputs (p. 58)
06/09/2011 #6


Clau , primero y principal , para controlar los puertos debes configurar los tris , TRISA y TRISB , cosa que no haces ( vos pones esto , y realmente es TRISA y TRISB)
bsf STATUS,RP0
clrf PORTB
clrf PORTA
bcf STATUS,RP0
luego , en la temporizacion , usas las mismas direcciones de memorias para los registros registros , debes cambiarlos. Usa una direccion distinta para cada registro. Lo mejor que podes hacer es utilizar el comando
CBLOCK , para asignar las direcciones a los registros. y mi consejo es que refresques los display antes de cada segundo , ya que si no vas a notar sutilmente las variaciones de tension en el display
06/09/2011 #7

Avatar de Gudino Roberto duberlin

clau dijo: Ver Mensaje
gracias por la respuesta.

primero soy hiper novato en esto jajaj recien estamos entrando en tema. es un display de 7 segmentos anodo comun.
como recien estamos empezando lo que tengo qe hacer es que cuente hasta 60 segundos y con lo que me explicaron pude llegar hasta aqu, el problema es que luego de llegar al 9 sigue el 10 es decir que se usa un display mas (queda 1 sin usar de los 3) pero el no se visualiza el 10 sino solo el 1 en el segundo y el cero que tendria que verse en el otro display no aparece
si necesitan mas detalle les cuento todo jejej
saludos!
Hola Amigo, bueno para empezar te diria que, falta declarar los puertos como salida, ademas no es necesario refrescar el puerto A despues de cada RETURN, hazlo una unica vez cuando actualices el sig. digito. El programa es muy extenso a causa de la repetitividad, para ello usa una rutina de "tablas", en el cual declaras una linea tras otra el digito a mostrar segun el valor del registro de "cuentas", usa la instruccion PCL para ello y ademas los registros INDF y FSR. EXitos.-
Respuesta
¿Tienes una mejor respuesta a este tema? ¿Quieres hacerle una pregunta a nuestra comunidad y sus expertos? Registrate

Foros de Electrónica » Diseño digital » Microcontroladores y sistemas embebidos

Powered by vBulletin® Version 3.8.4
Copyright ©2000 - 2017, Jelsoft Enterprises Ltd.
Search Engine Optimization by vBSEO ©2011, Crawlability, Inc.