uControl
Abril 30, 2017, 02:10:03 *
Bienvenido(a), Visitante. Por favor, ingresa o regístrate.
¿Perdiste tu email de activación?

Ingresar con nombre de usuario, contraseña y duración de la sesión
 
   Inicio   Ayuda Buscar Ingresar Registrarse  
Páginas: [1] 2 3 4   Ir Abajo
  Imprimir  
Autor Tema: Reloj binario PIC 16F628A ASm (en proceso)  (Leído 8566 veces)
0 Usuarios y 1 Visitante están viendo este tema.
Fulguitron
PIC12F
**
Desconectado Desconectado

Mensajes: 103


« : Julio 13, 2015, 08:28:15 »

Bueno, ya tengo el reloj un tanto avanzado pero mi idea era enseñarlo finalizado, pero todavía me falta y los problemas van surgiendo.Tengo el programa medio apañado a parte de ponerme e contar tiempos, cosa que haré cuando lo tenga más avanzado.

El reloj es sencillo consta de dos botones y seis leds. La idea final es que al apretar un botón salga la hora y luego los minutos. También podrás ajustar el reloj (pero eso más adelante)
Os dejo el diagrama de Proteus que funciona OK y el código actual (Lo iré actualizando en esta hoja para no tener que andar buscando cual es la actual)



Código actual (ültima actualización 14/07/15)

Código:

__CONFIG _CP_OFF & _WDT_OFF & _BODEN_OFF & _PWRTE_ON & _INTOSC_OSC_NOCLKOUT & _DATA_CP_OFF & _LVP_OFF & _MCLRE_OFF
LIST    P=16F628A
INCLUDE  <P16F628A.INC>

CBLOCK  0x20
Max_horas
Max_minutos
Max_segundos
segundos
minutos
horas
contador
memoria_boton_0
estado
ENDC

#DEFINE Pulsador PORTA,0

; ZONA DE CÓDIGOS ********************************************************************

ORG 0x05
     
Inicioo
bsf STATUS,RP0
clrf TRISB
movlw b'00000111'
movwf OPTION_REG
movwf CMCON
bcf STATUS,RP0
clrf PORTB

Memoria
movlw d'12'
movwf Max_horas
movlw d'30'
movwf Max_minutos
movlw d'10'
movwf Max_segundos
movlw d'10'
movwf contador
movlw d'2'
movwf memoria_boton_0
movlw d'1'
movwf estado


doce_horas
movlw d'1'
movwf segundos
movlw d'1'
movwf minutos
movlw d'1'
movwf horas


;========================== INCREMENTAMOS LOS SEGUNDOS ============================================

Un_segundo_carga EQU -d'39'

; =======================================================================================================
; ============================ ZONA DE CÓDIGO QUE ACTIVA EL DISPLAY CON EL BOTÓN ========================

Inicio
movf estado,W
sublw d'2'
btfsc STATUS,Z
goto display
Boton_0
btfsc Pulsador ; CAMBIAR PARA PRUEBAS
goto pulsado
goto no_pulsado

pulsado
movlw d'2'
movwf estado
goto display
no_pulsado

goto Un_segundo

; =======================================================================================================


display
movf memoria_boton_0,W
sublw d'2'
btfsc STATUS,Z
goto ver_hora
movf memoria_boton_0,W
sublw d'3'
btfsc STATUS,Z
goto clear_display_0
movf memoria_boton_0,W
sublw d'4'
btfsc STATUS,Z
goto ver_minutos
movf memoria_boton_0,W
sublw d'5'
btfsc STATUS,Z
goto clear_display_1
goto Un_segundo

ver_hora
movf horas,W
movwf PORTB
incf memoria_boton_0,1
goto Un_segundo

clear_display_0
clrf PORTB
incf memoria_boton_0,1
goto Un_segundo

ver_minutos
movf minutos,W
movwf PORTB
incf memoria_boton_0,1
goto Un_segundo

clear_display_1
clrf PORTB
movlw d'2'
movwf memoria_boton_0
movlw d'1'
movwf estado

; ===============================================================================================================

