Autor Tema: que diferencia hay entre bsf y setf  (Leído 3913 veces)

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

Desconectado ELECTROSWALDO

  • PIC10
  • *
  • Mensajes: 14
que diferencia hay entre bsf y setf
« en: 27 de Febrero de 2009, 23:33:38 »
Que tal, soy nuevo en el foro. Desde hace tiempo he programado pics, pero solo o principalmente el 16f84a, en ensamblador, nada de C, sin embargo estoy queriendo empezar a usar el 18f4550 y evidentemente es bastante mas complejo y completo que el 16f84a.

El problema que les traigo es el siguiente:  Deseo hacer un programa de prueba para encender y apagar los bits del PORTE,  esto lo he conseguido de la siguiente manera:

.
.
.
ciclo
      clrf    PORTE
      call    Retardo_1s ;RETARDO DE UN SEGUNDO POR BUCLES DE CICLOS DE PROGRAMA
      setf   PORTE
      call    Retardo_1s  ;RETARDO DE UN SEGUNDO POR BUCLES DE CICLOS DE PROGRAMA
      goto  ciclo

      END


sin embargo estoy "caminando a tientas" con este pic y quiero  ver que funcione bit por bit, asi que lo hice de esta manera:

.
.
.
ciclo
    bcf   PORTE,0
    bcf   PORTE,1
    bcf   PORTE,2
    call   Retardo_1s
    bsf   PORTE,0
    bsf   PORTE,1
    bsf   PORTE,2
    call   Retardo_1s
    goto  ciclo

    END

Pero de esta manera NO FUNCIONA, solo parpadea el bit PORTE,0 pero los otros no parpadean, solo parpadean si volteo el led y lo conecto de Vcc al PORTE,1 o PORTE,2  (en lugar del pin a tierra que es lo comun), eso quiere decir segun yo que el PORTE si esta mandando el pulso BAJO pero no el pulso alto, tal vez sea de colector abierto... yo supongo que talvez tenga que ver con resistencias pull-up pero no encuentro en el datasheet algo que me diga como habilitarlas o deshabilitarlas (si las tiene internamente el PORTE).
Hice la prueba y le conecte resistencias pull-up externas y los led si parpadean pero el pic empieza a hacer feo pues el pulso alto programado para durar 1 seg dura a veces  2seg  :shock: y a veces un seg.

MI NO ENTENDER NI MAIZ...

Este problema no pasa con el PORTB que es el unico que si se porta bien con migo :D.

Lo mismo me pasaba con un 16f917 pero ya no le segui para empezar con el 18f4550 el cual hace lo mismo :x

Bueno espero su respuesta amigos, seguro estoy haciendo algo muy muy mal pero no se que es, por cierto, les dejo el programa completo(la mayor parte la obtuve de estos utiles foros):



;**********************************************
;Programa de Prueba para el 18f4550, usa un XT de 4Mhz pero ejecuta las
;instrucciones a 48MHz
;---------------------------------------------------------------

   LIST P=18F4550      ;directive to define processor
   #include <P18F4550.INC>   ;processor specific variable definitions


   
    CONFIG FOSC = XTPLL_XT, PLLDIV = 1,CPUDIV = OSC1_PLL2,USBDIV = 2,PWRT = ON,BOR = ON, VREGEN = OFF
   CONFIG WDT = OFF ,WDTPS = 1,MCLRE = ON,PBADEN = OFF,LVP = OFF,XINST = OFF,DEBUG = OFF

 
   CBLOCK 0x30
   
   ENDC   

   org  0
   goto inicionumero1

inicionumero1

    clrf    TRISA  ; configuar el port como salida  ¡que bueno!, no hay que estar cambiando de bancos ;-)
   clrf    TRISB   ; el resto -> salida
    clrf    TRISC
    clrf    TRISD
    clrf    TRISE
;------------------------------------------------------
; ahora viene la deshabilitación de modulos (pheriperals)
;**********************************************
   clrf   ADCON0   ; desactiva el CAD
   movlw    0x0F   
   movwf    ADCON1   ; todas digitales
   bcf    INTCON,GIE   ; desactiva interrupciones
   movlw    0x07   
   movwf    CMCON   ;desactiva el modulo comparador
   
   clrf    SPPCON   ; desactiva el modulo Streaming Parallel Port (SPP)
   clrf    SSPCON1   ; desactiva el modulo MSSP,SSPEN
   bcf    UCON,USBEN   ; desactiva el modulo USB
   bsf    INTCON2,RBPU   ; desactiva las resistencias de amarre en PORTB
   
    



;===================================
;   Empieza el PROGRAMA     (basicamente lo unico que hice yo)
;--------------------------------------------------------------


enclava
   bsf      PORTB,7
   BSF      PORTE,0
   BSF      PORTE,1
   BSF      PORTE,2
   call   Retardo_1s
   BCF      PORTE,0
   BCF      PORTE,1
   BCF      PORTE,2
   BCF      PORTB,7
   call   Retardo_1s
   goto   enclava


include<RETARDOS_18F4550_48MHz.INC>   ;Libreria de retardos para un 18f4550

   END


