Autor Tema: reloj con pic 16f84a  (Leído 6836 veces)

0 Usuarios y 2 Visitantes están viendo este tema.

Desconectado pic_877a

  • PIC16
  • ***
  • Mensajes: 172
reloj con pic 16f84a
« en: 08 de Enero de 2012, 10:53:36 »
hola compañeros del foro, les quiero pedir una ayuda si me pueden colaborar  es que hice un programa un reloj digital usando pic 16f84a, pero a la hora de compilar me da errores, y no se por que me dan estos errores. este es el programa.
espero que me ayuden.
gracias jose luis


list P=16F84A
include<P16F84A.inc>
include<RETARDOS.inc>
cblock 0x0C
segundo_uni
segundo_dec
unidad
decena
centena
unidmil
digito1  ;minutos
digito2 ;munutos
digito3 ;hora
digito4 ;hora
digito5
digito6
alar_digito1; digito alarma minuto
alar_digito2; digito alarma minuto
alar_digito3; digito alarma hora
alar_digito4; digito alarma hora
contador
segundo
contador_interupcion  ; controla la  sincronizacion del reloj
controlador_interupcion;  se encarga de controlar las interupciones
controlador_cambio;
contador_alarma
activar ; controlar la sincronizacion del reloj
timbre_alarma
endc
org 0
goto inicio
org 4
goto controlador

inicio ;configuracion  de pines
bsf  STATUS, RP0
movlw b'01110000'
movwf PORTB
movlw b'11110000'
movwf PORTA
movlw b'10100000'
movwf INTCON
movlw b'00000011'
movwf OPTION_REG
bcf STATUS,RP0
clrf segundo_uni
clrf segundo_dec
clrf unidad
clrf decena
clrf centena
clrf unidmil
clrf contador
clrf segundo
clrf activar
clrf contador_interupcion
clrf controlador_interupcion
clrf controlador_cambio
clrf digito6
clrf digito5
clrf timbre_alarma
movlw d'0'
movwf TMR0
;inicializacion de los digitos del display
clrf digito4
clrf digito3
clrf digito2
clrf digito1
clrf alar_digito4
clrf alar_digito2
clrf alar_digito3
movlw d'1'
movwf alar_digito1
clrf contador_alarma
call visualizar

; contador de segundos unidad
contador_unidad_segundo
incf segundo_uni
movfw segundo_uni
sublw d'10'
btfsc STATUS,Z
call contador_decena_segundo
movfw segundo_uni
movwf digito5
call visualizar

; contador de segundos decena
contador_decena_segundo
clrf segundo_uni
clrf digito5
incf segundo_dec
movfw segundo_dec
sublw d'6'
btfsc STATUS,Z
call contador_unidad_minuto
movfw segundo_dec
movwf digito6
call visualizar

;contador de unidades minuto
contador_unidad_minuto
clrf segundo_dec
clrf digito6
incf unidad
movf unidad,w
sublw d'10'
btfsc  STATUS,Z
call contador_decena_minuto
movf unidad,w
movwf digito1
;  es hora de alarma
movfw centena
subwf alar_digito3,0
btfsc STATUS,Z
call activar_alarma
;
call visualizar

;contador de decena minuto
contador_decena_minuto
clrf unidad
clrf digito1
incf decena
movf decena,w
sublw d'6'
btfsc  STATUS,Z
call contador_unidad_hora
movf decena,w
movwf digito2
;  es hora de alarma
movfw centena
subwf alar_digito3,0
btfsc STATUS,Z
call activar_alarma
;
call visualizar

;contador de unidad hora
contador_unidad_hora
clrf decena
clrf digito2
incrementar_hora
incf centena
movf centena,w
sublw d'10'
btfsc  STATUS,Z
call contador_decena_hora
movf centena,w
movwf digito3
movfw centena
sublw d'4'
btfss STATUS,Z
call visualizar
incf contador,1
movfw contador
sublw d'3'
btfss STATUS,Z
call visualizar
clrf digito3
clrf digito4
clrf centena
clrf unidmil
clrf contador
call visualizar

;contador de decena hora
contador_decena_hora
clrf centena
clrf digito3
incf unidmil
movf unidmil,w
sublw d'10'
btfsc  STATUS,Z
clrf unidmil
movf unidmil,w
movwf digito4
call visualizar

visualizar
movfw digito1
bcf PORTA,1 ;DESHABILTAR DECENAS
bcf PORTA,2 ;DESHABILTAR CENTENAS
bcf PORTA,3 ;DESHABILTAR UNIDAD DE MILLAR
movwf PORTB
bsf PORTA,0 ; HABILITAR UNIDADES
movfw digito2
bcf PORTA,0; DESHABILITAS UNIDADES
movwf PORTB
bsf PORTA,1; HABILITAS DECENAS
movfw digito3
bcf PORTA,1; DESHABILITAS DECENAS
movwf PORTB
bsf PORTA,2 ; HABILITO CENTENAS
movfw digito4
bcf PORTA,2 ;DESHABILITO CENTENAS
movwf PORTB
bsf PORTA,3 ; HABILITO UNIDAD DE MILLAR
btfsc PORTB,4
goto stop; detener el tiempo
movfw controlador_interupcion
sublw d'5'
btfsc STATUS,Z
goto activar_interupcion
goto visualizar

controlador ; se encarga de controlar la ocurenncia de un segundo
bsf INTCON,7
bcf INTCON,2
movlw d'0'
movwf TMR0
incf segundo
movfw segundo
sublw d'243'
btfss STATUS,Z
call visualizar
clrf segundo
call contador_unidad_segundo


stop
bcf INTCON,7 ; deshabilitas cualquier tipo de interupcion
btfsc PORTB,4
call continuamos_stop
activar_interupcion
bsf INTCON,7
bcf INTCON,2
movlw d'0'
movwf TMR0
clrf activar
clrf contador_interupcion
clrf controlador_interupcion
clrf controlador_cambio
goto visualizar 

