Autor Tema: problemas con codigo  (Leído 1639 veces)

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

Desconectado mike666

  • PIC10
  • *
  • Mensajes: 37
problemas con codigo
« en: 08 de Marzo de 2006, 13:50:00 »
hola de nuevo ahora preguntando algo que me trae de punta los pelos
pues resulta que queria hacer un simple retardo de unos minutos pero pues nomas no  quiere esta cosa hay esta el codigo quiciera saber que tiene mal o porque se trunka en el micro en el simulador si lo hace bien (aunque es demaciado tardado)



 list p=16f84a


DDRB    equ 06h ; banco 1
PORTB   equ 06h ; banco 0
STATUS  equ 0x03 ; banco 0 y 1

contador1 equ 0x0c
contador2 equ 0x0d
contador3 equ 0x0e
contador4 equ 0x0f
contador5 equ 0x10
contador6 equ 0x11

   bsf   STATUS,5   

; Configuración puertos

   movlw   0
   movwf   DDRB  ; TRISB = 0  -> puerto B de salida

; Accedemos al primer banco de RAM

   bcf   STATUS,5

; Pongo a cero el puerto B
   clrf   PORTB



delay1s   
        movlw    d"3" ;d"2"
        movwf    contador6

cinco   movlw    d"3";d"3"
        movwf    contador5

cuatro   movlw      d"6";d"5"
       movwf    contador4


tres     movlw    d"100";d"10"
       movwf    contador3

dos       movlw    d"150";d"15"
        movwf    contador2

uno     movlw    d"200";d"20"
        movwf    contador1
 
dly1   
    decfsz   contador1,f
       goto   dly1
   decfsz   contador2,f
        goto   uno
   decfsz   contador3,f
         goto   dos
   decfsz   contador4,f ;segundos
       goto   tres


        btfsc PORTB,1
           goto apaga
           goto prende
no
   decfsz   contador5,f;minutos
        goto cuatro

   
       btfsc PORTB,2
         goto apaga1
            goto prende1
si
   decfsz   contador6,f;minutos
        goto cinco

   
       btfsc PORTB,2
         goto apaga2
            goto prende2

prende
 bsf PORTB,1
 goto no

apaga
 bcf PORTB,1
 goto no

prende1
 bsf PORTB,2
 goto si

apaga1
 bcf PORTB,2
 goto si

prende2
 bsf PORTB,3
 goto delay1s

apaga2
 bcf PORTB,3
 goto delay1s



 end

tal y como esta el codigo no hace absolutamente nada el pic pero si se le modifica los valores de los contadores si lo hace pero pues no me sirven mas pequeños porque el tiempo pues es de a lo mucho unos 5 segundo cosa que ni al caso  los valores con los que pues si jala el pic estan en rojo


¡¡¡gracias¡¡¡

      ¡¡¡ ES MEJOR SER IGNORANTE EN OCACIONES QUE PARA TODA LA VIDA¡¡¡

Desconectado Azicuetano

  • Moderadores
  • PIC24H
  • *****
  • Mensajes: 1020
    • Aplicaciones Electrónicas en Alicante.
RE: problemas con codigo
« Respuesta #1 en: 08 de Marzo de 2006, 17:35:00 »
Hola mike666!

Mira este ejemplo que pillé de Internete hace ya un tiempo.

Con este código podrás hacer temporizaciones de la duración que quieras. Además, es muy interesante que utilices las interrupciones (así mientras el micro está contando también puede estar haciendo otras cosas).

Analízalo y modifícalo para que haga lo que tú deseas.

Codigo:


;Ejemplo para simulación y/o MicroPIC Trainer
;
;La interrupción del TMR0.
;
;Se trata de comprobar la interrupción provocada por el TMR0. El programa
;lee el estado de los interruptores conectados a RA0 y RA4 para reflejarlo en
;los leds conectados a RB0 y RB4 respectivamente. Al mismo tiempo el TMR0
;genera una interrupción cada 0.05 seg. (50 mS) que se repetirá 5 veces con objeto
;de hacer intermitencia de 250 mS sobre el led conectado a RB7.

   
      List   p=16F84      ;Tipo de procesador
      include   "P16F84.INC"   ;Definiciones de registros internos

Contador   equ   0x0c      ;Variable para la temporización
                   
      org   0x00      ;Vector de Reset
      goto   Inicio

      org   0x04      ;Vector de interrupción

Interrupcion      bcf   INTCON,T0IF   ;Repone flag del TMR0
      decfsz    Contador,F   ;Decrementa el contador
              goto    Seguir
Con_si_0      movlw    5
              movwf    Contador          ;Repone el contador nuevamente
              btfsc    PORTB,7           ;Testea último estado de RB7
              goto    RB7_ES_1   ;Está a 1
              bsf    PORTB,7      ;Está a 0, activa RB7
              goto    Seguir

RB7_ES_1      bcf    PORTB,7      ;Desactiva RB7

Seguir       movlw    0x3c
              movwf    TMR0         ;Repone el TMR0 con 195
              retfie         ;Retorno de interrupción