SALUDOS CORDIALES

Solo hay 10 tipos de personas, los que sabemos binario y los que no.

Desconectado pibe

  • Colaborador
  • PIC24F
  • *****
  • Mensajes: 635
Re: que diferencia hay entre bsf y setf
« Respuesta #1 en: 28 de Febrero de 2009, 01:02:42 »
El port E es un poco cabron como el port A de los 628.
Mira la hoja de datos, me parece que comparte algo con el port D.
El bsf es para poner un bit a 1.
EL setf es para poner 1 byte a FF (o sea todos 1)
Mi jefe mirando el prototipo que estoy creando: "Y eso va a funcionar?"

Desconectado ELECTROSWALDO

  • PIC10
  • *
  • Mensajes: 14
Re: que diferencia hay entre bsf y setf
« Respuesta #2 en: 28 de Febrero de 2009, 01:41:25 »
El port E es un poco cabron como el port A de los 628.
Mira la hoja de datos, me parece que comparte algo con el port D.
El bsf es para poner un bit a 1.
EL setf es para poner 1 byte a FF (o sea todos 1)

Ok, si entiendo que bsf es para un bit y setf es para byte, la pregunta iba en sentido de porque el programa jala bien con las instrucciones clrf y setf  y no jala con las instrucciones bcf y bsf que se supone que practicamente hacen lo mismo en el programa(solo que pongo a 0ó1 bit por bit).

Bueno ya busque en la hoja de datos... me pase la noche y no di con el problema, por eso decidi empezar a usar este foro. Pero igual voy a seguir buscando en la hoja de datos como me suguieres... y sí recuerdo algo del PORTD ¿o lo soñe? porque ya estaba medio dormido je je.

SALUDOS
Solo hay 10 tipos de personas, los que sabemos binario y los que no.

Desconectado ELECTROSWALDO

  • PIC10
  • *
  • Mensajes: 14
Re: que diferencia hay entre bsf y setf
« Respuesta #3 en: 28 de Febrero de 2009, 01:48:39 »
Por cierto gracias por responder tan rapido pibe, igual si tienes o tiene alguien algo que me heche la mano se los agradezco mucho, si que cuesta un poquitin pasar del 16f84a al 18f4550 pero emociona aprender algo nuevo y mejor :-/
Solo hay 10 tipos de personas, los que sabemos binario y los que no.

Desconectado pibe

  • Colaborador
  • PIC24F
  • *****
  • Mensajes: 635
Re: que diferencia hay entre bsf y setf
« Respuesta #4 en: 28 de Febrero de 2009, 06:12:14 »
Lo acabo de simular por el Proteus y me va de muerte  :mrgreen: Mi no comprender porque no furularte a usted.  :D



   LIST P=18F4550      ;directive to define processor
   #include <P18F4550.INC>   ;processor specific variable definitions


   
    CONFIG FOSC = XTPLL_XT, PLLDIV = 1,CPUDIV = OSC1_PLL2,USBDIV = 2,PWRT = ON,BOR = ON, VREGEN = OFF
   CONFIG WDT = OFF ,WDTPS = 1,MCLRE = ON,PBADEN = OFF,LVP = OFF,XINST = OFF,DEBUG = OFF

 
   CBLOCK 0x30
   PDel0
   PDel1
   PDel2
   ENDC   

   org  0
   goto inicionumero1

inicionumero1

    clrf    TRISA  ; configuar el port como salida  ¡que bueno!, no hay que estar cambiando de bancos wink
   clrf    TRISB   ; el resto -> salida
    clrf    TRISC
    clrf    TRISD
    clrf    TRISE
;------------------------------------------------------
; ahora viene la deshabilitación de modulos (pheriperals)
;**********************************************
   clrf   ADCON0   ; desactiva el CAD
   movlw    0x0F   
   movwf    ADCON1   ; todas digitales
   bcf    INTCON,GIE   ; desactiva interrupciones
   movlw    0x07   
   movwf    CMCON   ;desactiva el modulo comparador
   
   clrf    SPPCON   ; desactiva el modulo Streaming Parallel Port (SPP)
   clrf    SSPCON1   ; desactiva el modulo MSSP,SSPEN
   bcf    UCON,USBEN   ; desactiva el modulo USB
   bsf    INTCON2,RBPU   ; desactiva las resistencias de amarre en PORTB
   
   



;===================================
;   Empieza el PROGRAMA     (basicamente lo unico que hice yo)
;--------------------------------------------------------------


enclava
   bsf      PORTB,7
   BSF      PORTE,0
   BSF      PORTE,1
   BSF      PORTE,2
   call   DEMORA
   BCF      PORTE,0
   BCF      PORTE,1
   BCF      PORTE,2
   BCF      PORTB,7
   call   DEMORA
   goto   enclava


DEMORA  movlw     .14       ; 1 set numero de repeticion  (C)
        movwf     PDel0     ; 1 |
PLoop0  movlw     .72       ; 1 set numero de repeticion  (B)
        movwf     PDel1     ; 1 |
