• Viernes 3 de Mayo de 2024, 02:33

Autor Tema:  Apagar Y Encender El Puerto B De Un 16f84  (Leído 3184 veces)

eliza_marti

  • Miembro MUY activo
  • ***
  • Mensajes: 267
    • Ver Perfil
    • http://www.solocodigo.com
Apagar Y Encender El Puerto B De Un 16f84
« en: Sábado 26 de Febrero de 2005, 17:22 »
0
Hola chicos!.  :hola: .estaba practicando un ejemplo de por ahí....y me quedaron ciertas dudas!..

Código: Text
  1. ;---------------------------------------
  2. list            p=16f84A
  3. include         "p16F84A.inc"
  4. org                 00h                  
  5. reset
  6. goto             inicio
  7. org               10h
  8. inicio
  9.  

Porqué la etiqueta de inicio la pongo en la dirección 10h?  :huh: ...porque no puede ser la dirección 0D?..ya que los registros especificos van hasta el 0C….es una forma estandar de programar?  :huh: ..siempre debe ser asi?..eso lo más recomendable?....pregunto porque en la dirección 10 se están desperdiciando 2 registros..
O?...no importa eso?.. :huh:

Código: Text
  1. ;-------------------------------------------
  2. ;Configurar el puerto B como salida
  3. ;--------------------------------------------
  4. ;Registro TRISB=00h para salidas.
  5.  
  6. bsf            STATUS,5;          pongo a uno el bit 5 del registro
  7. ;                                 STATUS para entrar en el banco1.
  8. movlw            00h;             cargo w con el dato 00h.        
  9. movwf            TRISB;           cargo el registro TRISB con el w para
  10. ;                                 hacer el puerto B como salida.
  11. bcf           STATUS,5;           pongo a cero el bit 5 del registro
  12. ;                             STATUS para entrar en el banco 0.
  13.  


Para configurar el puero B como salida ..puedo hacer un simple movwl 00h y un movwf PORTB?  :huh: ..como ´se hace dentro del programa? (inicio)...
mmmm…..sé que STATUS es un registro de estado…y se que hay 2 bancos de 128 registros cada uno…pero ..si el bit 5 es:

/PD: Power Down.
1 = Recién encendido o tras CLRWDT. 0 = Tras ejecutar una instrucción SLEEP

Porqué poniendo en 1 o en 0 el bit 5 de status se puede cambiar de banco?  :huh:

Para utilizar el TRIS siempre tengo que configurar el registro STATUS?..

Ahora!..
Código: Text
  1. movlw  00h;                  
  2. movwf  TRISB;         error aquí
  3.  

en esa señal..al compilarlo para hacer el hex…me da un error…que según yo es porque no se puede modificar el valor de es registro porque es uno específico y no de propósito general…entonces lo arreglé poniendo:

Código: Text
  1. movlw            00h;                                      
  2. movwf            PORTB;
  3.  

no se si estará bien…pero de esa forma no me dio ningun error..
y tampoco en esta:

Código: Text
  1. movlw            00h;                                  
  2. TRIS             PORTB;
  3.  

Bueno..Gracias por concederme de su valioso tiempo  :unsure: …y disculpen mis dudas de principiante..!.. :hola: ..Bye!.. :hola:  :comp:
Conserva la Paz con tu Alma en la bulliciosa confusión de la vida, aún con toda su farsa, penalidades y sueños fallidos, el mundo es todavia Hermoso....