Un_segundo
movlw Un_segundo_carga
movwf TMR0
bcf INTCON,T0IF

Timer0_Rebosamiento
btfss INTCON,T0IF
goto Timer0_Rebosamiento
decfsz contador,1
goto Un_segundo

movlw d'50'
movwf contador



comp
incf segundos,F
movf segundos,W ;revisa si ha llegado a 60 segundos.
subwf Max_segundos,W
btfss STATUS,Z ; si ha llegado a 60 segundos, se va a inc_minutos, sino se va a inc_segundos.
goto Inicio

;=========================== INCREMENTAMOS LOS MINUTOS =====================================================
; " En el momento que los segundos llegan a 60, se incrementa 1 a minutos, se revisa si se ha llegado a 60 minutos y se pone a 0 los segundos"

inc_minutos
movlw d'1' ; Ponemos a cero los segundos para que empiece el conteo.
movwf segundos
incf minutos ; incrementamos en 1 los minutos.

movf minutos,W
subwf Max_minutos,W ; revisa si ha llegado a 60 minutos.
btfsc STATUS,Z
goto inc_horas ; si ha llegado a 60 minutos se va a inc_horas.
goto Inicio ; si no, se va ainc_segundos que empiezan a cero puesto que ya se ha reseteado en movwf segundos.

; ============================== INCREMENTAMOS LAS HORAS =====================================================
; " En el momento que los minutos llegan a 60, se incrementa 1 en horas y se ponen a 0 los minutos y los segundos"

inc_horas
movlw d'1' ; Primer número por donde quieres que empiece el conteo.
movwf minutos
incf horas

movf horas,W
subwf Max_horas,W ; revisa si ha llegado a 60 minutos.
btfsc STATUS,Z
goto doce_horas
goto Inicio

INCLUDE <RETARDOS.INC>
END

Y ahora viene mi primer problema, en Proteus funciona OK, pulso un botón y se ve la hora, los minutos y luego los leds se apagan esperando a que nuevamente apriete el botón. En la realidad los leds siempre están encendidos e ignoran los botones, porque?Huh?
En línea

Disfruta de mi blog, hobbies y gadgets diferentes y poco comunes.

http://hobbiesygadgets.blogspot.com.es/
Leon Pic
Moderator
dsPIC
***
Desconectado Desconectado

Sexo: Masculino
Mensajes: 5694


Cumulonimbus


WWW
« Respuesta #1 : Julio 14, 2015, 09:10:19 »

Hola Fulguitron.
No lo revisé muy en detalle. Lo que veo que no implementas, es un retardo al momento de presionar el botón. Esto es para evitar los rebotes que se generan al presionar el botón.

Veo que lo haces trabajar con el oscilador interno y sin pin reset. No debería haber problema con ello. No obstante, si quieres precisión en el reloj, te aconsejo que utilices el oscilador externo; con un cristal de calidad y los condesadores de desacoplo, que también sean de calidad.
En línea

Jesús dijo, yo soy el CAMINO, la VERDAD y la VIDA, nadie llega al PADRE si no es por mi.
Fulguitron
PIC12F
**
Desconectado Desconectado

Mensajes: 103


« Respuesta #2 : Julio 15, 2015, 06:10:19 »

Parece ser que el problema resido en el tema de los bancos y el CMCON.



He cambiado el código por esto pero tampoco funciona, que hago mal??

Código:
Inicioo
bsf STATUS,RP0 ; Acceso al Banco 1.
clrf TRISB
movlw b'00000111'
movwf OPTION_REG
movwf VRCON ; Configura las entradas como analógicas.
bcf STATUS,RP0 ; Acceso al Banco 0.
clrf PORTB


En línea

Disfruta de mi blog, hobbies y gadgets diferentes y poco comunes.

http://hobbiesygadgets.blogspot.com.es/
Fulguitron
PIC12F
**
Desconectado Desconectado

Mensajes: 103


« Respuesta #3 : Julio 16, 2015, 05:14:13 »