continuamos_stop
movlw d'5'
movwf controlador_interupcion ; activamos el controlador
btfsc PORTB,5
goto pre_controlador
call RETARDO_10MS
btfsc PORTB,5
goto pre_controlador
incf contador_interupcion
cambio
bucle
btfss PORTB,5
goto bucle
call RETARDO_10MS
btfss PORTB,5
goto bucle
sigue
movlw d'5'
movwf activar; activamos que se produjo un intento de camibo de horairo
movfw contador_interupcion
sublw d'6' ;;
btfsc STATUS,Z
call special
movfw contador_interupcion
sublw d'1'
btfsc STATUS,Z ; horas?
goto pre_incrementar_hora
movfw contador_interupcion
sublw d'2'
btfsc STATUS,Z  ; minutos?
goto pre_incrementar_minuto
movfw contador_interupcion
sublw d'3'
btfsc STATUS,Z ; mostrar alarma?
goto visualizar_especial
movfw contador_interupcion
sublw d'4'
btfsc STATUS,Z ; horas_alarma?
goto pre_incrementar_hora_alarma
movfw contador_interupcion
sublw d'5'
btfsc STATUS,Z ; minutos_alaram?
goto pre_incrementar_minuto_alarma

special
movlw d'1'
movwf contador_interupcion
return
pre_controlador
movfw activar
sublw d'5'
btfss STATUS, Z
goto visualizar
goto sigue

pre_incrementar_hora  ; espera que se pulse para incrementar
btfsc PORTB,6
goto visualizar
call RETARDO_10MS
btfsc PORTB,6
goto visualizar
bucle2
btfss PORTB,6
goto bucle2
goto incrementar_hora

pre_incrementar_minuto; espera que se pulse para incrementar
btfsc PORTB,6
goto visualizar
call RETARDO_10MS
btfsc PORTB,6
goto visualizar
bulce3
btfss PORTB,6
goto bulce3
goto contador_unidad_minuto

visualizar_especial
movfw alar_digito1
bcf PORTA,1 ;DESHABILTAR DECENAS
bcf PORTA,2 ;DESHABILTAR CENTENAS
bcf PORTA,3 ;DESHABILTAR UNIDAD DE MILLAR
movwf PORTB
bsf PORTA,0 ; HABILITAR UNIDADES
movfw alar_digito2
bcf PORTA,0; DESHABILITAS UNIDADES
movwf PORTB
bsf PORTA,1; HABILITAS DECENAS
movfw alar_digito3
bcf PORTA,1; DESHABILITAS DECENAS
movwf PORTB
bsf PORTA,2 ; HABILITO CENTENAS
movfw alar_digito4
bcf PORTA,2 ;DESHABILITO CENTENAS
movwf PORTB
bsf PORTA,3 ; HABILITO UNIDAD DE MILLAR
btfsc PORTB,4
goto stop; detener el tiempo
movfw controlador_interupcion
sublw d'5'
btfsc STATUS,Z
goto activar_interupcion
goto visualizar_especial

;contador de unidades minuto alarma
contador_unidad_minuto_alarma
incf alar_digito1
movf alar_digito1,w
sublw d'10'
btfsc  STATUS,Z
call contador_decena_minuto_alarma
call visualizar_especial

;contador de decena minuto
contador_decena_minuto_alarma
clrf alar_digito1
incf alar_digito2
movf alar_digito2,w
sublw d'6'
btfsc  STATUS,Z
call contador_unidad_hora_alarma
call visualizar_especial

;contador de unidad hora
contador_unidad_hora_alarma
clrf alar_digito2
incrementar_hora_alarma
incf alar_digito3
movf alar_digito3,w
sublw d'10'
btfsc  STATUS,Z
call contador_decena_hora_alarma
movfw alar_digito3
sublw d'4'
btfss STATUS,Z
call visualizar_especial
incf contador_alarma,1
movfw contador_alarma
sublw d'3'
btfss STATUS,Z
call visualizar_especial
clrf alar_digito3
clrf alar_digito4
clrf contador_alarma
call visualizar_especial

;contador de decena hora
contador_decena_hora_alarma
clrf alar_digito3
incf alar_digito4
movf alar_digito4,w
sublw d'10'
btfsc  STATUS,Z
clrf alar_digito4
call visualizar_especial

pre_incrementar_hora_alarma  ; espera que se pulse para incrementar
btfsc PORTB,6
goto visualizar_especial
call RETARDO_10MS
btfsc PORTB,6
goto visualizar_especial
bucle4
btfss PORTB,6
goto bucle4
goto incrementar_hora_alarma

pre_incrementar_minuto_alarma; espera que se pulse para incrementar
btfsc PORTB,6
goto visualizar_especial
call RETARDO_10MS
btfsc PORTB,6
goto visualizar_especial
bulce5
btfss PORTB,6
goto bulce5
goto contador_unidad_minuto_alarma

activar_alarma
movfw unidmil
subwf alar_digito4,0
btfss STATUS,Z
return
movfw decena
subwf alar_digito2,0
btfss STATUS,Z
return
movfw unidad
subwf alar_digito1,0
btfss STATUS,Z
return
bcf INTCON,7; deshabilitado todo tipo de  interupcion
bsf PORTB,7
call RETARDO_20S
call RETARDO_5S
bcf PORTB,7
call RETARDO_1S
bsf PORTB,7
call RETARDO_20S
call RETARDO_5S
bcf PORTB,7
call RETARDO_1S
bsf PORTB,7
call RETARDO_5S
call RETARDO_2S
bcf INTCON,2
bsf INTCON,7
movlw d'0'
movwf TMR0
goto contador_unidad_minuto

END

Desconectado groundman

  • Colaborador
  • PIC24H
  • *****
  • Mensajes: 1870
    • www.ingeniopic.com
Re: reloj con pic 16f84a
« Respuesta #1 en: 08 de Enero de 2012, 13:11:45 »
hola pic_877a.deberias poner los herrores que te da.y asi seria mas facil ayudarte.o mejor.postea el programa.
Montando mi primera impresora 3D (Raprep Prusa i3)

Desconectado pic_877a

  • PIC16
  • ***
  • Mensajes: 172