http]
programacion,c,c++,
C#,java,linux,videojuegos,
directX,.NET,allegro,asm,codigo
[

Huguen_aus_Tirol

  • Miembro MUY activo
  • ***
  • Mensajes: 318
    • Ver Perfil
    • http://www.erhard-automation.co.cc
Re: Apagar Y Encender El Puerto B De Un 16f84
« Respuesta #1 en: Sábado 26 de Febrero de 2005, 18:57 »
0
Hola Eliza!
Al iniciarse el micro tras un reset, el contador de programa apunta a la direccion 0x00. Como primer instruccion se acostumbra un salto (goto xxxx) a la direccion donde empieza tu rutina principal de programa. Puede ser 10h o cualquier otra, pero cuidado que en la direccion 0x04 se encuentra el vector de interrupciones; es decir que al producirse una interrupcion (si esta habilitada) se salta a la direccion 0x04

Para acceder a TRISB tienes primero que seleccionar el banco 1 de RAM, tal como esta en la segunda ventana de codigo de tu mensaje. El bit /PD es el bit 3 de STATUS!

Posiblemente hayas tenido error porque no esta definido el registro TRISB; usando la instruccion TRIS PORTx funciona, pero es una instruccion de los viejos 15C5x y es aconsejable no usarla, seguramente te habra dado un mensaje al compilar.

Cuando escribas o leas en PORTB (o PORTA) estas accediendo directamente a los pines del micro. Para ello primero hay que configurarlos, escribiendo en el registro TRISx correspondiente.

Hablando de los bancos de memoria, es comun que seleccionemos un banco, el 1 por ejemplo, y despues nos olvidamos de volver al banco 0, lo que nos da algunos dolores de cabeza un rato... pero con el tiempo deja de pasar! :rolleyes:

Bueno, espero que te sea de ayuda

Saludos y suerte

eliza_marti

  • Miembro MUY activo
  • ***
  • Mensajes: 267
    • Ver Perfil
    • http://www.solocodigo.com
Re: Apagar Y Encender El Puerto B De Un 16f84
« Respuesta #2 en: Domingo 27 de Febrero de 2005, 02:20 »
0
Gracias Huguen_aus_Tirol por contestar!.. :hola: ..pero ...sigo con la duda.. :unsure: ..si siempre tengo que configurar el banco por medio del registro STATUS...entonces porque en muchos programas no lo hacen?... :huh: ..

Gracias de nuevo por tu tiempo!.. :hola: ..nos vemos..bye!..  :ph34r:  :hola:
Conserva la Paz con tu Alma en la bulliciosa confusión de la vida, aún con toda su farsa, penalidades y sueños fallidos, el mundo es todavia Hermoso....

http]
programacion,c,c++,
C#,java,linux,videojuegos,
directX,.NET,allegro,asm,codigo
[

© Jonathan ©

  • Moderador
  • ******
  • Mensajes: 1671
  • Nacionalidad: ar
    • Ver Perfil
    • http://www.einstec.com.ar
Re: Apagar Y Encender El Puerto B De Un 16f84
« Respuesta #3 en: Domingo 27 de Febrero de 2005, 05:27 »
0
- Holas, no siempre tienes que ir al banco 1 u otro, siempre va a ser dependiendo de los registros que debas utilizar para configurar.. por ejemplo el puerto A se encuentra en los 2 bancos, el banco 0 y el banco 1, en el banco 1 defines si los pines son entradas o salidas... siempre debes entrar al banco 1 para configurar el puerto y regresar al banco 0 para continuar con tu programa.. hay varias maneras de direccionarte hacia el banco 1, de forma directa e indirecta, te pasare una explicacion detallada de ese sistema, pero no deberias concentrarte en eso, mas bien deberias entender las instrucciones y jugar con los puertos y retardos.. Te dejo en el  FTP un manual basico donde explican como hacer parpadear un led, con entender eso ya tienes ventajas. Esperamos tus dudas ;) Suerte :)

http://www.solocodigo.com/vftp/Microcontro...%20de%20PIC.zip
EINSTEC Tecnología «La única fuente del conocimiento es la experiencia.»

«Lo importante es no dejar de hacerse preguntas.»

eliza_marti

  • Miembro MUY activo
  • ***
  • Mensajes: 267
    • Ver Perfil
    • http://www.solocodigo.com
Re: Apagar Y Encender El Puerto B De Un 16f84
« Respuesta #4 en: Domingo 27 de Febrero de 2005, 05:44 »
0
Entendido..© Jonathan ©..seguiré tus consejos.. :) ...me bajé el zip..y se ve interesante ..lo practicaré  ;) ...y les avisaré...pero...otra duda..  :huh: .los retardos son verdaderamente exactos?...porque traté de comprobar un ejemplo y no lo era.. :( ..
Gracias por tu amable atención.. :hola: ..nos vemos.. :comp:
Conserva la Paz con tu Alma en la bulliciosa confusión de la vida, aún con toda su farsa, penalidades y sueños fallidos, el mundo es todavia Hermoso....

http]
programacion,c,c++,
C#,java,linux,videojuegos,
directX,.NET,allegro,asm,codigo
[

© Jonathan ©

  • Moderador
  • ******
  • Mensajes: 1671
  • Nacionalidad: ar
    • Ver Perfil
    • http://www.einstec.com.ar
Re: Apagar Y Encender El Puerto B De Un 16f84
« Respuesta #5 en: Domingo 27 de Febrero de 2005, 05:51 »
0
- Holas, los retardos son exactos, debes tener en cuenta que algunas instrucciones tardan 2 ciclos de instruccion y otras 1... pero si lo lees bien te daras cuenta que son muy exactos, por cierto, usas el programa de retardos del FTP??, con ese no he tenido jamas un problema. Saludos ! ;)
EINSTEC Tecnología «La única fuente del conocimiento es la experiencia.»

