Autor Tema: Como hacer parpadear a un led  (Leído 2685 veces)

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

Desconectado Gianky011077

  • PIC10
  • *
  • Mensajes: 5
Como hacer parpadear a un led
« en: 05 de Mayo de 2005, 23:55:00 »
Hola a todos..espero que ma ayuden

Necesito hacer parpadear a un led por el puerto B, utilizando rutina de retardo y bucles anidados,,,,,,pero sin usar interrupciones(osea nada por el puerto A)........he hecho algo de la programacion a ver si alguien me dice o si lo prueba para ver si voy por buen camino o que es lo que le falta........la verdad es que cuando lo depuro con Mplab  me salen errores......ademas trabajo en win98.

                list p=16F84A
   #include <p16f84A.inc>   

temp0   equ   0x0C
temp1   equ   0x0F
temp2   equ   0X0E

org   0

pre:
      bsf   STATUS,   5
      bcf   TRISA,   0
      bcf   STATUS,   5

inicio:
      bsf   PORTA,   0
      call   retardo
      bcf   PORTA,   0
      call   retardo
      goto   inicio

retardo:
      call   anid1
      decf   temp0,   1
      btfss   STATUS,   2
      goto   retardo
      return

anid1:
      movlw   d"100"
      movwf   temp1

ampre1:
      call   anid2
      decf   temp1,   1
      btfss   STATUS,   2
      goto   anid1
      return

anid2:
      movlw   d"100"
      movwf   temp2

ampre2:
      decf   temp2,   1
      btfss   STATUS,   2
      goto   anid2
      return
      end




Bueno eso es todo lo que hice   a ver si alguien lo corrige......gracias .....

Desconectado adrian2a1

  • Colaborador
  • PIC12
  • *****
  • Mensajes: 75
RE: Como hacer parpadear a un led
« Respuesta #1 en: 06 de Mayo de 2005, 01:52:00 »
Te pongo abajo los fallos de tu programa. Lo he probado corregido y ya funciona.

Codigo:
list p=16F84A
#include <p16f84A.inc>

__CONFIG   _CP_OFF &  _WDT_OFF & _PWRTE_ON & _XT_OSC  ; Línea nueva.
temp0 equ 0x0C

.... .... .... ; Hasta aquí todo igual que el original.

btfss STATUS, 2
goto ampre1    ; Línea cambiada.
return

anid2:
movlw d"100"
movwf temp2

ampre2:
decf temp2, 1
btfss STATUS, 2
goto ampre2    ; Línea cambiada
return
end


De todas formas este programa es un poco "tortuoso", te envio el procedimiento que yo utilizo sacado de un libro, que pienso es mucho más eficaz.

Codigo:
;************************************ Retardo_01.asm ************************************
;
;   ===================================================================
;     Del libro "MICROCONTROLADOR PIC16F84. DESARROLLO DE PROYECTOS"
;     E. Palacios, F. Remiro y L. López.   www.pic16f84a.com
;      Editorial Ra-Ma.  www.ra-ma.es
;   ===================================================================
;
; El LED conectado a la línea 0 del puerto de salida se enciende durante 400 ms y se
; apaga durante 300 ms.
;
; ZONA DE DATOS **********************************************************************

   LIST      P=16F84A
   INCLUDE  <P16F84A.INC>
   __CONFIG   _CP_OFF &  _WDT_OFF & _PWRTE_ON & _XT_OSC

   CBLOCK  0x0C      ; En esta posición empieza la RAM de usuario.
   ENDC

#DEFINE  LED   PORTB,0

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

   ORG   0
Inicio
   bsf   STATUS,RP0   ; Acceso al Banco 1.
   bcf   LED      ; Línea del LED configurada como salida.
   bcf   STATUS,RP0   ; Acceso al Banco 0.
Principal
   bsf   LED      ; Enciende el LED
   call   Retardo_200ms   ; durante la suma de este tiempo.
   call   Retardo_200ms
   bcf   LED      ; Lo apaga durante la suma de los siguientes
   call   Retardo_200ms   ; retardos.
   call   Retardo_100ms
   goto    Principal
   
; Subrutinas "Retardo_200ms" y "Retardo_100ms"-------------------------------------------
;
   CBLOCK
   R_ContA         ; Contadores para los retardos.
   R_ContB
   ENDC

Retardo_200ms         ; La llamada "call" aporta 2 ciclos máquina.
   movlw   d"200"      ; Aporta 1 ciclo máquina. Este es el valor de "M".
   goto   Retardos_ms   ; Aporta 2 ciclos máquina.
Retardo_100ms         ; La llamada "call" aporta 2 ciclos máquina.
   movlw   d"100"      ; Aporta 1 ciclo máquina. Este es el valor de "M".
   goto   Retardos_ms   ; Aporta 2 ciclos máquina.
Retardo_1ms         ; La llamada "call" aporta 2 ciclos máquina.
   movlw   d"1"      ; Aporta 1 ciclo máquina. Este es el valor de "M".
;
; El próximo bloque "Retardos_ms" tarda:
; 1 + M + M + KxM + (K-1)xM + Mx2 + (K-1)Mx2 + (M-1) + 2 + (M-1)x2 + 2 =
; = (2 + 4M + 4KM) ciclos máquina. Para K=249 y M=1 supone 1002 ciclos máquina
; que a 4 MHz son 1002 µs = 1 ms.
;
Retardos_ms
   movwf   R_ContB      ; Aporta 1 ciclo máquina.
R1ms_BucleExterno
   movlw   d"249"      ; Aporta Mx1 ciclos máquina. Este es el valor de "K".
   movwf   R_ContA      ; Aporta Mx1 ciclos máquina.
