• Domingo 17 de Noviembre de 2024, 00:18

Autor Tema:  Necesito Colaboración Con Un Trabajo 16f84a  (Leído 1980 veces)

sancende

  • Nuevo Miembro
  • *
  • Mensajes: 1
    • Ver Perfil
Necesito Colaboración Con Un Trabajo 16f84a
« en: Miércoles 2 de Enero de 2008, 23:21 »
0
Hola a todos.
Solicito vuestra ayuda para hacer un trabajo.
Estoy intentando hacer lo siguiente con un pic 16F84A  en modo RC.
Tengo que iluminar 6 leds de tal modo que partiendo de todos los leds apagados, se encienda el primero, haga una pausa de 1 segundo aprox. y permanece encendido, luego el segundo, luego el tercero, luego el cuarto y luego el quinto permaneciendo los cinco encendidos.

Hago una pausa de 1 segundo y apago todos y enciendo el sexto durante 8 segundos.

Lo apago y se termina la secuencia hasta que manualmente haga un reset o decida mecanicamente iniciar de nuevo.

¿Como lo hago?

Me he vuelto loco buscando cosas, secuenciadores, etc, pero hacen un ciclo sin fin.

Este es el que estoy modificando:

CUENTA1 equ 0Ch
CUENTA2 EQU 0DH
CUENTA3 EQU 0EH
STATUS EQU 03H
PORTA EQU 05H
PORTB EQU 06H
TRISA EQU 05H
TRISB EQU 06H
F EQU 1
W EQU 0

#DEFINE ON1 BSF PORTB,0
#DEFINE ON2 BSF PORTB,1
#DEFINE ON3 BSF PORTB,2
#DEFINE ON4 BSF PORTB,3
#DEFINE ON5 BSF PORTB,4
#DEFINE ON6 BSF PORTB,5
#DEFINE ON7 BSF PORTB,6
#DEFINE ON8 BSF PORTB,7
#DEFINE ON9 BSF PORTA,0
#DEFINE ON10 BSF PORTA,1
#DEFINE ON11 BSF PORTA,2
#DEFINE ON12 BSF PORTA,3
#DEFINE ON13 BSF PORTA,4
#DEFINE ONTODO CALL ENCIE

#DEFINE OFF1 BCF PORTB,0
#DEFINE OFF2 BCF PORTB,1
#DEFINE OFF3 BCF PORTB,2
#DEFINE OFF4 BCF PORTB,3
#DEFINE OFF5 BCF PORTB,4
#DEFINE OFF6 BCF PORTB,5
#DEFINE OFF7 BCF PORTB,6
#DEFINE OFF8 BCF PORTB,7
#DEFINE OFF9 BCF PORTA,0
#DEFINE OFF10 BCF PORTA,1
#DEFINE OFF11 BCF PORTA,2
#DEFINE OFF12 BCF PORTA,3
#DEFINE OFF13 BCF PORTA,4
#DEFINE OFFTODO CALL APAGA

#DEFINE ESPERA CALL DELAY
#DEFINE ESPERA1 CALL DELAY1
#DEFINE ESPERA2 CALL DELAY2
#DEFINE ESPERA3 CALL DELAY4
#DEFINE ESPERA4 CALL DELAY3

#DEFINE INVIERTE CALL INV

 ORG 00H
 GOTO EMPI

EMPI CLRF PORTA
 CLRF PORTB
 BSF STATUS,5
 CLRF TRISA
 CLRF TRISB
 BCF STATUS,5
INICIO



;********************************************************************************************
;********INICIO SECUENCIA***********************************************
;--------------------------------------------------------------------------------------------
OFFTODO
ESPERA
ON1
ESPERA
ON2
ESPERA
ON3
ESPERA
OFF1
OFF2
OFF3
ESPERA
ON1
ON2
ON3
ESPERA

;--------------------------------------------------------------------------------------------
;****************FIN DE LA SECUENCIA*********************************************************
;********************************************************************************************

 GOTO INICIO

DELAY3 MOVLW 80H ;4SEG
 GOTO DEL
DELAY4 MOVLW 60H ;3SEG
 GOTO DEL
DELAY2 MOVLW 40H ;2SEG
 GOTO DEL
DELAY1 MOVLW 20H ;1SEG
 GOTO DEL