Re: reloj con pic 16f84a
« Respuesta #2 en: 08 de Enero de 2012, 14:23:45 »
hola estos son los errores que me da al compilar, le adjunto  el pantallaso de los errores, espero su colobarcion.
gracias jose luis

Desconectado MGLSOFT

  • Moderador Local
  • DsPIC33
  • *****
  • Mensajes: 7912
Re: reloj con pic 16f84a
« Respuesta #3 en: 08 de Enero de 2012, 14:32:32 »
Seguramente no encuentra los simbolos definidos en ratardos.inc
Puede estar mal definida la ruta del archivo o estar llamado mal.
Revisalo o ponlo en la pisma carpeta del archivo principal...
Todos los dias aprendo algo nuevo, el ultimo día de mi vida aprenderé a morir....
Mi Abuelo.

Desconectado pic_877a

  • PIC16
  • ***
  • Mensajes: 172
Re: reloj con pic 16f84a
« Respuesta #4 en: 08 de Enero de 2012, 14:39:37 »
es decir yo apenas estoy empesando con estos micros y en con el mplab, por eso les pedi ayuda, me pueden ayudar a corregir estos errores, gracias jose luis

Desconectado MGLSOFT

  • Moderador Local
  • DsPIC33
  • *****
  • Mensajes: 7912
Re: reloj con pic 16f84a
« Respuesta #5 en: 08 de Enero de 2012, 15:01:44 »
Busca en la carpeta del proyecto un archivo llamado Retardos.inc
Este deberia poderse abrir desde un editor de textos, alli debieran estar las definiciones que no encuentra el compilador y que causan estos errores.
Si lo encuentras copialo en la misma carpeta del proyecto y deberian desaparecer los errores, y alli debiera compilar.
Los Warnings no son errores , solo advierten sobre los problemas de codigo que debieran ser resueltos...
Todos los dias aprendo algo nuevo, el ultimo día de mi vida aprenderé a morir....
Mi Abuelo.

Desconectado groundman

  • Colaborador
  • PIC24H
  • *****
  • Mensajes: 1870
    • www.ingeniopic.com
Re: reloj con pic 16f84a
« Respuesta #6 en: 08 de Enero de 2012, 17:50:36 »
las directivas include.yo siempre las pongo al final del programa.pruevalo.
Montando mi primera impresora 3D (Raprep Prusa i3)

Desconectado pic_877a

  • PIC16
  • ***
  • Mensajes: 172
Re: reloj con pic 16f84a
« Respuesta #7 en: 09 de Enero de 2012, 12:25:19 »
alguien me puede ayudar a resolver estos errores, ya que ustedes son los expertos yo apenas estoy empezando, se les agradeceria.
gracias
jose luis 

Desconectado Joshuermo

  • PIC10
  • *
  • Mensajes: 35
Re: reloj con pic 16f84a
« Respuesta #8 en: 09 de Enero de 2012, 14:58:22 »
hola, porque no anexas todos los archivos que hacen parte del proyecto para ver que esta fallando

saludos


jose

Desconectado pic_877a

  • PIC16
  • ***
  • Mensajes: 172
Re: reloj con pic 16f84a
« Respuesta #9 en: 09 de Enero de 2012, 16:18:36 »
como les dije  este es mi programa, he subido las imagenes de los errores a la hora de compilar, que mas puedo hacer, por eso ingrese aca, para ver si ustedes me pueden ayudar gracias

Desconectado todopic

  • Administrador
  • DsPIC30
  • *******
  • Mensajes: 3495
    • http://www.todopicelectronica.com.ar
Re: reloj con pic 16f84a
« Respuesta #10 en: 10 de Enero de 2012, 19:53:07 »
Hola, lo que falta, es la parte del programa retardos.inc  que significa INCLUDE.. o incluirlos en el programa..
el que te paso este programa, no te paso los retardos de tiempo al que hacen referencia los errores...

por ejemplo, cuando el programa llama al retardo
call RETARDO_10MS no encuentra a  RETARDO_10MS

porque está en los include que te faltan ok?
Firmat - Santa Fe - Argentina

www.TodoPic.net

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

Desconectado pic_877a

  • PIC16
  • ***
  • Mensajes: 172
Re: reloj con pic 16f84a
« Respuesta #11 en: 10 de Enero de 2012, 21:21:26 »
bueno gracias a los que me dieron una pista, gracias a todo, ahi les paso el programa,  para que ustedes le den solucion, por mi parte ya me aburri de este programa.
mil gracias que esten bien.

Desconectado todopic

  • Administrador
  • DsPIC30
  • *******
  • Mensajes: 3495
    • http://www.todopicelectronica.com.ar
Re: reloj con pic 16f84a
« Respuesta #12 en: 11 de Enero de 2012, 13:22:23 »
bueno gracias a los que me dieron una pista, gracias a todo, ahi les paso el programa,  para que ustedes le den solucion, por mi parte ya me aburri de este programa.
mil gracias que esten bien.