Seguimos avanzando con nuestro reloj, una pregunta, que pines necesito para programar el PIC? Mi idea es hacer un conector al reloj para no estar todo el rato quitando y poniendo el PIC para programarlo.
En línea

Disfruta de mi blog, hobbies y gadgets diferentes y poco comunes.

http://hobbiesygadgets.blogspot.com.es/
Leon Pic
Moderator
dsPIC
***
Desconectado Desconectado

Sexo: Masculino
Mensajes: 5694


Cumulonimbus


WWW
« Respuesta #4 : Julio 16, 2015, 10:49:32 »

Lo que queres hacer se llama programación en circuito.
En mi caso, utilizo el Pickit 2 clone. Es muy versátil y cómodo. Hay varios temas sobre esto (programación en circuito) en el foro. Realmente es muy sencillo. Cualquier duda con esto, lo puedes seguir en el tema en concreto.

Veo que avanzaste. ¿Lograste hacerlo andar?
Yo he estado siguiendo el programa, pero en parte me pierdo (encima mi señora que me hablaba de lejos mientras trataba de estudiar el programa).

Por lo que acabo de notar ahora, es que no configuraste el puerto A.
« Última modificación: Julio 16, 2015, 01:06:20 por Leon Pic » En línea

Jesús dijo, yo soy el CAMINO, la VERDAD y la VIDA, nadie llega al PADRE si no es por mi.
Fulguitron
PIC12F
**
Desconectado Desconectado

Mensajes: 103


« Respuesta #5 : Julio 17, 2015, 04:12:27 »

Pues si, el programa anda perfectamente, ya responde a los botones y muestra la hora y los minutos. Ahora lo que falta (que no es poco) es que los tiempos sean correctos, para ello voy a optimizar más el programa y una vez hecho me pondré a llorar por el foro a ver quien me ayuda a hacer una interrupción.
Mi idea no es usar el pickit 2 clone. Supongo que para programar un PIC necesitare conectar el positivo, el negativo y algún pin más. Pues bien mi idea es sacar unos cables del reloj (pero algo chulo) y colocarlos en el programador, a lo mejor soldando esos cables a un zócalo de pic para que me sea más sencillo. Lo que me falta saber es que pines necesito para poder programarlo.
En línea

Disfruta de mi blog, hobbies y gadgets diferentes y poco comunes.

http://hobbiesygadgets.blogspot.com.es/
Leon Pic
Moderator
dsPIC
***
Desconectado Desconectado

Sexo: Masculino
Mensajes: 5694


Cumulonimbus


WWW
« Respuesta #6 : Julio 17, 2015, 02:21:33 »

Excelente ¿cuál era el prpblema?

Por lo de programación, buscá en el foro programación in circuit. Solo necesitas gnd, reset, pgd y pgc. Necesitas 5v sino alimentas el circuito.
Haceme caso, buscá que es censillo y práctico. Yo hace años que no saco el pic para programar.
En línea

Jesús dijo, yo soy el CAMINO, la VERDAD y la VIDA, nadie llega al PADRE si no es por mi.
Fulguitron
PIC12F
**
Desconectado Desconectado

Mensajes: 103


« Respuesta #7 : Julio 17, 2015, 02:38:42 »



Entonces sino me equivoco necesito solo ....

GND                  PIN 5     
RESET               PIN 4 
PGD                  PIN 13   
PGC                  PIN 12

Mi idea es bien sencilla, en cuanto haga el primer prototipo de reloj hago unas fotitos y os lo enseño. El problema es que activaba CMCON en un banco incorrecto y por eso los botones no funcionaban bien en la protoboard y si en el proteus. Ahora todo funciona.

Ahora tengo que empezar con las interrupciones si quiero que el reloj tenga una cierta exactitud y es una cosa que nunca he logrado entender como funcionan, a ver si esta vez tengo más suerte.
En línea

Disfruta de mi blog, hobbies y gadgets diferentes y poco comunes.

http://hobbiesygadgets.blogspot.com.es/
Leon Pic
Moderator
dsPIC
***
Desconectado Desconectado

Sexo: Masculino
Mensajes: 5694


Cumulonimbus