DELAY MOVLW 010H ;.5SEG
DEL MOVWF CUENTA1
ACA1 MOVLW 0FFH
 MOVWF CUENTA2
ACA DECFSZ CUENTA2
 GOTO ACA
 DECFSZ CUENTA1
 GOTO ACA1
 RETURN

APAGA CLRF PORTA
 CLRF PORTB
 RETURN

ENCIE MOVLW 0FFH
 MOVWF PORTA
 MOVWF PORTB
 RETURN

INV MOVLW 0FFH
 XORWF PORTA,F
 XORWF PORTB,F
 RETURN
 END


--------------------------------------
Saludos

kagiva

  • Nuevo Miembro
  • *
  • Mensajes: 1
    • Ver Perfil
Re: Necesito Colaboración Con Un Trabajo 16f84a
« Respuesta #1 en: Viernes 15 de Febrero de 2008, 01:28 »
0
Hola! Amigo Sancende.

 El código que sigue enciende una línea de 8 LEDs, quizás te sirva, en este caso, lleva
un pulsador con el cual cada vez que lo presionas enciende un LED y en la siguiente
presión se añade un LED más, hasta completar los 8, luego se apagan todos salvo el
primero que permanece encendido. Este emplea un PIC16F84A.

 
Código: Text
  1.  
  2. &#59;    Pulsador sin rebotes enciende un LED       ^
  3. ; Que hace => Encender un LED, lo apaga y enciende el siguiente    ^
  4. ; hasta el LED 8, luego vuelve a emepzar.         ^
  5. ;                   ^
  6. ;^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  7. ;
  8. STATUS    equ     h'0003'
  9. OPTION_REG   equ     h'0081'
  10. PORTA    equ     h'0005'&#59; define puerto A
  11. PORTB    equ    h'0006'&#59; define puerto B
  12.  
  13. ; Estos estan definidos en #include <P16F84a.INC>  
  14. ;W  equ  h'0000'
  15. ;f  equ  h'0001'
  16. ;--------------- Encabezado -------------
  17.  
  18.   List P=PIC16F84a
  19.   #include <P16F84A.INC>&#59;Inclusion de fichero de etiquetas
  20.  
  21. ;
  22.   ORG 0x00
  23.  
  24. Inicio:  BSF 03,5&#59;Ir a pagina1 para ajustar los puertos
  25.         MOVLW 04h&#59;W se Carga con 04 = 0000 0100b
  26.         MOVWF 05h&#59;Hace RA2 la entrada para el botón A
  27.         MOVLW 00h&#59;Pone 00 en W
  28.         MOVWF 06h&#59;Hace toda RB líneas de salida
  29.         BCF 03,5&#59;Ir a Pagina0 para seguir programa
  30.  
  31. ;  Los ánodos de los LED's se conectan al positivo, de esta forma
  32. ;  un nivel alto en el puerto B apaga los LEDs.
  33. ;  Por tanto, para encender un LED aplicamos un 0 a la salida  
  34. ;  que deseamos.
  35.  
  36.   CLRF PORTB  
  37.   MOVLW .255  &#59;Apaga los LEDs
  38.   MOVWF PORTB&#59;en el puerto B
  39.  
  40. SwLoop1:  BTFSC 05,2&#59;¿esta apretado el pulsador (bit2)?
  41.         GOTO SwLoop1&#59;NO. Ir a SwLoop1
  42.   CALL Delay&#59;Llamada a rutina de Retardo
  43.  
  44. SwLoop2:
  45.   BTFSS 05,2&#59;¿esta apretado el pulsador?
  46.         GOTO SwLoop2&#59;No. Ir a SwLoop2
  47.   DECFSZ  PORTB,1
  48.   BCF STATUS,C&#59; limpio el bit C del STATUS para no intro. error
  49.   RRF PORTB,1
  50.   CALL Delay&#59;Llamada a rutina de Retardo  
  51.         GOTO SwLoop1
  52.  
  53. Delay:  DECFSZ 1Bh,1&#59; Retardo
  54.         GOTO Delay
  55.         DECFSZ 1Ch,1
  56.         GOTO Delay
  57.         RETURN
  58.  
  59.         END
  60.  
  61.  

 Espero que te sirva para empezar a practicar. Si necesitas el ejemplo en Proteus, dímelo.

  Saludos.