Autor Tema: Primer programa en MPLAB pic16f84a  (Leído 17849 veces)

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

Desconectado migsantiago

  • Colaborador
  • DsPIC33
  • *****
  • Mensajes: 8257
    • Sitio de MigSantiago
Primer programa en MPLAB pic16f84a
« en: 03 de Mayo de 2004, 15:20:00 »
Ya escribí mi primer programa en MPLAB 6.4 para el pic16f84a.

Es un programa que establece al puerto a como entrada y al puerto b como salida. Obtiene dato de pto a, le suma 0x02 y luego saca el resultado a pto b.

Salvé el archivo como .asm y adjunté el linker 16f84a.lkr. El programa .asm es como sigue:

----------
   LIST P=16F84A
   #include <p16F84a.inc>

porta   EQU      0x05   ;banco 0

portb   EQU      0x06   ;banco 0

estado   EQU      0x03   ;status
banco   EQU      5   ;bit de localidad status

   ORG 0   
   BSF estado,banco   ;pone a uno bit 5 status = banco 1
   MOVLW 0xff
   MOVWF TRISA   ; pto a es de entrada
   BCF estado,banco   ;pone a cero bit 5 status = banco 0
   MOVLW 0x00
   MOVWF TRISB   ; pto b es de salida

inicio   MOVF porta,W   ;carga W con pto a
   ADDLW 0x02   ;suma W + 0x02
   MOVWF portb   ;manda W a ptob
   GOTO inicio
   END
--------------

Según entiendo el código está bien, pero me marca el sig. error al construirlo:

-----------------
Deleting intermediary files... done.
Executing: "C:Archivos de programaMPLAB IDEMCHIP_Toolsmpasmwin.exe" /q /p16F84A "ptoayptob.asm" /l"ptoayptob.lst" /e"ptoayptob.err" /o"ptoayptob.o"
Message[302] C:TEMPORALPICBORRAPTOAYPTOB.ASM 14 : Register in operand not in bank 0.  Ensure that bank bits are correct.
Message[302] C:TEMPORALPICBORRAPTOAYPTOB.ASM 17 : Register in operand not in bank 0.  Ensure that bank bits are correct.
Executing: "C:Archivos de programaMPLAB IDEMCHIP_Toolsmplink.exe" "16f84a.lkr" "C:   emporalpicborraptoayptob.o" /o"ptoayptob.cof"
MPLINK 3.60, Linker
Copyright (c) 2003 Microchip Technology Inc.
Error - section ".org_0" can not fit the absolute section. Section ".org_0" start=0x00000000, length=0x00000014
Errors    : 1

BUILD FAILED: Mon May 03 15:19:08 2004
---------------

Por favor dígame alguien que estoy haciendo mal. Gracias.

Desconectado Fer_TACA

  • Moderadores
  • DsPIC33
  • *****
  • Mensajes: 4154
RE: Primer programa en MPLAB pic16f84a
« Respuesta #1 en: 04 de Mayo de 2004, 00:30:00 »
segun tengo entendido despues de:
Org 0
TE FALTA :
goto inicio
0RG 5
Inicio  y apartir de aqui tu programa
Todos los días se aprende algo nuevo.

Desconectado Micom

  • Colaborador
  • PIC24F
  • *****
  • Mensajes: 783
RE: Primer programa en MPLAB pic16f84a
« Respuesta #2 en: 04 de Mayo de 2004, 00:42:00 »
El error que te veo es que el estado,banco se deve de poner en "1" para iniciar tanto el portb como el porta y solo cuaando ellos ya estan inicializados se pone "0" en el estado,banco ademas debes de poner despues de tu org  "0" deves de poner un goto inicio y despues poner un org    04   y ademas no se si te fijaste que pusiste a porta como entrada y a portb como salida y dime como le entra el dato a porta con pulsadores? si es asi hay que hacer una rutina mas clara para que el pic sepa que es  lo que tiene que hacer bueno has los cambios y luego avisa como te fue. suerte.
El programador GTP USB PLUS es un super programador
GRACIAS dobles amigo SISPIC

Tan solo queda seguir sobreviviendo

Desconectado Fer_TACA

  • Moderadores
  • DsPIC33
  • *****
  • Mensajes: 4154
RE: Primer programa en MPLAB pic16f84a
« Respuesta #3 en: 04 de Mayo de 2004, 00:44:00 »
Vamos que tu programa quedaria asi:
Teb he marcado en rojo los cambios

----------
LIST P=16F84A
#include <p16F84a.inc>
porta EQU 0x05 ;banco 0

portb EQU 0x06 ;banco 0

Las dos lineas  que siguen si las quieres utilizar te falta un #define, pero segun te he puesto el codigo no las necesitas[/color]