WWW
« Respuesta #8 : Julio 17, 2015, 04:52:05 »

El problema, es que tienes que meterle 13V al pin 4 para que el pic entre en modo de programación. Si no haces bien el circuito adaptador, podes generar un corto circuito. Además, en la programación in circuit, no perdés los pines RB7 y RB6; con solo una resistencia a cada uno, podrás utilizarla tanto como entrada o como salida (independientemente).

¡Vamos!, no seas porfiado.

Recuerda, si quieres precisión en el reloj, olvídate del oscilador interno. Pon un externo.
En línea

Jesús dijo, yo soy el CAMINO, la VERDAD y la VIDA, nadie llega al PADRE si no es por mi.
Fulguitron
PIC12F
**
Desconectado Desconectado

Mensajes: 103


« Respuesta #9 : Julio 17, 2015, 06:16:24 »

No no, los cables van directamente al programador a través de un zócalo, no voy a hacer cosas raras, bastante me esta costando jejeje. También me han comentado lo del oscilador externo, lo tendré en cuenta.
En línea

Disfruta de mi blog, hobbies y gadgets diferentes y poco comunes.

http://hobbiesygadgets.blogspot.com.es/
Fulguitron
PIC12F
**
Desconectado Desconectado

Mensajes: 103


« Respuesta #10 : Julio 21, 2015, 06:08:15 »

Bueno, ya tengo el  código más o menos hecho. Ahora falta comenzar con la interrupción  pero la tengo muy atratangantada. Por donde empiezo?? Código actual primer post
En línea

Disfruta de mi blog, hobbies y gadgets diferentes y poco comunes.

http://hobbiesygadgets.blogspot.com.es/
Fulguitron
PIC12F
**
Desconectado Desconectado

Mensajes: 103


« Respuesta #11 : Julio 28, 2015, 05:28:38 »

Más avances en mi reloj (bueno todavía cuenta lo que quiere pero tiempo al tiempo). Actualmente he cambiado la configuración de los TMR por otra que me dará algo más de precisión. Por desgracia el tiempo no va como quiere y no se que falla. Os dejo el trozo de código que creo que es culpable.

Código:
inc_segundos
bcf PIR1,CCP1IF
decfsz contador,F
goto BOTON
comp
movlw d'2'
movwf contador
incf segundos,F
movf segundos,W ;revisa si ha llegado a 60 segundos.
sublw Max_segundos
btfss STATUS,Z ; si ha llegado a 60 segundos, se va a inc_minutos, sino se va a inc_segundos.
goto BOTON

Y como siempre el código completo por si alguien se anima a hacerlo y a echarme un cable.

Código:
__CONFIG _CP_OFF & _WDT_OFF & _BODEN_OFF & _PWRTE_ON & _INTOSC_OSC_NOCLKOUT & _DATA_CP_OFF & _LVP_OFF & _MCLRE_OFF
LIST    P=16F628A
INCLUDE  <P16F628A.INC>

CBLOCK  0x20
segundos
minutos
horas
contador
memoria_boton_0
estado
ENDC

#DEFINE Pulsador PORTA,0
Max_horas EQU d'12'
Max_minutos EQU d'60'
Max_segundos EQU d'60'

; ZONA DE CÓDIGOS ********************************************************************

ORG 0x05
     
Inicioo
bsf STATUS,RP0 ; Acceso al Banco 1.
clrf TRISB
bcf STATUS,RP0 ; Acceso al Banco 0.
movwf CMCON ; Configura las entradas como analógicas.
clrf PORTB
 
  movlw   d'00001011'            ;Configurado como compare y resetea Timer1 
    movwf   CCP1CON
    movlw   d'00111100'            ;Preescaler 1/8, reloj interno, todavia no activo el timer
    movwf   T1CON
    movlw   d'11110100'            ;CCP cargado con valor 0xF424 o 62500  (62500*1us*8)=0.5s  244
    movwf   CCPR1H
    movlw   d'00100100'
    movwf   CCPR1L
    clrf    TMR1H            ;TMR1 = 0
    clrf    TMR1L
    BSF     T1CON,TMR1ON    ;Activo TMR1

