TODOPIC
Microcontroladores PIC => Primeros pasos - Iniciación a los microcontroladores => Mensaje iniciado por: escorpion151177 en 05 de Mayo de 2004, 13:39:00
-
hola a todos!
les cuento que estoy teniendo un problema cuando quiero
compilar mi programita .asm en el MPLAB. Realmente no se donde puede
estar el error es por eso que recurro a ustedes, a ver si me pueden
ayudar como lo han estado haciendo siempre.
mi programa tiene el siguiente formato:
list = p16f873
#include<p16f873.inc>
xxxxx equ 20h
yyyyy equ 21h
....
....
zzzzz equ 2fh
org 00
goto start
org 04
goto inter
org 05
INDEF ....
....
....
retlw0
start ....
....
....
movlw 0x90 ; abilito inerrupcion por RB0/INT
movwf INTCON
....
....
call BWRITE
....
call INDEF
....
end
BWRITE ....
....
....
call ....
....
call ....
....
retlw 0
inter ....
....
....
call ...
....
call ...
....
retfie
los errores qeu me APARECEN SON LOS SIGUIENTES
ERROR: ..... not previously defined (inter)
ERROR: ..... not previously defined (BWRITE)
y por ejemplo si yo a alguna otra subrutina la acomodo por encima de
la rutina principal encabezada por start. me aparecen mas errores de
este tipo.
Tengo bastantes subrutinas que invoco a traves del comando CALL pero
solo con BWRITE me pasa esto. Y me llama la atencion tambien lo del
llamado de interrupcion.
espero que me puedan dar una mano, a ver que opinan....
-
Hola:
No entiendo bien las instruciones que pones entre ORG 5 y start.
Puedes seer más explicito.
F.
-
En el MPLAB en la pantalla principal (la ùnica) te ubicas en Help/topics/MPASM assembler/troubleshooting y allì aparece el còdigo que ha generado el error ò warning ò messages ò limitations, explicando en que consiste la falla, y de allì hay pistas para buscarlo en el programa principal.
-
entre ORG5 y start, hay una subrutina llamada INDEF, a la cual la invoco dentro del programa con la funcion CALL.
para que me entiendan y no escribir todo el programa que es largo es que lo puse asi como resumido...
LO QUE QUISE PONER ES QUE DENTRO DE LA RUTINA PRINCIPAL "START", LLAMO A VARIAS SUBRUTINAS A TRAVEZ DE CALL.... Y NO SE PORQUE A LA SUBRUTINA "BWRITE" NO ME LA PERMITE, ME DICE QUE NO ESTA PREDEFINIDA. LO MISMO CON "INTER" QUE LO QUIERO USAR COMO INTERRUPCION.
RECIEN ESTUBE LEYENDO LA HOJA DE DATOS, PUEDE SER QUE EL
"PLATCH" TENGA ALGO QUE VER EN ESTO..., ME PARECE QUE POR AHI VIENE MI PROBLEMA....
-
si el programa es largo y te pasas de página debes realizar el cambio por software. tambien debes de tener en cuenta que no se pueden anidar más de 8 subrutinas pues si no la pila se te desborda y a la hora de regresar al punto donde se produjo la llamada con call ya no la encuentra.
F.
-
Seria bueno que copiaras el programa completo, porque asi es dificil ver el error. Aparentemente es que estas haciendo llamadas a etiquetas no definidas y me parece que el "end" no puede ir ahi donde lo pusiste, tiene que ir al final de todo el codigo.
-
Es difícil ver el error así. Por qué no copias el programa completo?
-
El MPLab solo va a compilar hasta que encuentra END, todo lo que pones despues no lo compila y por tanto te salen esos errores.