estado EQU 0x03 ;status
banco EQU 5 ;bit de localidad status


ORG 0

goto inicio

ORG 5

inicio  BSF STATUSRO0 ;pone a uno bit 5 status = banco 1
MOVLW 0xff
MOVWF TRISA ; pto a es de entrada
BCF STATUS,RP0; pone a cero bit 5 status = banco 0
MOVLW 0x00
MOVWF TRISB ; pto b es de salida

Bucle MOVF porta,W ;carga W con pto a
ADDLW 0x02 ;suma W + 0x02
MOVWF portb ;manda W a ptob
GOTO bucle
END
Todos los días se aprende algo nuevo.

Desconectado Fer_TACA

  • Moderadores
  • DsPIC33
  • *****
  • Mensajes: 4154
RE: Primer programa en MPLAB pic16f84a
« Respuesta #4 en: 04 de Mayo de 2004, 00:57:00 »
Si quieres poner tus 2 lineas anteriores el programa te quedaria:
LIST P=16F84A
#include <p16F84a.inc>

#define   Banco_0   equ   bcf  STARUS,RP0
#define   Banco_1  equ    bsf  STATUS,RP0

ORG 0
goto inicio
ORG 5
inicio BSF STATUS,RP0 ;pone a uno bit 5 status = banco 1

MOVLW 0xff
MOVWF TRISA ; pto a es de entrada
BCF STATUS,RP0; pone a cero bit 5 status = banco 0
MOVLW 0x00
MOVWF TRISB ; pto b es de salida

Bucle MOVF porta,W ;carga W con pto a
ADDLW 0x02 ;suma W + 0x02
MOVWF portb ;manda W a ptob
GOTO bucle
END
 Por otra parte si incluyes el fichero "*.INC" no te hace falta declarar los puertos a y b pues ya van incorporados en el fichero "inc".
Ademas si es para simular con el MPLab en las entradas no te hacen falta retardos ya que los bits se cambian por software.; otro caso muy diferente será cuando lo quieras simular en tiempo real y si las entradas son por pulsadores, como dice nuestro colega Micom, tendrás que poner retardos para eliminar los rebotes que se producen al cerrar los pulsadores y/o interruptores.
espero que te sirva de ayuda

fermin
Todos los días se aprende algo nuevo.

Desconectado Fer_TACA

  • Moderadores
  • DsPIC33
  • *****
  • Mensajes: 4154
RE: Primer programa en MPLAB pic16f84a
« Respuesta #5 en: 04 de Mayo de 2004, 01:02:00 »
Con las prisas no cambie las lineas aqui estan, de todos modos funcionan igual


LIST P=16F84A
#include <p16F84a.inc>

#define Banco_0 equ bcf STARUS,RP0
#define Banco_1 equ bsf STATUS,RP0

ORG 0
goto inicio
ORG 5
inicio Banco_1;pone a uno bit 5 status = banco 1

MOVLW 0xff
MOVWF TRISA ; pto a es de entrada
Banco_0; pone a cero bit 5 status = banco 0
MOVLW 0x00
MOVWF TRISB ; pto b es de salida

Bucle MOVF porta,W ;carga W con pto a
ADDLW 0x02 ;suma W + 0x02
MOVWF portb ;manda W a ptob
GOTO bucle
END
Por otra parte si incluyes el fichero "*.INC" no te hace falta declarar los puertos a y b pues ya van incorporados en el fichero "inc".
Ademas si es para simular con el MPLab en las entradas no te hacen falta retardos ya que los bits se cambian por software.; otro caso muy diferente será cuando lo quieras simular en tiempo real y si las entradas son por pulsadores, como dice nuestro colega Micom, tendrás que poner retardos para eliminar los rebotes que se producen al cerrar los pulsadores y/o interruptores.
espero que te sirva de ayuda

fermin
Todos los días se aprende algo nuevo.

Desconectado adrian2a1

  • Colaborador
  • PIC12
  • *****
  • Mensajes: 75
RE: Primer programa en MPLAB pic16f84a
« Respuesta #6 en: 04 de Mayo de 2004, 01:56:00 »
En mi opinión lo teneís mal al volver al banco 0 antes de definir el puerto B como salida. Además no te hace falta linkarlo con que utilices el comando "Quickbuild ....." del menú "Proyect" en el MPLAB es suficiente. Tu programa debería ser como sigue:



   __CONFIG   _CP_OFF &  _WDT_OFF & _PWRTE_ON & _XT_OSC
   LIST      P=16F84A
   INCLUDE  <P16F84A.INC>