Memoria
movlw d'2'
movwf contador
movlw d'0'
movwf memoria_boton_0

movlw d'0'
movwf estado
movlw d'1'
movwf segundos
movlw d'1'
movwf minutos
movlw d'1'
movwf horas

; =======================================================================================================
; ============================ ZONA DE CÓDIGO QUE ACTIVA EL DISPLAY CON EL BOTÓN ========================

BOTON
movf estado,W
sublw d'1'
btfss STATUS,Z
call display
Boton_0
btfss Pulsador
goto pulsado
goto no_pulsado

no_pulsado
call inc_segundos

pulsado
movlw d'1'
movwf estado
call display


; =======================================================================================
; ======================= CUENTA EL TIEMPO ==============================================
; =======================================================================================

inc_segundos
bcf PIR1,CCP1IF
decfsz contador,F
goto BOTON
comp
movlw d'2'
movwf contador
incf segundos,F
movf segundos,W ;revisa si ha llegado a 60 segundos.
sublw Max_segundos
btfss STATUS,Z ; si ha llegado a 60 segundos, se va a inc_minutos, sino se va a inc_segundos.
goto BOTON

;=========================== INCREMENTAMOS LOS MINUTOS =====================================================
; " En el momento que los segundos llegan a 60, se incrementa 1 a minutos, se revisa si se ha llegado a 60 minutos y se pone a 0 los segundos"

inc_minutos
movlw d'1' ; Ponemos a cero los segundos para que empiece el conteo.
movwf segundos
incf minutos ; incrementamos en 1 los minutos.

movf minutos,W
sublw Max_minutos ; revisa si ha llegado a 60 minutos.
btfsc STATUS,Z
goto inc_horas ; si ha llegado a 60 minutos se va a inc_horas.
goto BOTON ; si no, se va ainc_segundos que empiezan a cero puesto que ya se ha reseteado en movwf segundos.

; ============================== INCREMENTAMOS LAS HORAS =====================================================
; " En el momento que los minutos llegan a 60, se incrementa 1 en horas y se ponen a 0 los minutos y los segundos"

inc_horas
movlw d'1' ; Primer número por donde quieres que empiece el conteo.
movwf minutos
incf horas

movf horas,W
sublw Max_horas ; revisa si ha llegado a 60 minutos.
btfsc STATUS,Z
call doce_horas
goto BOTON


; ====================================================================================
; ==================== SE ACTIVA EL DISPLAY Y MUESTRA DE MANERA CORRELATIVO LA HORA Y LOS MINUTOS.
; ====================================================================================

display
movf memoria_boton_0,W
ADDWF   PCL,F ; muestra consecutivamente las órdenes de goto conforme incrementa memoria_boton_0
    goto    ver_hora
    goto    clear_display_0
    goto    ver_minutos
goto clear_display_1
return

ver_hora
movf horas,W ; mostramos las horas por el display de leds.
movwf PORTB
incf memoria_boton_0,F ; incrementa en 1 memoria_boton_0 para usarlo luego en la tabla y saltar al siguiente goto
return

clear_display_0
clrf PORTB
incf memoria_boton_0,F
return

ver_minutos
movf minutos,W ; mostramos los minutos por el display de leds.
movwf PORTB
incf memoria_boton_0,F
return

clear_display_1
clrf estado ; ponemos a 0 estado
clrf memoria_boton_0 ; ponemos a 0 memoria_boton_0
clrf PORTB
return

; ====================================================================================
; =================== RESETEA LOS VALORES DE LA HORA, MINUTOS Y SEGUNDOS =============
; ====================================================================================

doce_horas
movlw d'1'
movwf segundos
movwf minutos
movwf horas
return


END
En línea

Disfruta de mi blog, hobbies y gadgets diferentes y poco comunes.

http://hobbiesygadgets.blogspot.com.es/
Fulguitron
PIC12F
**
Desconectado Desconectado

Mensajes: 103


« Respuesta #12 : Agosto 31, 2015, 02:40:37 »

