Autor Tema: Problemas con subrutinas (y más) 16f84a Ayuda  (Leído 1977 veces)

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

Desconectado taniyamashimura

  • PIC10
  • *
  • Mensajes: 6
Problemas con subrutinas (y más) 16f84a Ayuda
« en: 29 de Enero de 2012, 00:46:03 »
Hola Buenas Noches Amigos!

Les escribo ya que tengo que hacer un proyecto pero no quiere funcionar, de la forma que lo diseñé (si se puede decir así)
es que hago subrutinas como la siguiente y el programa no funciona bien, se vuelve como loc.o....
 :(

call      secuencia1
call      secuencia2
call      secuenciaN-ésima

secuencia1
        led1on
        call    delay
        led2On
        call     delay
        clrf     porta
         clrf      portb
        return
secuencia2
        led5On
        call      delay
        led6On
         call     delay
         clrf   porta
         clrf    portb
         return
.
.
.
         END

necesito ayuda! por favor

Desconectado BrunoF

  • Administrador
  • DsPIC30
  • *******
  • Mensajes: 3865
Re: Problemas con subrutinas (y más) 16f84a Ayuda
« Respuesta #1 en: 29 de Enero de 2012, 00:50:11 »
Podrías poner todo el código por favor?

Saludos.
"All of the books in the world contain no more information than is broadcast as video in a single large American city in a single year. Not all bits have equal value."  -- Carl Sagan

Sólo responderé a mensajes personales, por asuntos personales. El resto de las consultas DEBEN ser escritas en el foro público. Gracias.

Desconectado taniyamashimura

  • PIC10
  • *
  • Mensajes: 6
Re: Problemas con subrutinas (y más) 16f84a Ayuda
« Respuesta #2 en: 29 de Enero de 2012, 00:57:43 »
este es el programa...
y me falta hacer muchas cosas que no ser como hacer, como repetir la secuencia3 100 veces :(


;PROGRAMA QUE ENCIENDE leds al pulsar RA4
   __CONFIG _CP_OFF & _WDT_OFF & _PWRTE_ON & _HS_OSC
   LIST   P=16F84A
   INCLUDE   <P16F84A.INC>
   RADIX   HEX
;************DECLARACION DE VARIABLES*********
status   equ   0X03   
porta   equ   0X05
trisa   equ   0x05
portb   equ   0X06
trisb   equ   0x06
#define   led1On   bsf   porta,0
#define   led1Off   bcf   porta,0
#define   led2On   bsf   porta,1
#define   led2Off   bcf   porta,1
#define   led3On   bsf   porta,2
#define   led3Off   bcf   porta,2
#define   led4On   bsf   porta,3
#define   led4Off   bcf   porta,3
#define   led5On   bsf   portb,0
#define   led5Off   bcf   portb,0
#define   led6On   bsf   portb,1
#define   led6Off   bcf   portb,1
#define   led7On   bsf   portb,2
#define   led7Off   bcf   portb,2
#define   led8On   bsf   portb,3
#define   led8Off   bcf   portb,3
#define   led9On   bsf   portb,4
#define   led9Off   bcf   portb,4
#define   led10On   bsf   portb,5
#define   led10Off   bcf   portb,5
#define   led11On   bsf   portb,6
#define   led11Off   bcf   portb,6
#define   led12On   bsf   portb,7
#define   led12Off   bcf   portb,7
d1   equ   0x0c
d2   equ   0x0d
d3   equ   0x0e
d4   equ   0x10
d5   equ   0x11
d6   equ   0x12
d7   equ   0x13
d8   equ   0x14
d9   equ   0x15
d10   equ   0x16
d11   equ   0x17
d12   equ   0x18

;*********CONFIGURACION DE PUERTOS***********
   ORG      0X00
   bsf      status,5
   movlw   b'00010000'
   movwf   trisa
   movlw   b'00000000'
   movwf   trisb
   bcf   status,5
   clrf   porta
   clrf   portb
   
;****************INICIO DEL PROGRAMA*********
inicio
   btfsc   porta,4
   goto inicio
   call   secuencia1
   call   secuencia2
   call   secuencia3
   call   secuencia4
   call   secuencia5
secuencia1
   led1On
   led7On
   call   delay250ms
   led1Off
   led7Off
   led2On
   led8On
   call   delay250ms
   led2Off
   led8Off
   led3On
   led9On
   call   delay250ms
   led3Off
   led9Off
   led4On
   led10On
   call   delay250ms
   led4Off
   led10Off
   led5On
   led11On
   call   delay250ms
   led5Off
   led11Off
   led6On
   led12On
   call   delay250ms
   clrf   porta
   clrf   portb
   return
secuencia2
   movlw   b'00000011'
   movwf   porta
   movlw   b'00001100'
   movwf   portb
   call   delay150ms
   clrf   porta
   clrf   portb
   movlw   b'00001100'
   movwf   porta
   movlw   b'00110000'
   movwf   portb
   call   delay150ms
   clrf   porta
   clrf   portb
   movlw   b'11000011'
   movwf   portb
   call   delay150ms
   clrf   porta
   clrf   portb
   return
secuencia3
   movlw   b'00001111'
   movwf   porta
   movlw   b'11111111'
   movwf   portb
   call   delay100ms
   clrf   porta
   clrf   portb
   return
secuencia4
   led1On
   call   delay300ms
   led1Off
   led2On
   call   delay300ms
   led2Off
   led3On
   call   delay300ms
   led3Off
   led4On
   call   delay300ms
   led4Off
   led5On
   call   delay300ms
   led5Off
   led6On
   call   delay300ms
   led6Off
   led7On
   call   delay300ms
   led7Off
   led8On
   call   delay300ms
   led8Off
   led9On
   call   delay300ms
   led9Off
   led10On
   call   delay300ms
   clrf   porta
   clrf   portb
   return
secuencia5
   led10Off
   call   delay300ms
   led9On
   call   delay300ms
   led9Off
   led8On
   call   delay300ms
   led8Off
   led7On
   call   delay300ms
   led7Off
   led6On
   call   delay300ms
   led6Off
   led5On
   call   delay300ms
   led5Off
   led4On
   call   delay300ms
   led4Off
   led3On
   call   delay300ms
   led3Off
   led2On
   call   delay300ms
   led2Off
   led1On
   call   delay300ms
   led1Off
   clrf   porta
   clrf   portb
   return

delay250ms
         ;299993 cycles
   movlw   0x5E
   movwf   d1
   movlw   0xEB
   movwf   d2
delay250ms_0
   decfsz   d1, f
   goto   $+2
   decfsz   d2, f
   goto   delay250ms_0

         ;3 cycles
   goto   $+1
   nop
         ;4 cycles (including call)
   return

delay150ms
         ;149993 cycles
   movlw   0x2E
   movwf   d3
   movlw   0x76
   movwf   d4
delay150ms_0
   decfsz   d3, f
   goto   $+2
   decfsz   d4, f
   goto   delay150ms_0

         ;3 cycles
   goto   $+1
   nop

         ;4 cycles (including call)
   return

delay100ms
         ;99993 cycles
   movlw   0x1E
   movwf   d5
   movlw   0x4F
   movwf   d6
delay100ms_0
   decfsz   d5, f
   goto   $+2
   decfsz   d6, f
   goto   delay100ms_0

         ;3 cycles
   goto   $+1
   nop

         ;4 cycles (including call)
   return


delay300ms
         ;299993 cycles
   movlw   0x5E
   movwf   d7
   movlw   0xEB
   movwf   d8
delay300ms_0
   decfsz   d7, f
   goto   $+2
   decfsz   d8, f
   goto   delay300ms_0

         ;3 cycles
   goto   $+1
   nop

         ;4 cycles (including call)
   return

   END

Desconectado BrunoF

  • Administrador
  • DsPIC30
  • *******
  • Mensajes: 3865
Re: Problemas con subrutinas (y más) 16f84a Ayuda
« Respuesta #3 en: 29 de Enero de 2012, 13:46:06 »
Hola.

Tenés una pullup colocada en RA4, no? Y el pulsador conectado a GND?

Proba con este código.
La principal diferencia es que no volvías al loop principal una vez que finalizabas de ejecutar las secuencias...

Código: [Seleccionar]
;PROGRAMA QUE ENCIENDE leds al pulsar RA4
   __CONFIG _CP_OFF & _WDT_OFF & _PWRTE_ON & _HS_OSC
   LIST   P=16F84A
   INCLUDE   <P16F84A.INC>
   RADIX   HEX
;************DECLARACION DE VARIABLES*********
#define   led1On   bsf   PORTA,0
#define   led1Off   bcf   PORTA,0
#define   led2On   bsf   PORTA,1
#define   led2Off   bcf   PORTA,1
#define   led3On   bsf   PORTA,2
#define   led3Off   bcf   PORTA,2
#define   led4On   bsf   PORTA,3
#define   led4Off   bcf   PORTA,3
#define   led5On   bsf   PORTB,0
#define   led5Off   bcf   PORTB,0
#define   led6On   bsf   PORTB,1
#define   led6Off   bcf   PORTB,1
#define   led7On   bsf   PORTB,2
#define   led7Off   bcf   PORTB,2
#define   led8On   bsf   PORTB,3
#define   led8Off   bcf   PORTB,3
#define   led9On   bsf   PORTB,4
#define   led9Off   bcf   PORTB,4
#define   led10On   bsf   PORTB,5
#define   led10Off   bcf   PORTB,5
#define   led11On   bsf   PORTB,6
#define   led11Off   bcf   PORTB,6
#define   led12On   bsf   PORTB,7
#define   led12Off   bcf   PORTB,7

d1   equ   0x0c
d2   equ   0x0d
d3   equ   0x0e
d4   equ   0x10
d5   equ   0x11
d6   equ   0x12
d7   equ   0x13
d8   equ   0x14
d9   equ   0x15
d10   equ   0x16
d11   equ   0x17
d12   equ   0x18

;*********CONFIGURACION DE PUERTOS***********
   ORG      0X00
   bsf      STATUS,RP0
   movlw   b'00010000'
   movwf   TRISA
   movlw   b'00000000'
   movwf   TRISB
   bcf   STATUS,RP0
   clrf   PORTA
   clrf   PORTB
  
;****************INICIO DEL PROGRAMA*********
inicio
   btfsc   PORTA,4
   goto inicio
   call   secuencia1
   call   secuencia2
   call   secuencia3
   call   secuencia4
   call   secuencia5
   goto   inicio ;recordar volver al loop principal, sino el uC continúa ejecutando hacia abajo y perdemos el control del flujo...

secuencia1
   led1On
   led7On
   call   delay250ms
   led1Off
   led7Off
   led2On
   led8On
   call   delay250ms
   led2Off
   led8Off
   led3On
   led9On
   call   delay250ms
   led3Off
   led9Off
   led4On
   led10On
   call   delay250ms
   led4Off
   led10Off
   led5On
   led11On
   call   delay250ms
   led5Off
   led11Off
   led6On
   led12On
   call   delay250ms
   clrf   PORTA
   clrf   PORTB
   return
secuencia2
   movlw   b'00000011'
   movwf   PORTA
   movlw   b'00001100'
   movwf   PORTB
   call   delay150ms
   clrf   PORTA
   clrf   PORTB
   movlw   b'00001100'
   movwf   PORTA
   movlw   b'00110000'
   movwf   PORTB
   call   delay150ms
   clrf   PORTA
   clrf   PORTB
   movlw   b'11000011'
   movwf   PORTB
   call   delay150ms
   clrf   PORTA
   clrf   PORTB
   return
secuencia3
   movlw   b'00001111'
   movwf   PORTA
   movlw   b'11111111'
   movwf   PORTB
   call   delay100ms
   clrf   PORTA
   clrf   PORTB
   return
secuencia4
   led1On
   call   delay300ms
   led1Off
   led2On
   call   delay300ms
   led2Off
   led3On
   call   delay300ms
   led3Off
   led4On
   call   delay300ms
   led4Off
   led5On
   call   delay300ms
   led5Off
   led6On
   call   delay300ms
   led6Off
   led7On
   call   delay300ms
   led7Off
   led8On
   call   delay300ms
   led8Off
   led9On
   call   delay300ms
   led9Off
   led10On
   call   delay300ms
   clrf   PORTA
   clrf   PORTB
   return
secuencia5
   led10Off
   call   delay300ms
   led9On
   call   delay300ms
   led9Off
   led8On
   call   delay300ms
   led8Off
   led7On
   call   delay300ms
   led7Off
   led6On
   call   delay300ms
   led6Off
   led5On
   call   delay300ms
   led5Off
   led4On
   call   delay300ms
   led4Off
   led3On
   call   delay300ms
   led3Off
   led2On
   call   delay300ms
   led2Off
   led1On
   call   delay300ms
   led1Off
   clrf   PORTA
   clrf   PORTB
   return

delay250ms
         ;299993 cycles
   movlw   0x5E
   movwf   d1
   movlw   0xEB
   movwf   d2
delay250ms_0
   decfsz   d1, f
   goto   $+2
   decfsz   d2, f
   goto   delay250ms_0

         ;3 cycles
   goto   $+1
   nop
         ;4 cycles (including call)
   return

delay150ms
         ;149993 cycles
   movlw   0x2E
   movwf   d3
   movlw   0x76
   movwf   d4
delay150ms_0
   decfsz   d3, f
   goto   $+2
   decfsz   d4, f
   goto   delay150ms_0

         ;3 cycles
   goto   $+1
   nop

         ;4 cycles (including call)
   return

delay100ms
         ;99993 cycles
   movlw   0x1E
   movwf   d5
   movlw   0x4F
   movwf   d6
delay100ms_0
   decfsz   d5, f
   goto   $+2
   decfsz   d6, f
   goto   delay100ms_0

         ;3 cycles
   goto   $+1
   nop

         ;4 cycles (including call)
   return


delay300ms
         ;299993 cycles
   movlw   0x5E
   movwf   d7
   movlw   0xEB
   movwf   d8
delay300ms_0
   decfsz   d7, f
   goto   $+2
   decfsz   d8, f
   goto   delay300ms_0

         ;3 cycles
   goto   $+1
   nop

         ;4 cycles (including call)
   return

   END
"All of the books in the world contain no more information than is broadcast as video in a single large American city in a single year. Not all bits have equal value."  -- Carl Sagan

Sólo responderé a mensajes personales, por asuntos personales. El resto de las consultas DEBEN ser escritas en el foro público. Gracias.

Desconectado taniyamashimura

  • PIC10
  • *
  • Mensajes: 6
Re: Problemas con subrutinas (y más) 16f84a Ayuda
« Respuesta #4 en: 29 de Enero de 2012, 22:56:27 »
Muchisimas gracias BrunoF!
 8) ya mi programa funciona ! :D :-/


 

anything