Autor Tema: Pasar codigo de un pic a otro  (Leído 3972 veces)

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

Desconectado huntergti

  • PIC12
  • **
  • Mensajes: 62
Pasar codigo de un pic a otro
« en: 08 de Noviembre de 2007, 17:37:33 »
Buenas, muchos de aqui me conocereis ya y sabreis q he pasado del pic 16f84a al 18f4550. efectivamente es un salto vertiginiso, pero las circunstacncias me han obligado. despues de superar mi problema con el lcd y de saber mas o menos como utilizar el conversor A/D vengo a otro problema. Tengo la mayoria de mi codigo hecho en ensamblador y con el pic 16f84a y claro dicho codigo debo cambiarlo al nuevo pic. el nuevo pic no le he encontrado cabecera .inc por lo que lo paso a c, pero al pasarlo ciertas instrucciones me dan erroneas un ejemplo (y del cual no he conseguido salir es esta: btfss PORTA,0  me da error diciendo esto :"Expecting an opcode mnemonic", que no tengo ni idea que significa. he mirado el datasheet del 18f4550 y dice que se le peude añadir un uno y cero al final, es decir, asi btfss PORTA,0,0 (ó 1), pero ese ultimo 0 (ó 1) no se para que sirve e incluso poniendolo me da error. Alguna ayuda de como poder convertir esto al nuevo pic sin tener que variarlo todo? por cierto he añadido la linea #asm y #endasm. espero respuestas, un saludo gracias

Desconectado maunix

  • Moderadores
  • DsPIC33
  • *****
  • Mensajes: 4751
    • Mi Sitio Web Personal
Re: Pasar codigo de un pic a otro
« Respuesta #1 en: 08 de Noviembre de 2007, 17:59:16 »
Buenas, muchos de aqui me conocereis ya y sabreis q he pasado del pic 16f84a al 18f4550. efectivamente es un salto vertiginiso, pero las circunstacncias me han obligado. despues de superar mi problema con el lcd y de saber mas o menos como utilizar el conversor A/D vengo a otro problema. Tengo la mayoria de mi codigo hecho en ensamblador y con el pic 16f84a y claro dicho codigo debo cambiarlo al nuevo pic. el nuevo pic no le he encontrado cabecera .inc por lo que lo paso a c, pero al pasarlo ciertas instrucciones me dan erroneas un ejemplo (y del cual no he conseguido salir es esta: btfss PORTA,0  me da error diciendo esto :"Expecting an opcode mnemonic", que no tengo ni idea que significa. he mirado el datasheet del 18f4550 y dice que se le peude añadir un uno y cero al final, es decir, asi btfss PORTA,0,0 (ó 1), pero ese ultimo 0 (ó 1) no se para que sirve e incluso poniendolo me da error. Alguna ayuda de como poder convertir esto al nuevo pic sin tener que variarlo todo? por cierto he añadido la linea #asm y #endasm. espero respuestas, un saludo gracias

huntergti vamos por partes como diría jack.

1) El .INC del 18F4550 lo debieras tener en tu carpeta del MASM! fíjate por favor que ahí debiera estar.

2) Como has adivinado bien el salto de un 16F84A a un 18F4550 es te diría 'gigantesco' y de allí los inconvenientes que estás teniendo.

El error que te da es de que no entiende la instrucción.  MNEMONIC es en castellano MNEMONICO.  BTFSS es un mnemónico por ejemplo, te paso a explicar esa instrucción en particular

La sintaxis es:

BTFSS  f, b, a

f es el registro.
b es el bit que quieres testear (de 0 a 7)
a es un indicador de si el registro está en ACCESS RAM o si está en BANKED RAM, es decir si es un registro ubicado en una posición de memoria que se esté accediendo con el registro BSR.  en B uno le pasa un valor que es de 8 bits, es decir que solo se direcciona una página de memoria ram.  En el registro BSR debe estar previamente cargado qué página es.  Entonces si es una posición de memoria que no sea de access ram (esto lo puedes ver en el datasheet qué registros estan en access ram y cuales no) , debes antes setear el BSR y listo.