Inicio           clrf    PORTB      ;Borra los latch de salida
      bsf   STATUS,RP0   ;Selecciona banco 1
      clrf   TRISB      ;Puerta B se configura como salida
      movlw   b"00011111"      
      movwf   TRISA      ;Puerta A se configura como entrada
      movlw   b"00000111"
      movwf   OPTION_REG   ;Preescaler de 256 para el TMR0      
      bcf   STATUS,RP0   ;Selecciona banco 0                                                                                 

;El TMR0 se incrementa cada 1 uS. Si se emplea un preescaler de 256, deberá sufrir 195
;incrementos para provocar una interrupción cada 50000 uS (50 mS). Si esta se repite 5
;veces, el tiempo total transcurrido es de 250000 uS (250 mS). El complemento del valor
;195 en hex. es 0x3c.

      movlw   0x3c
      movwf   TMR0      ;Carga el TMR0 con 195
      movlw   0x05
      movwf   Contador   ;Nº de veces a repetir la interrupción
      movlw   b"10100000"
      movwf   INTCON      ;Activa la interrupción del TMR0

Loop      clrwdt         ;Refresca el WDT
      btfsc    PORTA,0           ;Testea el estado de RA0
              goto    RA0_ES_1
              bcf    PORTB,0      ;Desactiva RB0
              goto    TEST_RB1
RA0_ES_1      bsf    PORTB,0      ;Activa RB0
TEST_RB1      btfsc    PORTA,1           ;Testea el estado de RA1
              goto    RA1_ES_1
              bcf    PORTB,1      ;Desactiva RB1
              goto    Loop
RA1_ES_1      bsf    PORTB,1      ;Activa RB1
      goto    Loop


      end         ;Fin del programa fuente





Espero que te sirva.


Un saludo desde Alicante.

Desconectado Chaly29

  • Moderador Global
  • DsPIC33
  • *****
  • Mensajes: 4315
RE: problemas con codigo
« Respuesta #2 en: 08 de Marzo de 2006, 20:11:00 »
Hola mike666, seria interesante que contaras que es lo que deseas que haga el programa, ya que este no se entiende y tu no lo explicas.

Un saludo

Atte. CARLOS
La teoría es cuando se sabe todo y nada funciona. La práctica es cuando todo funciona y nadie sabe por qué.

Desconectado mike666

  • PIC10
  • *
  • Mensajes: 37
RE: problemas con codigo
« Respuesta #3 en: 08 de Marzo de 2006, 22:19:00 »
;el programa basicamente sirve para prender tres led"s en diferentes tiempos
;esta hecho en vase de contadores que son los que supuestamente deven
;de darles el retardo a cada uno

 list p=16f84a
; #include<p16f84a.inc>


DDRB    equ 06h ; banco 1
PORTB   equ 06h ; banco 0
STATUS  equ 0x03 ; banco 0 y 1

contador1 equ 0x0c
contador2 equ 0x0d
contador3 equ 0x0e
contador4 equ 0x0f;variables o contadores
contador5 equ 0x10
contador6 equ 0x11

   bsf   STATUS,5   

; Configuración puertos

   movlw   0
   movwf   DDRB  ; TRISB = 0  -> puerto B de salida

; Accedemos al primer banco de RAM

   bcf   STATUS,5

; Pongo a cero el puerto B
   clrf   PORTB

;DELAY1S Retardo de 1 seg = ((255*3+3)*217+3)*6+8 = 999962us @ 4MHz



;se les agrega el valor a cada contador
;se le tiene que agregar un numero menor a 30 hex = 48

delay1s   
        movlw    d"5";d"2"
        movwf    contador6

cinco   movlw    d"10";d"3"
        movwf    contador5

cuatro   movlw      d"20";d"5"
       movwf    contador4


tres     movlw    d"40";d"10"
       movwf    contador3

dos       movlw    d"50";d"15"
        movwf    contador2

uno     movlw    d"100";d"20"
        movwf    contador1
 
dly1   
    decfsz   contador1,1             ;decrementa si es 0 salta una intruccion
       goto   dly1      ;vuelve a dly1
    decfsz   contador2,1 ;decrementa el contador 2  
                    goto   uno ;carga el 1, y regresa a dly1
    decfsz   contador3,1 ;decrementa el contador 3
         goto   dos ; carga el 1,2 y regresa a dly1
    decfsz   contador4,1 ;segundos ;decrementa el contador 4
                     goto   tres ; carga el 1,2,3 y regresa a dly1


        btfsc PORTB,1;si PORTB,1 esta prendido lo apaga o viseversa
           goto apaga
           goto prende
no
            decfsz   contador5,1;decrementa contador 5
                  goto cuatro               ;recupera 4

   
    btfsc PORTB,2 ;prende o apaga el RB2
            goto apaga1
                         goto prende1
si
   decfsz   contador6,1;decrementa contador 6
                               goto cinco ;recupera 5

   
    btfsc PORTB,2;prende o apaga el RB2
      goto apaga2
                                goto prende2

prende
 bsf PORTB,1 ;prende RB1 y regresa a NO
 goto no

apaga
 bcf PORTB,1;apaga RB1 y regresa a NO
 goto no

