TODOPIC
Microcontroladores PIC => Lenguaje Basic para microcontroladores PIC => Mensaje iniciado por: electronando en 24 de Julio de 2005, 16:34:00
-
que tal yo conosco lo principal de asembler en pics y al hacer la interrupcion entiendo lo de salvar los registros en el banco 0
Define INTHAND _Interrupcion
wsave var byte bank0 system " estos registros en banco 0 obligatorio
ssave var byte bank0 system
psave var byte bank0 system
ticks var byte bank0 system
Convert var byte bank0 system
segundos var byte bank0 system
minutos var byte bank0 system
pero esto de a la hora de reponerlos poner un comando que me hace intercambio de bits por q esto se usa claro esta pero eso de el swapf por q no se varios q sabemos asembler nos preguntamos eso , si supiera solo basic lo dejaria pasar por alto pero por favor una ayuda no se si el señor sispic estar por alli ya q de el saque estos codigos de otro asunto
miren aca esta la duda
SalInt
bcf INTCON , T0IF ; Resetea bandera de interrupcion por Timer0
bsf INTCON , GIE ; Activa interrupciones generales
movf psave,w ; restaura
movwf PCLATH
swapf ssave,w
movwf STATUS
swapf wsave,f
swapf wsave,w
retfie
EndAsm
no me cabe ese swapf por favor una respuesta y eso del pclath
tampoco aunque solo e trabajado con el pic 84a era el pc o contador de programa pero el pclath q vela en este entierro tiene no se deberian guardar los dos pcl el menos significativo y tb el pclath el mas sigificativo haber si me quito esta duda



![Llorica Llorica]()
-
Hola, lei tus dudas y a ver si te alaro algo... sabemos q el comando swapf lo q hace es intercambiar los 4 lsb con los 4 msb y guardarlo ya sea en el mismo registro(f) o en el registro de trabajo w. en resumen lo unico que hace es restituir el registro w. Pero puede ser sustituido por:
movf wsave,w
para no estar perdiendo el tiempo para restituirlo... Lo del pclath me parece...
es porque al ocurrir la interrupcion, se guarda en la pila la direccion donde ocurrio la interrupcion, entonces en la pila guardamos el pcl q sera restituido automaticamoente cuando terminemos nuestro codigo de interrupcion...Por ello solo guardamos la parte alta pclath, ya que hay nos indica en q pagina estamos, aunque con el 16f84 no lo necesitamos, pues solo cuenta con 1 sola pagina.
Espero haber aclarado tus dudas...
-
bueno gracias por la respuesta artifox eso del pclath me lo olia es q la verdad estaba probando las interrupciones algo simple y usando asembler funciona o pero
al poner lineas de asembler esta bien exquisito e pues no es como el mplab debes de ser bien riguroso al poner llas eriquetas no debajo de instrucciones asm sino el microcode te manda error en amarillo , y se cumplio lo q dijo el amigo sispic sobre de si estas usando un bucle por ejemplo
etiqueta:
led1=1
pause 1000
led1=0
pause 1000
goto etiqueta
y la rutina de interrupcion
interrupcion:
asm
....rutina
endasm
led2=1
pause 5000
led2=0
asm
...regreso registros salvados
retfiee
endasm
me da una colgadera despues de interrumpido
q si esta prendido
y lo interrumpo por el puerto pb0
sr prende led2
pero al final quedan los dos prendidos
osea se cuelga
aunque lo e slucionado pero de una manera que no me gusto pense que derepente habia otra
bueno gracias por las aclaraciones revisare mis apuntes
-
se puede solucionar y veo que dominas asm , solo echando el ojo a la rutina pause y veras los registros que has de salvar al entrar en la interrupcion y restaurar al salir.