Constante  EQU   0x02

   ORG    0

   bsf   STATUS,RP0      ; Pone a 1 el bit 5 del STATUS. Acceso al Banco 1.
   clrf   TRISB         ; Las líneas del Puerto B configuradas como salidas.
   movlw   b"00011111"      ; Las 5 líneas del Puerto A configuradas como entradas.
   movwf   TRISA
   bcf   STATUS,RP0      ; Pone a 0 el bit 5 de STATUS. Acceso al Banco 0.
Principal
   movf    PORTA,W         ; Carga el registro de datos del Puerto A en (W).
   addlw   Constante      ; (W)=(PORTA)+Constante.
   movwf   PORTB         ; El contenido de W se deposita en el puerto de salida.
   goto    Principal      ; Crea un bucle cerrado e infinito.

   END            ; Fin del programa.

Desconectado ma-tec

  • Colaborador
  • PIC12
  • *****
  • Mensajes: 76
    • www.matec.es.tl
RE: Primer programa en MPLAB pic16f84a
« Respuesta #7 en: 04 de Mayo de 2004, 07:45:00 »
   LIST P=16F84A
   #include <p16F84a.inc>

porta  EQU    05h    ; banco 0
portb  EQU    06h    ; banco 0
estado  EQU   03h  ; status
banco    EQU  05h   ; bit de localidad status

; no ocupes tris es una instruccion pasada.
; solo cambio de banco el micro sabe que es tris

        ORG 0

      BSF estado,banco ;pone a uno bit 5 status = banco 1
      MOVLW 0xff
      MOVWF porta      ; pto a es de entrada
      MOVLW 0x00
      MOVWF porta      ; pto b es de salida
      BCF estado,banco ;pone a cero bit 5 status = banco 0


inicio    MOVF porta,W     ;carga W con pto a
      ADDLW 0x02       ;suma W + 0x02
      MOVWF portb      ;manda W a ptob
      GOTO inicio
  end

esta bien tu programa un solo detalle

 

LA CLAVE DEL EXITO ES SABER
PARA DONDE VA LA GENTE Y
LLEGAR PRIMERO.

Desconectado Fer_TACA

  • Moderadores
  • DsPIC33
  • *****
  • Mensajes: 4154
RE: Primer programa en MPLAB pic16f84a
« Respuesta #8 en: 04 de Mayo de 2004, 14:18:00 »
Tenias razon compis. Puse mal el regreso del banco antes de configurar el puertoB.
Son cosas de contestar en el curro de prisa y corriendo.
Pero ahora al revisar el código os tengo que dar la razon en lo de la linea BCF STATUS,RP0

Por lo demas el programa funciona
Saludos a todos,
Fermín
Todos los días se aprende algo nuevo.

Desconectado migsantiago

  • Colaborador
  • DsPIC33
  • *****
  • Mensajes: 8257
    • Sitio de MigSantiago
RE: Primer programa en MPLAB pic16f84a
« Respuesta #9 en: 04 de Mayo de 2004, 16:41:00 »
Orale pues chavos, muchas gracias por responder. Me llegaron a confundir poniendo cada uno un programa a cada rato jeje.

La verdad no le puse pulsadores ni interruptores ya que es mi primer programa en pic y sólo quería ver que lo compilara bien.

Gracias Fermín, Micom y Ma-tec.

Desconectado migsantiago

  • Colaborador
  • DsPIC33
  • *****
  • Mensajes: 8257
    • Sitio de MigSantiago
RE: Primer programa en MPLAB pic16f84a
« Respuesta #10 en: 04 de Mayo de 2004, 17:09:00 »
Analizando el programa me doy cuenta de que se debe poner un jump a la dirección 05 o a la 04 (org 04 ó 05).

¿Es necesario mandar siempre a la dirección 05 de memoria? He leído que es para evitar interrupciones o algo así.

Sólo me gustaría saber si es necesario ponerla siempre, y si es mejor poner 04 ó 05.

Desconectado Fer_TACA

  • Moderadores
  • DsPIC33
  • *****
  • Mensajes: 4154
RE: Primer programa en MPLAB pic16f84a
« Respuesta #11 en: 05 de Mayo de 2004, 03:43:00 »
Hola santiago:
Siempre es conveniente poner el  ORG 5, el org 4 solo lo debes de poner antes del ORG 5 si utilizas interrupciones, en caso contrario no es necesario.
Saludos
Fermin
Todos los días se aprende algo nuevo.

Desconectado migsantiago

  • Colaborador
  • DsPIC33
  • *****
  • Mensajes: 8257
    • Sitio de MigSantiago
RE: Primer programa en MPLAB pic16f84a
« Respuesta #12 en: 05 de Mayo de 2004, 09:19:00 »
OK, gracias Fermín.

Cualquier otra duda la pondré aquí.


 

anything