Seguimos con mi reloj y ahora toca el tema de las interrupciones, que miedo me da, porque me ha salido nada, a ve si ahora tengo suerte. Actualmente, he añadido un tercer botón para que actue sobre otro LED que hará de linterna. Como siempre os dejo el código y quien se quiera animar a echarme un cable será bien recibido.

Saludos
Código:
__CONFIG _CP_OFF & _WDT_OFF & _BODEN_OFF & _PWRTE_ON & _INTOSC_OSC_NOCLKOUT & _DATA_CP_OFF & _LVP_OFF & _MCLRE_OFF
LIST    P=16F628A
INCLUDE  <P16F628A.INC>

CBLOCK  0x20
segundos
minutos
horas
contador
memoria_boton_0
memoria_boton_2
estado
estado_led
led
cero
pulsado
est_pulsador_0
est_pulsador_2
estado_botones
ENDC

#DEFINE Pulsador_0 PORTA,0
#DEFINE Pulsador_2 PORTA,1
Max_horas EQU d'12'
Max_minutos EQU d'60'
Max_segundos EQU d'60'

; ZONA DE CÓDIGOS ********************************************************************

ORG 0x05
     
Configuracion_inicial
bsf STATUS,RP0 ; Acceso al Banco 1.
clrf TRISB
movlw b'00000111'
movwf OPTION_REG
bcf STATUS,RP0 ; Acceso al Banco 0.
movwf CMCON ; Configura las entradas como analógicas.
clrf PORTB
movlw   b'00111100'  ; Se selecciona TMR1, preescaler de 1/8, modo temporizador.-
    movwf   T1CON
    movlw   b'00001011'    ; Se configura CCP modo captura cada flanco de subida.-
    movwf   CCP1CON
movlw   b'11110100'   
movwf   CCPR1H
movlw   b'00100100'   
movwf   CCPR1L
clrf    TMR1H
clrf    TMR1L         
bsf T1CON,TMR1ON

movlw d'2'
movwf contador
movlw d'0'
movwf memoria_boton_0

movlw d'0'
movwf estado
movlw d'0'
movwf estado_led
movlw d'0'
movwf cero
movlw d'0'
movwf segundos
movlw d'24'
movwf minutos
movlw d'2'
movwf horas
movlw d'0'
movwf est_pulsador_0
movlw d'0'
movwf est_pulsador_2
movlw d'64'
movwf led


; =======================================================================================================
; ============================ ZONA DE CÓDIGO QUE ACTIVA EL DISPLAY CON EL BOTÓN ========================

Display_activo
movf estado,W
sublw d'0'
btfss STATUS,Z
call display
Estado_botones
btfss Pulsador_0
goto pulsado_0
btfss Pulsador_2
goto pulsado_2
call inc_segundos

pulsado_2
movlw d'1'
movwf estado_led
goto display_led

no_pulsado
call inc_segundos

pulsado_0
movlw d'1'
movwf estado
call display

; =======================================================================================
; ======================= CUENTA EL TIEMPO ==============================================
; =======================================================================================

inc_segundos
btfss PIR1,CCP1IF
goto inc_segundos
bcf PIR1,CCP1IF
clrf TMR1H
decfsz contador,F
goto inc_segundos

comp
movlw d'2'
movwf contador
incf segundos,F
movf segundos,W ;revisa si ha llegado a 60 segundos.
sublw Max_segundos
btfss STATUS,Z ; si ha llegado a 60 segundos, se va a inc_minutos, sino se va a inc_segundos.
goto Display_activo

;=========================== INCREMENTAMOS LOS MINUTOS =====================================================
; " En el momento que los segundos llegan a 60, se incrementa 1 a minutos, se revisa si se ha llegado a 60 minutos y se pone a 0 los segundos"

inc_minutos
movlw d'1' ; Ponemos a cero los segundos para que empiece el conteo.
movwf segundos
incf minutos ; incrementamos en 1 los minutos.

movf minutos,W
sublw Max_minutos ; revisa si ha llegado a 60 minutos.
btfsc STATUS,Z
goto inc_horas ; si ha llegado a 60 minutos se va a inc_horas.
goto Display_activo ; si no, se va ainc_segundos que empiezan a cero puesto que ya se ha reseteado en movwf segundos.

