TODOPIC
Microcontroladores PIC => Lenguaje C para microcontroladores PIC => Mensaje iniciado por: pikman en 22 de Septiembre de 2003, 21:48:00
-
Hola,
Bueno para poder superar lalectura de la trama de bits del UM3750 tuve que hacer una rutina en asm, esta me demando retardos de presicion aceptable, nunca habia hecho alguna experiencia mezclando codigo, me encontre con un problema, como hago llamar una rutina en C desde el ASM?, por ejemplo en mi asm tengo
call medio_pulso
si hago esto afuera del asm , lo compila pero no vuelve a donde llame
medio_pulso : {
delay_us(300);
}
Muy lindo seria que funcione, no entiendo porque lo compila pero lo manda para cualquier lado, bueno si alguien puede ayudarme, es solo por practicidad pues de otro modo tengo que hacer loops o usar algun timer para los retardos en asm,
un saludo al DREAM TEAM
Ariel
-
Pues la verdad, en C incluir rutinas de asm sí, pero al revés nunca me lo había planteado. Si no quieres calentarte la cabeza calculando valores para los retardos, existen unos programitas que generan el código asm para una determinada temporización (pic-loops y pic-delayer, creo recordar que se llamaban los que yo tengo)
Un saludo
-
Hola POCHER,
Pues si hay una forma
suponemos esto
#asm
movlw oxaa
movwf registro
call delay_100
#endasm
delay_100 :
delay_ms (100)
#asm
sigue el asm
#endasm
y asi funciona perfectamente sin tener que hacer los fastidiosos loops de delay, aunque yo personalmente para los delays prefiero usar los timers, pero bueno evacuada la duda.
saludos
Ariel
-
Buen truco para no tener que calcular temporizaciones con bucles anidados. Esto se puede hacer gracias al compilador de C, es una gran ventaja usar un compilador de C.
Oye una pregunta, y si quisieras que una vez realizada la temporización regresara a la instrucción que hubiese detrás del CALL.
Quizá esto:
.
.
.
CALL delay_100
más instrucciones
#endasm
delay_100: delay_ms(100);
#asm
RETURN
#endasm
¿Lo has probado?
Un saludo
-
Hola, si debe funcionar solo que no hace falta el return, agragandole los : a la etiqueta te permite llamarla desde el asm y el retrun lo hace solo
saludos
Ariel