No te la quiero complicar por ahora pero si usarás un puerto básicamente sería

    BTFSS PORTA, b, 0


y asunto solucionado.

para un registro que se llamae MIREGISTRO que esté en el banco 1 sería


    movlb   .1    ;carga 1 en el BSR
    btfss   MIREGISTRO,b,1


Espero haberte aclarado mas el tema.

- La soberbia de un Einstein es entendible.. la de un salame es intolerable (A.Dolina)
- En teoría no hay diferencia entre la teoría y la práctica. En la práctica... si la hay.
- Lee, Lee, Lee y luego pregunta.(maunix)
- Las que conducen y arrastran al mundo no son las máquinas, sino las ideas (V. Hugo)
- Todos los hombres se parecen por sus palabras; solamente las obras evidencian que no son iguales.(Moliere)
- Todo debería ser hecho tan simple como sea posible pero no mas simple que eso.(A.Einstein)

Desconectado huntergti

  • PIC12
  • **
  • Mensajes: 62
Re: Pasar codigo de un pic a otro
« Respuesta #2 en: 11 de Noviembre de 2007, 17:18:37 »
LLevas razon JCC40 pero los foreros me han ayudado mucho siempre y a veces por mas que lea de un datasheet no me entero bien (sobre todo este  q esta en ingles). de todas formas me he puesto manos a la obra y estoy repasandolo todo mejor y de forma mas tranqila. Mi principal problema es q en esto no tengo todo el tiempo del mundo, pues lo debo presentar para un proyecto de fin de carrera y no es lo mismo dos ojos leyendo q 8, de los cuales 6 ya saben de lo que va el asunto. En cuanto a lo que me explicaste maunix, pues he probado lo que has dicho y sigue dandome el error. esta semana rapasare la parte del datasheet donde habla de esos bancos y si sigo con el mismo problema paso el codigo para ver como podeis ayudarme. Muchas gracias, nos vemos pronto

Desconectado huntergti

  • PIC12
  • **
  • Mensajes: 62
Re: Pasar codigo de un pic a otro
« Respuesta #3 en: 13 de Noviembre de 2007, 14:46:38 »
Buenas otra vez. Por fin he conseguido escribir el codigo en ensamblador y me ha compilado (aunque me da warning no se bien por que) y cuando voy a simularlo no funciona como  qiero.Me explico, configuro el trisa con 0x03 para que el porta0 y el porta1 sean entradas que yo pueda simular con el stimulus controller del mplab, asi que lo preparo todo poniendo el stimulus y configurando ra0 con toogle y haciendo lo propio con el porta1, pero cuando le doy al lado para que entre la señal el porta ni se inmuta y sigue a 0, eso por que es?. Os paso el inicio de codigo por si veis algo que correponde

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 = SOFT, VREGEN = OFF
   CONFIG   WDT = OFF ,WDTPS = 1,MCLRE = ON,PBADEN = OFF,LVP = OFF,XINST = OFF,DEBUG = OFF


   peso1      equ   0x10   ;mirar posicion de memoria   
   peso1_aux   equ   0x11
   peso2      equ   0x12
   peso2_aux   equ   0x13
   peso3      equ   0x14
   peso3_aux   equ   0x15
   aux      equ   0x17      ;para restar peso
   peso_defuera   equ    0x16     ;que deberá de darmelo la rutina anterior a esta, concretamente la que trate el conversor A/D

   ORG    0
   goto   Inicio         ; Programa principal

Inicio:
   
   clrf   TRISB         ;Toda la Puerta B se configura como salida.
   movlw   0x03
   movwf   TRISA
      
Por cierto lo que comentaba en mis post anteriro se solucionaba poneidnole los dos puntos  a las etiquetas, que no tenia ni idea. Otra cosita mas, he intentado poner NOPBADEn, pero me da error y realmente no se por que, espero vuestra respuesta porque la necesito. Gracias