«Lo importante es no dejar de hacerse preguntas.»

eliza_marti

  • Miembro MUY activo
  • ***
  • Mensajes: 267
    • Ver Perfil
    • http://www.solocodigo.com
Re: Apagar Y Encender El Puerto B De Un 16f84
« Respuesta #6 en: Lunes 28 de Febrero de 2005, 00:13 »
0
Gracias © Jonathan © por la página! . :yes: .está muy buena..seguí los consejos y entonces configuré los registros que iba a utilizar.. así:

Código: Text
  1. list               p=16f84A
  2. include        "p16F84A.inc”    
  3. STATUS      equ     0x3; warning
  4. PORTB       equ     0x6; warning
  5. TRISB       equ     0x86; aunque estaba en 0x6 y me daba error
  6. ;                        por eso lo cambie = me da un warning
  7. org               00h
  8. reset
  9. goto             inicio
  10. org               10h
  11. inicio
  12. ;-------------------------------------------
  13. ;Configurar el puerto B como salida
  14. ;--------------------------------------------
  15. ;Registro TRISB=00h para salidas.
  16. bsf               STATUS,5;     pongo a uno el bit 5 del registro
  17. ;                               STATUS para entrar en el banco1.
  18. movlw            00h;          cargo w con el dato 00h.                        
  19. movwf            TRISB;         cargo el registro TRISB con el w para
  20. ;                               hacer el puerto B como salida.
  21. bcf              STATUS,5;     pongo a cero el bit 5 del registro
  22. ;                               STATUS para entrar en el banco 0.
  23. .
  24. .
  25. .
  26.  

Al compilarlo No me da errores pero me da 3 warnings iguales:  :(

Código: Text
  1. Found label after column 1. (STATUS)
  2. Found label after column 1. (PORTB)
  3. Found label after column 1. (TRISB)
  4.  
Qué significa eso de que encontró una etiqueta después de la columna 1?.. :huh:
Se que los warning no son errores..pero aquí son importantes?....

Y tambien un mensaje de (no de error porcia):

Código: Text
  1. Register in operand not in bank 0
  2.  
.
y me señala el:  
movwf            TRISB

Y no entiendo porqué si me estoy cambiando al banco 1 para configurarlo. :huh:

Muchas Gracias anticipadas por ayudarme!.... :) ..bye!.. :hola:  :comp:
Conserva la Paz con tu Alma en la bulliciosa confusión de la vida, aún con toda su farsa, penalidades y sueños fallidos, el mundo es todavia Hermoso....

