TODOPIC
Microcontroladores PIC => Todo en microcontroladores PIC => Mensaje iniciado por: huntergti 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
-
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.
-
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
-
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