; ============================== INCREMENTAMOS LAS HORAS =====================================================
; " En el momento que los minutos llegan a 60, se incrementa 1 en horas y se ponen a 0 los minutos y los segundos"

inc_horas
movlw d'1' ; Primer número por donde quieres que empiece el conteo.
movwf minutos
incf horas

movf horas,W
sublw Max_horas ; revisa si ha llegado a 60 minutos.
btfsc STATUS,Z
call doce_horas
goto Display_activo


; ====================================================================================
; ==================== SE ACTIVA EL DISPLAY Y MUESTRA DE MANERA CORRELATIVO LA HORA Y LOS MINUTOS.
; ====================================================================================

display
movf memoria_boton_0,W
addwf   PCL,F ; muestra consecutivamente las órdenes de goto conforme incrementa memoria_boton_0
    goto    ver_hora
    goto    clear_display_0
    goto    ver_minutos
goto clear_display_1
return

ver_hora
movf horas,W ; mostramos las horas por el display de leds.
movwf PORTB
incf memoria_boton_0,F ; incrementa en 1 memoria_boton_0 para usarlo luego en la tabla y saltar al siguiente goto
return

clear_display_0
clrf PORTB
incf memoria_boton_0,F
return

ver_minutos
movf minutos,W ; mostramos los minutos por el display de leds.
movwf PORTB
incf memoria_boton_0,F
return

clear_display_1
clrf estado ; ponemos a 0 estado
clrf memoria_boton_0 ; ponemos a 0 memoria_boton_0
clrf PORTB
return

; ====================================================================================
; =================== RESETEA LOS VALORES DE LA HORA, MINUTOS Y SEGUNDOS =============
; ====================================================================================

doce_horas
movlw d'1'
movwf segundos
movwf minutos
movwf horas
return
; ===================== DISPLAY DEL ENCENDIDO ==========================
; ===================== Y APAGADO DEL LED ==============================

display_led
movf memoria_boton_2,W
addwf PCL,f
goto encender_led
goto apagar_led
return

encender_led
movf led,W
movwf PORTB
incf memoria_boton_2,F
goto Estado_botones
apagar_led
clrf memoria_boton_2
clrf estado_led
clrf PORTB
goto Estado_botones

END
En línea

Disfruta de mi blog, hobbies y gadgets diferentes y poco comunes.

http://hobbiesygadgets.blogspot.com.es/
Leon Pic
Moderator
dsPIC
***
Desconectado Desconectado

Sexo: Masculino
Mensajes: 5694


Cumulonimbus


WWW
« Respuesta #13 : Agosto 31, 2015, 08:09:17 »

¿El problema es que no anda la interrupción?
En línea

Jesús dijo, yo soy el CAMINO, la VERDAD y la VIDA, nadie llega al PADRE si no es por mi.
Fulguitron
PIC12F
**
Desconectado Desconectado

Mensajes: 103


« Respuesta #14 : Septiembre 01, 2015, 02:17:44 »

No anda porque todavía no he programado nada jejeje. En breve me pondré a ver si me salen de una vez por todas las interrupciones. El problema es cuando cargo un valor mayor de 32 en LED. Tiene pinta de ser algo del Proteus que no hago bien, porque el LED no se enciende, pero el cuadrado que hay al lado del LED (en el proteus) si lo hace. Ahora no puedo subi una foto, pero esta tarde la subo para que veáis el problema.
En línea

Disfruta de mi blog, hobbies y gadgets diferentes y poco comunes.

http://hobbiesygadgets.blogspot.com.es/
Páginas: [1] 2 3 4   Ir Arriba
  Imprimir  
 
Ir a:  

Impulsado por MySQL Impulsado por PHP Powered by SMF 1.1.21 | SMF © 2011, Simple Machines
SMFAds for Free Forums
XHTML 1.0 válido! CSS válido!
Página creada en 0.096 segundos con 26 consultas. (Pretty URLs adds 0.011s, 2q)
loggkey