Hola, creo que empezaste mal!!  es un programa complejo para ser el primero!
aqui lo tienes , listo, cocinado y para complilar
Código: ASM
  1. list P=16F84A
  2.         include<P16F84A.inc>
  3. ;       include<RETARDOS.inc>
  4.  
  5.         cblock 0x0C
  6.         segundo_uni
  7.         segundo_dec
  8.         unidad
  9.         decena
  10.         centena
  11.         unidmil
  12.         digito1  ;minutos
  13.         digito2 ;munutos
  14.         digito3 ;hora
  15.         digito4 ;hora
  16.         digito5
  17.         digito6
  18.         alar_digito1; digito alarma minuto
  19.         alar_digito2; digito alarma minuto
  20.         alar_digito3; digito alarma hora
  21.         alar_digito4; digito alarma hora
  22.         contador
  23.         segundo
  24.         contador_interupcion  ; controla la  sincronizacion del reloj
  25.         controlador_interupcion;  se encarga de controlar las interupciones
  26.         controlador_cambio;
  27.         contador_alarma
  28.         activar ; controlar la sincronizacion del reloj
  29.         timbre_alarma
  30.         R_ContA ;retardos                                       ; Contadores para los retardos.
  31.         R_ContB ;retardos
  32.         R_ContC ;retardos
  33.         endc
  34.  
  35.         org 0
  36.         goto inicio
  37.         org 4
  38.         goto controlador
  39.  
  40. inicio ;configuracion  de pines
  41.         bsf  STATUS, RP0
  42.         movlw b'01110000'
  43.         movwf PORTB
  44.         movlw b'11110000'
  45.         movwf PORTA
  46.         movlw b'10100000'
  47.         movwf INTCON
  48.         movlw b'00000011'
  49.         movwf OPTION_REG
  50.         bcf STATUS,RP0
  51.         clrf segundo_uni
  52.         clrf segundo_dec
  53.         clrf unidad
  54.         clrf decena
  55.         clrf centena
  56.         clrf unidmil
  57.         clrf contador
  58.         clrf segundo
  59.         clrf activar
  60.         clrf contador_interupcion
  61.         clrf controlador_interupcion
  62.         clrf controlador_cambio
  63.         clrf digito6
  64.         clrf digito5
  65.         clrf timbre_alarma
  66.         movlw d'0'
  67.         movwf TMR0
  68.         ;inicializacion de los digitos del display
  69.         clrf digito4
  70.         clrf digito3
  71.         clrf digito2
  72.         clrf digito1
  73.         clrf alar_digito4
  74.         clrf alar_digito2
  75.         clrf alar_digito3
  76.         movlw d'1'
  77.         movwf alar_digito1
  78.         clrf contador_alarma
  79.         call visualizar
  80.  
  81. ; contador de segundos unidad
  82. contador_unidad_segundo
  83.         incf segundo_uni,f
  84.         movfw segundo_uni
  85.         sublw d'10'
  86.         btfsc STATUS,Z
  87.         call contador_decena_segundo
  88.         movfw segundo_uni
  89.         movwf digito5
  90.         call visualizar
  91.  
  92. ; contador de segundos decena
  93. contador_decena_segundo
  94.         clrf segundo_uni
  95.         clrf digito5
  96.         incf segundo_dec,f
  97.         movfw segundo_dec
  98.         sublw d'6'
  99.         btfsc STATUS,Z
  100.         call contador_unidad_minuto
  101.         movfw segundo_dec
  102.         movwf digito6
  103.         call visualizar
  104.  
  105. ;contador de unidades minuto
  106. contador_unidad_minuto
  107.         clrf segundo_dec
  108.         clrf digito6
  109.         incf unidad,f
  110.         movf unidad,w
  111.         sublw d'10'
  112.         btfsc  STATUS,Z
  113.         call contador_decena_minuto
  114.         movf unidad,w
  115.         movwf digito1
  116.         ;  es hora de alarma
  117.         movfw centena
  118.         subwf alar_digito3,0
  119.         btfsc STATUS,Z
  120.         call activar_alarma
  121.         ;
  122.         call visualizar
  123.  
  124. ;contador de decena minuto
  125. contador_decena_minuto
  126.         clrf unidad
  127.         clrf digito1
  128.         incf decena,f
  129.         movf decena,w
  130.         sublw d'6'
  131.         btfsc  STATUS,Z
  132.         call contador_unidad_hora
  133.         movf decena,w
  134.         movwf digito2
  135.         ;  es hora de alarma
  136.         movfw centena
  137.         subwf alar_digito3,0
  138.         btfsc STATUS,Z
  139.         call activar_alarma
  140.         ;
  141.         call visualizar
  142.  
  143. ;contador de unidad hora
  144. contador_unidad_hora
  145.         clrf decena
  146.         clrf digito2
  147. incrementar_hora
  148.         incf centena,f
  149.         movf centena,w
  150.         sublw d'10'
  151.         btfsc  STATUS,Z
  152.         call contador_decena_hora
  153.         movf centena,w
  154.         movwf digito3
  155.         movfw centena
  156.         sublw d'4'
  157.         btfss STATUS,Z
  158.         call visualizar
  159.         incf contador,1
  160.         movfw contador
  161.         sublw d'3'
  162.         btfss STATUS,Z
  163.         call visualizar
  164.         clrf digito3
  165.         clrf digito4
  166.         clrf centena
  167.         clrf unidmil
  168.         clrf contador
  169.         call visualizar
  170.  
  171. ;contador de decena hora
  172. contador_decena_hora
  173.         clrf centena
  174.         clrf digito3
  175.         incf unidmil,f
  176.         movf unidmil,w
  177.         sublw d'10'
  178.         btfsc  STATUS,Z
  179.         clrf unidmil
  180.         movf unidmil,w
  181.         movwf digito4
  182.         call visualizar
  183.  
  184. visualizar
  185.         movfw digito1
  186.         bcf PORTA,1 ;DESHABILTAR DECENAS
  187.         bcf PORTA,2 ;DESHABILTAR CENTENAS
  188.         bcf PORTA,3 ;DESHABILTAR UNIDAD DE MILLAR
  189.         movwf PORTB
  190.         bsf PORTA,0 ; HABILITAR UNIDADES
  191.         movfw digito2
  192.         bcf PORTA,0; DESHABILITAS UNIDADES
  193.         movwf PORTB
  194.         bsf PORTA,1; HABILITAS DECENAS
  195.         movfw digito3
  196.         bcf PORTA,1; DESHABILITAS DECENAS
  197.         movwf PORTB
  198.         bsf PORTA,2 ; HABILITO CENTENAS
  199.         movfw digito4
  200.         bcf PORTA,2 ;DESHABILITO CENTENAS
  201.         movwf PORTB
  202.         bsf PORTA,3 ; HABILITO UNIDAD DE MILLAR
  203.         btfsc PORTB,4
  204.         goto stop; detener el tiempo
  205.         movfw controlador_interupcion
  206.         sublw d'5'
  207.         btfsc STATUS,Z
  208.         goto activar_interupcion
  209.         goto visualizar
  210.  
  211. controlador ; se encarga de controlar la ocurenncia de un segundo
  212.         bsf INTCON,7
  213.         bcf INTCON,2
  214.         movlw d'0'
  215.         movwf TMR0
  216.         incf segundo,f
  217.         movfw segundo
  218.         sublw d'243'
  219.         btfss STATUS,Z
  220.         call visualizar
  221.         clrf segundo
  222.         call contador_unidad_segundo
  223.  
  224.  
  225. stop
  226.         bcf INTCON,7 ; deshabilitas cualquier tipo de interupcion
  227.         btfsc PORTB,4
  228.         call continuamos_stop
  229. activar_interupcion
  230.         bsf INTCON,7
  231.         bcf INTCON,2
  232.         movlw d'0'
  233.         movwf TMR0
  234.         clrf activar
  235.         clrf contador_interupcion
  236.         clrf controlador_interupcion
  237.         clrf controlador_cambio
  238.         goto visualizar  
  239.  
  240. continuamos_stop
  241.         movlw d'5'
  242.         movwf controlador_interupcion ; activamos el controlador
  243.         btfsc PORTB,5
  244.         goto pre_controlador
  245.         call RETARDO_10MS
  246.         btfsc PORTB,5
  247.         goto pre_controlador
  248.         incf contador_interupcion,f
  249. cambio
  250. bucle
  251.         btfss PORTB,5
  252.         goto bucle
  253.         call RETARDO_10MS
  254.         btfss PORTB,5
  255.         goto bucle
  256. sigue
  257.         movlw d'5'
  258.         movwf activar; activamos que se produjo un intento de camibo de horairo
  259.         movfw contador_interupcion
  260.         sublw d'6' ;;
  261.         btfsc STATUS,Z
  262.         call special
  263.         movfw contador_interupcion
  264.         sublw d'1'
  265.         btfsc STATUS,Z ; horas?
  266.         goto pre_incrementar_hora
  267.         movfw contador_interupcion
  268.         sublw d'2'
  269.         btfsc STATUS,Z  ; minutos?
  270.         goto pre_incrementar_minuto
  271.         movfw contador_interupcion
  272.         sublw d'3'
  273.         btfsc STATUS,Z ; mostrar alarma?
  274.         goto visualizar_especial
  275.         movfw contador_interupcion
  276.         sublw d'4'
  277.         btfsc STATUS,Z ; horas_alarma?
  278.         goto pre_incrementar_hora_alarma
  279.         movfw contador_interupcion
  280.         sublw d'5'
  281.         btfsc STATUS,Z ; minutos_alaram?
  282.         goto pre_incrementar_minuto_alarma
  283.  
  284. special
  285.         movlw d'1'
  286.         movwf contador_interupcion
  287.         return
  288. pre_controlador
  289.         movfw activar
  290.         sublw d'5'
  291.         btfss STATUS, Z
  292.         goto visualizar
  293.         goto sigue
  294.  
  295. pre_incrementar_hora  ; espera que se pulse para incrementar
  296.         btfsc PORTB,6
  297.         goto visualizar
  298.         call RETARDO_10MS
  299.         btfsc PORTB,6
  300.         goto visualizar
  301. bucle2
  302.         btfss PORTB,6
  303.         goto bucle2
  304.         goto incrementar_hora
  305.  
  306. pre_incrementar_minuto; espera que se pulse para incrementar
  307.         btfsc PORTB,6
  308.         goto visualizar
  309.         call RETARDO_10MS
  310.         btfsc PORTB,6
  311.         goto visualizar
  312. bulce3
  313.         btfss PORTB,6
  314.         goto bulce3
  315.         goto contador_unidad_minuto
  316.  
  317. visualizar_especial
  318.         movfw alar_digito1
  319.         bcf PORTA,1 ;DESHABILTAR DECENAS
  320.         bcf PORTA,2 ;DESHABILTAR CENTENAS
  321.         bcf PORTA,3 ;DESHABILTAR UNIDAD DE MILLAR
  322.         movwf PORTB
  323.         bsf PORTA,0 ; HABILITAR UNIDADES
  324.         movfw alar_digito2
  325.         bcf PORTA,0; DESHABILITAS UNIDADES
  326.         movwf PORTB
  327.         bsf PORTA,1; HABILITAS DECENAS
  328.         movfw alar_digito3
  329.         bcf PORTA,1; DESHABILITAS DECENAS
  330.         movwf PORTB
  331.         bsf PORTA,2 ; HABILITO CENTENAS
  332.         movfw alar_digito4
  333.         bcf PORTA,2 ;DESHABILITO CENTENAS
  334.         movwf PORTB
  335.         bsf PORTA,3 ; HABILITO UNIDAD DE MILLAR
  336.         btfsc PORTB,4
  337.         goto stop; detener el tiempo
  338.         movfw controlador_interupcion
  339.         sublw d'5'
  340.         btfsc STATUS,Z
  341.         goto activar_interupcion
  342.         goto visualizar_especial
  343.  
  344. ;contador de unidades minuto alarma
  345. contador_unidad_minuto_alarma
  346.         incf alar_digito1,f
  347.         movf alar_digito1,w
  348.         sublw d'10'
  349.         btfsc  STATUS,Z
  350.         call contador_decena_minuto_alarma
  351.         call visualizar_especial
  352.  
  353. ;contador de decena minuto
  354. contador_decena_minuto_alarma
  355.         clrf alar_digito1
  356.         incf alar_digito2,f
  357.         movf alar_digito2,w
  358.         sublw d'6'
  359.         btfsc  STATUS,Z
  360.         call contador_unidad_hora_alarma
  361.         call visualizar_especial
  362.  
  363. ;contador de unidad hora
  364. contador_unidad_hora_alarma
  365.         clrf alar_digito2
  366. incrementar_hora_alarma
  367.         incf alar_digito3,f
  368.         movf alar_digito3,w
  369.         sublw d'10'
  370.         btfsc  STATUS,Z
  371.         call contador_decena_hora_alarma
  372.         movfw alar_digito3
  373.         sublw d'4'
  374.         btfss STATUS,Z
  375.         call visualizar_especial
  376.         incf contador_alarma,1
  377.         movfw contador_alarma
  378.         sublw d'3'
  379.         btfss STATUS,Z
  380.         call visualizar_especial
  381.         clrf alar_digito3
  382.         clrf alar_digito4
  383.         clrf contador_alarma
  384.         call visualizar_especial
  385.  
  386. ;contador de decena hora
  387. contador_decena_hora_alarma
  388.         clrf alar_digito3
  389.         incf alar_digito4,f
  390.         movf alar_digito4,w
  391.         sublw d'10'
  392.         btfsc  STATUS,Z
  393.         clrf alar_digito4
  394.         call visualizar_especial
  395.  
  396. pre_incrementar_hora_alarma  ; espera que se pulse para incrementar
  397.         btfsc PORTB,6
  398.         goto visualizar_especial
  399.         call RETARDO_10MS
  400.         btfsc PORTB,6
  401.         goto visualizar_especial
  402. bucle4
  403.         btfss PORTB,6
  404.         goto bucle4
  405.         goto incrementar_hora_alarma
  406.  
  407. pre_incrementar_minuto_alarma; espera que se pulse para incrementar
  408.         btfsc PORTB,6
  409.         goto visualizar_especial
  410.         call RETARDO_10MS
  411.         btfsc PORTB,6
  412.         goto visualizar_especial
  413. bulce5
  414.         btfss PORTB,6
  415.         goto bulce5
  416.         goto contador_unidad_minuto_alarma
  417.  
  418. activar_alarma
  419.         movfw unidmil
  420.         subwf alar_digito4,0
  421.         btfss STATUS,Z
  422.         return
  423.         movfw decena
  424.         subwf alar_digito2,0
  425.         btfss STATUS,Z
  426.         return
  427.         movfw unidad
  428.         subwf alar_digito1,0
  429.         btfss STATUS,Z
  430.         return
  431.         bcf INTCON,7; deshabilitado todo tipo de  interupcion
  432.         bsf PORTB,7
  433.         call RETARDO_20S
  434.         call RETARDO_5S
  435.         bcf PORTB,7
  436.         call RETARDO_1S
  437.         bsf PORTB,7
  438.         call RETARDO_20S
  439.         call RETARDO_5S
  440.         bcf PORTB,7
  441.         call RETARDO_1S
  442.         bsf PORTB,7
  443.         call RETARDO_5S
  444.         call RETARDO_2S
  445.         bcf INTCON,2
  446.         bsf INTCON,7
  447.         movlw d'0'
  448.         movwf TMR0
  449.         goto contador_unidad_minuto
  450.  
  451.  
  452. Retardo_10micros                                ; La llamada "call" aporta 2 ciclos máquina.
  453.         nop                                                     ; Aporta 1 ciclo máquina.
  454.         nop                                                     ; Aporta 1 ciclo máquina.
  455.         nop                                                     ; Aporta 1 ciclo máquina.
  456.         nop                                                     ; Aporta 1 ciclo máquina.
  457.         nop                                                     ; Aporta 1 ciclo máquina.
  458. Retardo_5micros                                 ; La llamada "call" aporta 2 ciclos máquina.
  459.         nop                                                     ; Aporta 1 ciclo máquina.
  460. Retardo_4micros                                 ; La llamada "call" aporta 2 ciclos máquina.
  461.         return                                          ; El salto del retorno aporta 2 ciclos máquina.
  462. ;
  463. ; RETARDOS de 20 hasta 500 microsegundos ------------------------------------------------
  464. ;
  465. Retardo_500micros                               ; La llamada "call" aporta 2 ciclos máquina.
  466.         nop                                                     ; Aporta 1 ciclo máquina.
  467.         movlw   d'164'                          ; Aporta 1 ciclo máquina. Este es el valor de "K".
  468.         goto    RetardoMicros           ; Aporta 2 ciclos máquina.
  469. Retardo_200micros                               ; La llamada "call" aporta 2 ciclos máquina.
  470.         nop                                                     ; Aporta 1 ciclo máquina.
  471.         movlw   d'64'                           ; Aporta 1 ciclo máquina. Este es el valor de "K".
  472.         goto    RetardoMicros           ; Aporta 2 ciclos máquina.
  473. Retardo_100micros                               ; La llamada "call" aporta 2 ciclos máquina.
  474.         movlw   d'31'                           ; Aporta 1 ciclo máquina. Este es el valor de "K".
  475.         goto    RetardoMicros           ; Aporta 2 ciclos máquina.
  476. Retardo_50micros                                ; La llamada "call" aporta 2 ciclos máquina.
  477.         nop                                                     ; Aporta 1 ciclo máquina.
  478.         movlw   d'14'                           ; Aporta 1 ciclo máquina. Este es el valor de "K".
  479.         goto    RetardoMicros           ; Aporta 2 ciclos máquina.
  480. Retardo_20micros                                ; La llamada "call" aporta 2 ciclos máquina.
  481.         movlw   d'5'                            ; Aporta 1 ciclo máquina. Este es el valor de "K".
  482. ;
  483. ; El próximo bloque "RetardoMicros" tarda:
  484. ; 1 + (K-1) + 2 + (K-1)x2 + 2 = (2 + 3K) ciclos máquina.
  485. ;
  486. RetardoMicros
  487.         movwf   R_ContA                         ; Aporta 1 ciclo máquina.
  488. Rmicros_Bucle
  489.         decfsz  R_ContA,F                       ; (K-1)x1 cm (cuando no salta) + 2 cm (al saltar).
  490.         goto    Rmicros_Bucle           ; Aporta (K-1)x2 ciclos máquina.
  491.         return                                          ; El salto del retorno aporta 2 ciclos máquina.
  492. ;
  493. ;En total estas subrutinas tardan:
  494. ; - Retardo_500micros:  2 + 1 + 1 + 2 + (2 + 3K) = 500 cm = 500 µs. (para K=164 y 4 MHz).
  495. ; - Retardo_200micros:  2 + 1 + 1 + 2 + (2 + 3K) = 200 cm = 200 µs. (para K= 64 y 4 MHz).
  496. ; - Retardo_100micros:  2     + 1 + 2 + (2 + 3K) = 100 cm = 100 µs. (para K= 31 y 4 MHz).
  497. ; - Retardo_50micros :  2 + 1 + 1 + 2 + (2 + 3K) =  50 cm =  50 µs. (para K= 14 y 4 MHz).
  498. ; - Retardo_20micros :  2     + 1     + (2 + 3K) =  20 cm =  20 µs. (para K=  5 y 4 MHz).
  499. ;
  500. ; RETARDOS de 1 ms hasta 200 ms. --------------------------------------------------------
  501. ;
  502. Retardo_200ms                                   ; La llamada "call" aporta 2 ciclos máquina.
  503.         movlw   d'200'                          ; Aporta 1 ciclo máquina. Este es el valor de "M".
  504.         goto    Retardos_ms                     ; Aporta 2 ciclos máquina.
  505. Retardo_100ms                                   ; La llamada "call" aporta 2 ciclos máquina.
  506.         movlw   d'100'                          ; Aporta 1 ciclo máquina. Este es el valor de "M".
  507.         goto    Retardos_ms                     ; Aporta 2 ciclos máquina.
  508. Retardo_50ms                                    ; La llamada "call" aporta 2 ciclos máquina.
  509.         movlw   d'50'                           ; Aporta 1 ciclo máquina. Este es el valor de "M".
  510.         goto    Retardos_ms                     ; Aporta 2 ciclos máquina.
  511. Retardo_20ms                                    ; La llamada "call" aporta 2 ciclos máquina.
  512.         movlw   d'20'                           ; Aporta 1 ciclo máquina. Este es el valor de "M".
  513.         goto    Retardos_ms                     ; Aporta 2 ciclos máquina.
  514. RETARDO_10MS                                    ; La llamada "call" aporta 2 ciclos máquina.
  515.         movlw   d'10'                           ; Aporta 1 ciclo máquina. Este es el valor de "M".
  516.         goto    Retardos_ms                     ; Aporta 2 ciclos máquina.
  517. Retardo_5ms                                             ; La llamada "call" aporta 2 ciclos máquina.
  518.         movlw   d'5'                            ; Aporta 1 ciclo máquina. Este es el valor de "M".
  519.         goto    Retardos_ms                     ; Aporta 2 ciclos máquina.
  520. Retardo_2ms                                             ; La llamada "call" aporta 2 ciclos máquina.
  521.         movlw   d'2'                            ; Aporta 1 ciclo máquina. Este es el valor de "M".
  522.         goto    Retardos_ms                     ; Aporta 2 ciclos máquina.
  523. Retardo_1ms                                             ; La llamada "call" aporta 2 ciclos máquina.
  524.         movlw   d'1'                            ; Aporta 1 ciclo máquina. Este es el valor de "M".
  525. ;
  526. ; El próximo bloque "Retardos_ms" tarda:
  527. ; 1 + M + M + KxM + (K-1)xM + Mx2 + (K-1)Mx2 + (M-1) + 2 + (M-1)x2 + 2 =
  528. ; = (2 + 4M + 4KM) ciclos máquina. Para K=249 y M=1 supone 1002 ciclos máquina
  529. ; que a 4 MHz son 1002 µs = 1 ms.
  530. ;
  531. Retardos_ms
  532.         movwf   R_ContB                         ; Aporta 1 ciclo máquina.
  533. R1ms_BucleExterno
  534.         movlw   d'249'                          ; Aporta Mx1 ciclos máquina. Este es el valor de "K".
  535.         movwf   R_ContA                         ; Aporta Mx1 ciclos máquina.
  536. R1ms_BucleInterno
  537.         nop                                                     ; Aporta KxMx1 ciclos máquina.
  538.         decfsz  R_ContA,F                       ; (K-1)xMx1 cm (cuando no salta) + Mx2 cm (al saltar).
  539.         goto    R1ms_BucleInterno       ; Aporta (K-1)xMx2 ciclos máquina.
  540.         decfsz  R_ContB,F                       ; (M-1)x1 cm (cuando no salta) + 2 cm (al saltar).
  541.         goto    R1ms_BucleExterno       ; Aporta (M-1)x2 ciclos máquina.
  542.         return                                          ; El salto del retorno aporta 2 ciclos máquina.
  543. ;
  544. ;En total estas subrutinas tardan:
  545. ; - Retardo_200ms:      2 + 1 + 2 + (2 + 4M + 4KM) = 200007 cm = 200 ms. (M=200 y K=249).
  546. ; - Retardo_100ms:      2 + 1 + 2 + (2 + 4M + 4KM) = 100007 cm = 100 ms. (M=100 y K=249).
  547. ; - Retardo_50ms :      2 + 1 + 2 + (2 + 4M + 4KM) =  50007 cm =  50 ms. (M= 50 y K=249).
  548. ; - Retardo_20ms :      2 + 1 + 2 + (2 + 4M + 4KM) =  20007 cm =  20 ms. (M= 20 y K=249).
  549. ; - Retardo_10ms :      2 + 1 + 2 + (2 + 4M + 4KM) =  10007 cm =  10 ms. (M= 10 y K=249).
  550. ; - Retardo_5ms  :      2 + 1 + 2 + (2 + 4M + 4KM) =   5007 cm =   5 ms. (M=  5 y K=249).
  551. ; - Retardo_2ms  :      2 + 1 + 2 + (2 + 4M + 4KM) =   2007 cm =   2 ms. (M=  2 y K=249).
  552. ; - Retardo_1ms  :      2 + 1     + (2 + 4M + 4KM) =   1005 cm =   1 ms. (M=  1 y K=249).
  553. ;
  554. ; RETARDOS de 0.5 hasta 20 segundos ---------------------------------------------------
  555. ;
  556. RETARDO_20S                                             ; La llamada "call" aporta 2 ciclos máquina.
  557.         movlw   d'200'                          ; Aporta 1 ciclo máquina. Este es el valor de "N".
  558.         goto    Retardo_1Decima         ; Aporta 2 ciclos máquina.
  559. RETARDO_10S                                             ; La llamada "call" aporta 2 ciclos máquina.
  560.         movlw   d'100'                          ; Aporta 1 ciclo máquina. Este es el valor de "N".
  561.         goto    Retardo_1Decima         ; Aporta 2 ciclos máquina.
  562. RETARDO_5S                                              ; La llamada "call" aporta 2 ciclos máquina.
  563.         movlw   d'50'                           ; Aporta 1 ciclo máquina. Este es el valor de "N".
  564.         goto    Retardo_1Decima         ; Aporta 2 ciclos máquina.
  565. RETARDO_2S                                              ; La llamada "call" aporta 2 ciclos máquina.
  566.         movlw   d'20'                           ; Aporta 1 ciclo máquina. Este es el valor de "N".
  567.         goto    Retardo_1Decima         ; Aporta 2 ciclos máquina.
  568. RETARDO_1S                                              ; La llamada "call" aporta 2 ciclos máquina.
  569.         movlw   d'10'                           ; Aporta 1 ciclo máquina. Este es el valor de "N".
  570.         goto    Retardo_1Decima         ; Aporta 2 ciclos máquina.
  571. Retardo_500ms                                   ; La llamada "call" aporta 2 ciclos máquina.
  572.         movlw   d'5'                            ; Aporta 1 ciclo máquina. Este es el valor de "N".
  573. ;
  574. ; El próximo bloque "Retardo_1Decima" tarda:
  575. ; 1 + N + N + MxN + MxN + KxMxN + (K-1)xMxN + MxNx2 + (K-1)xMxNx2 +
  576. ;   + (M-1)xN + Nx2 + (M-1)xNx2 + (N-1) + 2 + (N-1)x2 + 2 =
  577. ; = (2 + 4M + 4MN + 4KM) ciclos máquina. Para K=249, M=100 y N=1 supone 100011
  578. ; ciclos máquina que a 4 MHz son 100011 µs = 100 ms = 0,1 s = 1 décima de segundo.
  579. ;
  580. Retardo_1Decima
  581.         movwf   R_ContC                         ; Aporta 1 ciclo máquina.
  582. R1Decima_BucleExterno2
  583.         movlw   d'100'                          ; Aporta Nx1 ciclos máquina. Este es el valor de "M".
  584.         movwf   R_ContB                         ; Aporta Nx1 ciclos máquina.
  585. R1Decima_BucleExterno
  586.         movlw   d'249'                          ; Aporta MxNx1 ciclos máquina. Este es el valor de "K".
  587.         movwf   R_ContA                         ; Aporta MxNx1 ciclos máquina.
  588. R1Decima_BucleInterno          
  589.         nop                                                     ; Aporta KxMxNx1 ciclos máquina.
  590.         decfsz  R_ContA,F                       ; (K-1)xMxNx1 cm (si no salta) + MxNx2 cm (al saltar).
  591.         goto    R1Decima_BucleInterno   ; Aporta (K-1)xMxNx2 ciclos máquina.
  592.         decfsz  R_ContB,F                       ; (M-1)xNx1 cm (cuando no salta) + Nx2 cm (al saltar).
  593.         goto    R1Decima_BucleExterno   ; Aporta (M-1)xNx2 ciclos máquina.
  594.         decfsz  R_ContC,F                       ; (N-1)x1 cm (cuando no salta) + 2 cm (al saltar).
  595.         goto    R1Decima_BucleExterno2  ; Aporta (N-1)x2 ciclos máquina.
  596.         return                                          ; El salto del retorno aporta 2 ciclos máquina.
  597. ;
  598. ;En total estas subrutinas tardan:
  599. ; - Retardo_20s:        2 + 1 + 2 + (2 + 4N + 4MN + 4KMN) = 20000807 cm = 20 s.
  600. ;                       (N=200, M=100 y K=249).
  601. ; - Retardo_10s:        2 + 1 + 2 + (2 + 4N + 4MN + 4KMN) = 10000407 cm = 10 s.
  602. ;                       (N=100, M=100 y K=249).
  603. ; - Retardo_5s:         2 + 1 + 2 + (2 + 4N + 4MN + 4KMN) =  5000207 cm =  5 s.
  604. ;                       (N= 50, M=100 y K=249).
  605. ; - Retardo_2s:         2 + 1 + 2 + (2 + 4N + 4MN + 4KMN) =  2000087 cm =  2 s.
  606. ;                       (N= 20, M=100 y K=249).
  607. ; - Retardo_1s:         2 + 1 + 2 + (2 + 4N + 4MN + 4KMN) =  1000047 cm =  1 s.
  608. ;                       (N= 10, M=100 y K=249).
  609. ; - Retardo_500ms:      2 + 1     + (2 + 4N + 4MN + 4KMN) =   500025 cm = 0,5 s.
  610. ;                       (N=  5, M=100 y K=249).
  611.  
  612. ;       ===================================================================
  613. ;         Del libro "MICROCONTROLADOR PIC16F84. DESARROLLO DE PROYECTOS"
  614. ;         E. Palacios, F. Remiro y L. López.           www.pic16f84a.com
  615. ;         Editorial Ra-Ma.  www.ra-ma.es
  616. ;       ===================================================================
  617.  
  618.  
  619.        
  620.  
  621.         END

esta probado y no salen errores... lo cual, no indica que el programa funcione...  :mrgreen:
Firmat - Santa Fe - Argentina

www.TodoPic.net

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

Desconectado pic_877a

  • PIC16
  • ***
  • Mensajes: 172
Re: reloj con pic 16f84a
« Respuesta #13 en: 11 de Enero de 2012, 19:02:39 »
hola todopic  gracias por tu ayuda. muy gentil, cuando lo termine subo las el  pcb, y la simulacion.
gracias
jose luis          

Desconectado pic_877a

  • PIC16
  • ***
  • Mensajes: 172
Re: reloj con pic 16f84a
« Respuesta #14 en: 15 de Enero de 2012, 11:05:27 »
error en  la simulacion, hola todo pic, te adjunto este error en la simulacion, como se podria solucionar?
espero tu colaboracion,
gracias jose luis


 

anything