prende1
 bsf PORTB,2 ;prende RB2 y regresa a SI
 goto si

apaga1
 bcf PORTB,2;apaga RB2 y regresa a SI
 goto si

prende2
 bsf PORTB,3 ;prende RB3 y regresa a delay1s
 goto delay1s

apaga2
 bcf PORTB,3 ;apaga RB3 y regresa a delay1s
 goto delay1s



 end ;fin de el programa

bueno pues lo que pregunto pues es porque es que se quedan prendidos o apagados si los valores de los contadores son algo grandes ?¿

¡¡¡gracias¡¡¡


        ES MEJOR VERTE IGNORANTE PREGUNTANDO....
                                             QUE SERLO EL RESTO DE TU VIDA ¡¡¡¡
 

Desconectado Chaly29

  • Moderador Global
  • DsPIC33
  • *****
  • Mensajes: 4315
RE: problemas con codigo
« Respuesta #4 en: 09 de Marzo de 2006, 01:34:00 »
Hola mike666, calculo que esto es lo que estabas deseando hacer, el principal problema estaba en la configuración de los puerto, e retirado uno de los contadores porque estaba de sobre para generar el tiempo de 1 segundo y también es cambiado esos valores para adaptar le rutina próxima a 1 segundo.

Codigo:
   LIST      P=16F84A
   INCLUDE      <P16F84A.INC>
;----------------------------------------------------------------------
CONTADOR1   EQU    0x0C
CONTADOR2   EQU    0x0D
CONTADOR3   EQU    0x0E
CONTADOR4   EQU    0x0F      ;variables o contadores
CONTADOR5   EQU    0x10

;----------------------------------------------------------------------
   ORG   .0
   goto   INICIO
   ORG   .4
   return

;----------------------------------------------------------------------
INICIO
   bcf   STATUS,RP0
   bcf   STATUS,RP1
   clrf   PORTB         ; Pongo a cero el puerto B
   bsf   STATUS,RP0      ; Accedemos al banco 1 de RAM
   movlw   B"00000000"      ; Configuración puertos
   movwf   TRISB
   bcf   STATUS,RP0      ; Accedemos al banco 0 de RAM      

DELAY1S   
   movlw   .10
   movwf   CONTADOR5
RET1
   movlw   .20
   movwf   CONTADOR4
RET2
   movlw   .14
   movwf   CONTADOR3
RET3
   movlw   .72
   movwf   CONTADOR2
RET4
   movlw   .247
   movwf   CONTADOR1
RET5
   nop
   decfsz   CONTADOR1,F      ;decrementa si es 0 salta una intruccion
   goto   RET5         ;vuelve a dly1
   decfsz   CONTADOR2,F      ;decrementa el contador 2  
   goto   RET4         ;carga el 1, y regresa a dly1
   decfsz   CONTADOR3,F      ;decrementa el contador 3
   goto   RET3         ; carga el 1,2 y regresa a dly1

   btfsc   PORTB,1         ;si PORTB,1 esta prendido lo apaga o viseversa
   goto   apaga
   goto   prende         ;Este sector
RET6
   decfsz   CONTADOR4,F      ;decrementa contador 5
   goto   RET2         ;recupera 4

   
   btfsc   PORTB,2         ;prende o apaga el RB2
   goto   apaga1
   goto   prende1
RET7
   decfsz   CONTADOR5,F      ;decrementa contador 6
   goto   RET1         ;recupera 5

   btfsc   PORTB,2         ;prende o apaga el RB2
   goto   apaga2
   goto   prende2

;----------------------------------------------------------------------
prende
   bsf   PORTB,1         ;prende RB1 y regresa a NO
   goto   RET6
apaga
   bcf   PORTB,1         ;apaga RB1 y regresa a NO
   goto   RET6
prende1
   bsf   PORTB,2         ;prende RB2 y regresa a SI
   goto   RET7
apaga1
   bcf   PORTB,2         ;apaga RB2 y regresa a SI
   goto   RET7
prende2
   bsf   PORTB,3         ;prende RB3 y regresa a delay1s
   goto   DELAY1S
apaga2
   bcf   PORTB,3         ;apaga RB3 y regresa a delay1s
   goto   DELAY1S

;----------------------------------------------------------------------
   end            ;fin de el programa


Espero te sea de utilidad

Un saludo.

Atte. CARLOS

La teoría es cuando se sabe todo y nada funciona. La práctica es cuando todo funciona y nadie sabe por qué.

Desconectado mike666

  • PIC10
  • *
  • Mensajes: 37
RE: problemas con codigo
« Respuesta #5 en: 10 de Marzo de 2006, 20:04:00 »
¡¡¡¡¡¡¡¡¡¡¡¡ muchas gracias ¡¡¡¡¡¡¡¡¡¡¡¡¡¡
por todos los paros que me han hecho la verdad que este foro esta de lujo
 gracias por el tiempo que me han regalado y de las dudas que me han sacado

      RebotadoRebotadoRebotadoRebotado










 ES MEJOR VERTE IGNORANTE PREGUNTANDO.... QUE SERLO EL RESTO DE TU VIDA ¡¡¡¡


 

anything