R1ms_BucleInterno
   nop         ; Aporta KxMx1 ciclos máquina.
   decfsz   R_ContA,F   ; (K-1)xMx1 cm (cuando no salta) + Mx2 cm (al saltar).
   goto   R1ms_BucleInterno    ; Aporta (K-1)xMx2 ciclos máquina.
   decfsz   R_ContB,F   ; (M-1)x1 cm (cuando no salta) + 2 cm (al saltar).
   goto   R1ms_BucleExterno ; Aporta (M-1)x2 ciclos máquina.
   return         ; El salto de retorno aporta 2 ciclos máquina.
;
;En total estas subrutinas tardan:
; - Retardo_200ms:   2 + 1 + 2 + (2 + 4M + 4KM) = 200007 cm = 200 ms. (M=200 y K=249).
; - Retardo_100ms:   2 + 1 + 2 + (2 + 4M + 4KM) = 100007 cm = 100 ms. (M=100 y K=249).
; - Retardo_1ms  :   2 + 1     + (2 + 4M + 4KM) =   1005 cm =   1 ms. (M=  1 y K=249).

   END






Desconectado antoniof

  • Moderadores
  • PIC24F
  • *****
  • Mensajes: 729
RE: Como hacer parpadear a un led
« Respuesta #2 en: 06 de Mayo de 2005, 18:41:00 »
Buenas.

Aqui va otra forma de hacer un retardo con bucles anidados. Este dura un segundo.

Codigo:
;DELAY1S Retardo de 1 seg @ 4MHz
;Retardo = ((256*3+3)*256+3)*5 = 0.986895 seg

delay1s   clrf   contador1
   clrf   contador2
   movlw   0x05
   movwf   contador3
dly1   decfsz   contador1,f
   goto   dly1
   decfsz   contador2,f
   goto   dly1
   decfsz   contador3,f
   goto   dly1
   return

Desconectado Gianky011077

  • PIC10
  • *
  • Mensajes: 5
RE: Como hacer parpadear a un led
« Respuesta #3 en: 09 de Mayo de 2005, 08:03:00 »
Hola a todos......el ultimo codigo que me mandaron en que parte lo coloco......reemplaza a todo lo que estaba haciendo ..............o en lugar de que va.............

Disculpen .........pero es que soy nuevo en esto...........

Gracias por las ayudas......................RebotadoRebotadoRebotadoRebotadoRebotado

Desconectado todopic

  • Administrador
  • DsPIC30
  • *******
  • Mensajes: 3495
    • http://www.todopicelectronica.com.ar
RE: Como hacer parpadear a un led
« Respuesta #4 en: 09 de Mayo de 2005, 10:21:00 »
Hola, en tu programita, luego desde donde figura RETARDO, ya no va mas nada.... y lo reemplazas por el retardo que te envio  Antoniof, que en este caso se llama delay1s

si quieres, a la subrutina le colocas arriba el nombre retardo....
recuerda colocar el END al final, para que no te de error al compilar....
ejercicios similares encuentras en www.todopic.com.ar en la seccion asembler...

suerte!

Norberto
Firmat - Santa Fe - Argentina

www.TodoPic.net

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

Desconectado Gianky011077

  • PIC10
  • *
  • Mensajes: 5
RE: Como hacer parpadear a un led
« Respuesta #5 en: 09 de Mayo de 2005, 16:10:00 »
Gracias de verdad por todas las sugerencias y ayudas.......me sirvio un monton.

Tengo otra consulta a ver si alguien me ayuda de nuevo.....les estoy poniendo un grabador serial (trabaja con IC-Prog)....pero todavia no lo utilizo, mejor dicho todavi no lo armo.......a ver si alguno lo prueba antes que yo.... a ver si me dice si funciona o no..........la verda es que estoy buscando un grabador serial.....y me pasaron este......espero sus comentario a cerca de este grabador...   es para el PIC 16f84A

La direccion de donde la saque es esta::::  Ojala que puedan entrar.......espero sus comentarios

http://latam.msnusers.com/istene/Documentos/Circuitos%20Digitales%20II/PROGRAMADOR%20DE%20PIC%2016F84A%2Egif?did=1&t=6WEp*ERLBBTX3YoBLWlkDX9gVZSgecet04P*8QusjRAg62NX4ziV9*dlnF4xM5kKEsSdxawnADxzdz9j7ifh1*Ww$$&p=6P27BXpcHF7yPgQfr!X4SoMqZd5S6CpaBG93k2a0r!r6CESvOllOmnejenyWE2nfyIRWzO8OfyiGLljEGBx8X!Q23xdMN4tKZv3Stx5hnZ7uWJC*AxrJw!jOGRWE36Xj5s!JPWlK50AlgjjvnXhfE7ASgm!aRaqg7cqyJDzJY0*fWF7F0YA7RCkK5GW78kNr2urX8zOJar4RUixe!exHmI645q8wa3H0js

Desconectado adrian2a1

  • Colaborador
  • PIC12
  • *****
  • Mensajes: 75
RE: Como hacer parpadear a un led
« Respuesta #6 en: 09 de Mayo de 2005, 16:23:00 »
Ese programador está basado en el básico JDM. Lo he probado y en algunos ordenadores funciona bien y en otros no, (en los portátiles no funciona nunca). Puedes montarlo en una ProtoBoard y probarlo con tu ordenador a ver que tal, eso sí, ten muchísimo cuidado con las conexiones del conector.

También te sugiero que adquieras un programador TE-20SE que es el mismo que tu mencionas pero mejorado y vale muy barato.

También te puedes pasar por la sección de PROGRAMADORES de este mismo foro y ahí encontrarás un montón de ideas.

Salu2.