PLoop1  movlw     .247      ; 1 set numero de repeticion  (A)
        movwf     PDel2     ; 1 |
PLoop2  clrwdt              ; 1 clear watchdog
        decfsz    PDel2, 1  ; 1 + (1) es el tiempo 0  ? (A)
        goto      PLoop2    ; 2 no, loop
        decfsz    PDel1,  1 ; 1 + (1) es el tiempo 0  ? (B)
        goto      PLoop1    ; 2 no, loop
        decfsz    PDel0,  1 ; 1 + (1) es el tiempo 0  ? (C)
        goto      PLoop0    ; 2 no, loop
PDelL1  goto PDelL2         ; 2 ciclos delay
PDelL2  clrwdt              ; 1 ciclo delay
        return              ; 2+2 Fin.

   END


Mi jefe mirando el prototipo que estoy creando: "Y eso va a funcionar?"

Desconectado ELECTROSWALDO

  • PIC10
  • *
  • Mensajes: 14
Re: que diferencia hay entre bsf y setf
« Respuesta #5 en: 28 de Febrero de 2009, 20:19:17 »
Hola, perdon pero no entiendo que significa "furularte"... ¿es funcionarte?... digo para que lo anexe y enriquezca mi lexico de picmaniaco.
 
Bueno, respecto al programa no lo he probado en ningun simulador. Donde no funciona es en la vida real, ya copie y pege el programa que posteaste pero hace lo mismo, solo que el tiempo es menor. voy a ver si puedo subir un dibujo para ilustrar lo que pasa (ya que soy nuevo en este foraso):







Bueno, los leds no parpadean cuando se conectan del PORTE,X a Tierra, solo si los volteo y los conecto de VCC al PORTE,X, lo cual supongo quiere decir que el PORTE,1 y 2 conducen a tierra (tiempo bajo) y se ponen a Z en lo que deberia ser el tiempo alto. Lo raro es que oscilan bien cuando las instrucciones usadas son CLRF y SETF pero nada que jalan con BCF y BSF. no se si me explico...

Por cierto, el PORTB,7 (el unico que no me da problemas)solo lo conecto y lo hago oscilar junto con los otros nomas pa checar que el pic si jale, es como mi muestra de control je je.

oh! como sufro, de haber sabido ni nazco.



Solo hay 10 tipos de personas, los que sabemos binario y los que no.

Desconectado pibe

  • Colaborador
  • PIC24F
  • *****
  • Mensajes: 635
Re: que diferencia hay entre bsf y setf
« Respuesta #6 en: 28 de Febrero de 2009, 20:38:10 »
Prueba con LATE en lugar de PORTE a ver que tal.  Segun el datasheet con LATE no interesa si lo has configurado o no como entrada analógica.
La verdad que no he tenido mayores problemas con el porte.
Mi jefe mirando el prototipo que estoy creando: "Y eso va a funcionar?"

Desconectado ELECTROSWALDO

  • PIC10
  • *
  • Mensajes: 14
Re: que diferencia hay entre bsf y setf
« Respuesta #7 en: 01 de Marzo de 2009, 23:35:32 »
Hola Pibe, le puse una resistencia a los leds y ya jalo bien el PORTE, lo meti a un buffer y jalo tambien jalo bien, parece que el PORTE es muy sentimental con eso de las corrientes.

Pero de todas formas me parece raro porque el PORTE jala perfecto con o sin resistencia y con o sin buffer con la instruccion SETF y no jala con BSF a menos que le ponga una R (330)...¿como puede ser una diferencia de corrientes con cambiar instrucciones?... ¿o estoy malentendiendo algun concepto por ahi?.

Bueno, dejo ese detalle talvez a alguien mas le pueda ayudar, segun esta experiencia hay que ponerle siempre sus respectivas R de 330. Por cierto voy a probar con LATE en lugar de PORTE y reporto resultados.
Solo hay 10 tipos de personas, los que sabemos binario y los que no.

Desconectado pibe

  • Colaborador
  • PIC24F
  • *****
  • Mensajes: 635
Re: que diferencia hay entre bsf y setf
« Respuesta #8 en: 02 de Marzo de 2009, 04:46:31 »
 :shock: Yo daba por hecho que le ponías resistencias!  :shock:

Que loco.... :mrgreen:
Mi jefe mirando el prototipo que estoy creando: "Y eso va a funcionar?"

Desconectado ELECTROSWALDO

  • PIC10
  • *
  • Mensajes: 14
Re: que diferencia hay entre bsf y setf
« Respuesta #9 en: 07 de Marzo de 2009, 03:29:31 »
Pues si ya probe con LATE y hace lo mismo que con PORTE, y bueno pues el problema parece que eran las resistencias, aunque sigue siendo algo curioso como solo por cambiar la instruccion parece cambiar la corriente. Talvez por eso el 16F84A es numero uno en la enseñanza porque es aprueba de... "·$%"&&das.

Bueno a ver cuando vuelvo a molestarles por aqui otravez :lol:
Solo hay 10 tipos de personas, los que sabemos binario y los que no.


 

anything