http]
programacion,c,c++,
C#,java,linux,videojuegos,
directX,.NET,allegro,asm,codigo
[

Huguen_aus_Tirol

  • Miembro MUY activo
  • ***
  • Mensajes: 318
    • Ver Perfil
    • http://www.erhard-automation.co.cc
Re: Apagar Y Encender El Puerto B De Un 16f84
« Respuesta #7 en: Lunes 28 de Febrero de 2005, 06:52 »
0
Hola Eliza! Es comun que salga el mensaje "register in operand not in bank 0", es el mensaje 302, y el programa te funciona igual.
El warning tambien ya lo conosco (es el 207), pero en este preciso momento no me acuerdo como lo solucione :angry:  De todas formas creo que no hay problema. Tienes que fijarte en que linea de tu codigo se encuentra el problema, y me dices asi lo solucionamos....
Código: Text
  1.  
  2. list               p=16f84A
  3. [B]errorlevel -302, -207[/B]
  4. include        "p16F84A.inc”    
  5. STATUS      equ     0x3; warning
  6. PORTB       equ     0x6; warning
  7. TRISB       equ     0x86; aunque estaba en 0x6 y me daba error
  8. ;                        por eso lo cambie = me da un warning
  9. org               00h
  10. reset
  11. goto             inicio
  12. org               10h
  13. inicio
  14.  
  15.  
  16.  

Con la linea anterior evitas que te salgan el mensaje y el warning

Bueno, espero te ayude...
Saludos

Ah!!!!! Seguramente cuando declaras los registros, no estan en la primer columna de la pantalla!! Fijate que no haya ningun espacio, o tab ni nada!! Por eso el warning 207. Pero tiene que funcionar  :D

Saludos!

© Jonathan ©

  • Moderador
  • ******
  • Mensajes: 1671
  • Nacionalidad: ar
    • Ver Perfil
    • http://www.einstec.com.ar
Re: Apagar Y Encender El Puerto B De Un 16f84
« Respuesta #8 en: Lunes 28 de Febrero de 2005, 12:10 »
0
Holas, del mensaje anterior es muy util la linea errorlevel -302, -207.. es la unica manera que encontre de sacar ese mensaje.

Paso a explicarte algo del codigo. en las lineas:

Citar
include        "p16F84A.inc” 
 
STATUS      equ     0x3
PORTB       equ     0x6
TRISB       equ     0x86

Estas declarando STATUS, PORTB y TRISB, los cuales ya se encuentran declarados dentro de "p16F84A.inc” .. para eso incluyes el archivo, para evitar hacer las equivalencias.
El Warning que te aparece se debe avisa que estas entrando en el Banco 1 y usando la direccion 0x86, es dificil de comprender, pero si usas 0x06 en vez de 0x86 estando en el BANCO 1 el warning desaparece.
Al pasarte al Banco 1 es como que si nuevamente comenzara a contar los registros desde cero, por lo que el registro TRISB no es exactamente 0x86, sino que es 0x06... ahora si estas en el Banco 0, para llegar al registro TRISB del banco 1 si te direccionas usando el 0x86. Creo que no me hice entender  :blink: .. mas facil

en el Banco 0 usas TRISB para llegar a 0x86 (no es buena opcion)

en el Banco 1 usas PORTB para llegar a 0x06 que estando en el banco1 es = a TRISB (0x86)

Bueno, he probado programas sin entrar al banco 1 para configurar pines y me han funcionado, siempre usando TRISB. Pero puede ser que este mal acostumbrarse, mejor es dejar que los warning hagan sus trabajos y nosotros el nuestro... siempre recordar entrar en un banco y salir del mismo. Un warning no puede frenarte :lightsabre: , son solo avisos :whistling: . Saludos! :hola: :P
EINSTEC Tecnología «La única fuente del conocimiento es la experiencia.»

«Lo importante es no dejar de hacerse preguntas.»

eliza_marti

  • Miembro MUY activo
  • ***
  • Mensajes: 267
    • Ver Perfil
    • http://www.solocodigo.com
Re: Apagar Y Encender El Puerto B De Un 16f84
« Respuesta #9 en: Lunes 28 de Febrero de 2005, 16:34 »
0
Muchas Gracias Chicos por ayudarme en mi aprendizaje!... :hola: ..les cuento que ahora ya no tengo ninguna duda acerca de este programita :lol: ...hice lo que me dijiste Jonathan..le quite la definición de registros porque ya se encuentran en el archivo de cabecera...y...entendí perfectamente lo de los bancos... :D .. Huguen_aus_Tirol..puse el errorlevel -302, -207..y los warnings desaparecieron..

Gracias de verdad y disculpen mis preguntas de principiante  :hola: ..seguiré practicando... :hola: .. :ph34r:   :comp:
Conserva la Paz con tu Alma en la bulliciosa confusión de la vida, aún con toda su farsa, penalidades y sueños fallidos, el mundo es todavia Hermoso....

http]
programacion,c,c++,
C#,java,linux,videojuegos,
directX,.NET,allegro,asm,codigo
[

© Jonathan ©

  • Moderador
  • ******
  • Mensajes: 1671
  • Nacionalidad: ar
    • Ver Perfil
    • http://www.einstec.com.ar
Re: Apagar Y Encender El Puerto B De Un 16f84
« Respuesta #10 en: Lunes 28 de Febrero de 2005, 16:38 »
0
Me alegro que te haya sido de utilidad nuestros comentarios. :)

Citar
Gracias de verdad y disculpen mis preguntas de principiante  ..seguiré practicando...

No tienes porque disculparte :angry:, siempre se es principiante alguna ves y en el foro estamos para ayudarnos  :P. Saludos! :hola:
EINSTEC Tecnología «La única fuente del conocimiento es la experiencia.»

«Lo importante es no dejar de hacerse preguntas.»