Buenas noches amigos del foro, espero que todos se encuentren bien.
Primero que nada quiero agradecer a todos por su ayuda desinteresada y de manera especial a los compañeros torres.electrónico, unmonje y D@rkbytes por su tiempo y paciencia.
He leído lo que me recomendaron, es decir sobre las interrupciones y lo puse en práctica, pero no obtuve los resultados deseados, debe ser por mi falta de experiencia, pero valió la pena porque aprendí algo nuevo en el mundo de la programación de PICs con PBP.
Finalmente resolví mi problema colocando un sensor (fin de carrera, etc.) en cada piso y con eso asunto solucionado en cuanto a la llegada al piso.
El paso siguiente será intentar implementar un programa para manejo de dirección, es decir subir y bajar, luego el control de puerta, etc.
Espero contar con su ayuda si tropiezo con alguna dificultad y tengo alguna inquietud.
Adjunto dejo esquema y programa.
Cordial saludo!
¿ Como funciona una interrupción ?
Se debe aclarar que es una tarea relativamente compleja, muy detallada, pero muy eficaz a la vez.
En ella pierde el programador el control lineal del programa, para ganar en eficacia y seguridad.
Los dispositivos que aceptan este tipo de recursos, lo hacen de varias manera pero todos se comporta de manera semejante al ejemplo que describo a continuación a saber :
1- Se lee toda la
documentación respecto de las
interrupciones en la
hoja de datos del dispositivo elegido.
2- En la hoja de datos se aclaran los diferentes tipos de interrupciones de ese dispositivo (PIC, micro, etc)
3- En la hoja de datos figuran las
dirección de memoria donde se
atienden ESAS interrupciones.
4- En muchas
PICs simples, por ejemplo, esa
dirección de memoria suele ser
0x0004 hexa del
banco 0 de memoria. En otros micros, hay varias direcciones de salto, varias interrupciones o todo es mas complejo.
5- La interrupción es
inmediata y ocurre por
hardware inmediatamente, ni bien se cumpla la
condición de salto, por ende cuando se salta a la interrupción, al llegar a ella lo primero que se hace es guardar todos los
registros de memoria, con los que se estaba trabajando, al momento de la interrupción.
Eso se hace con la instrucción
PUSH X,RX , que guarda el registro
X del Pic en el
STACK RX1 por ejemplo.
6- Terminado los PUSH, se escribe el codigo donde se resuelve la interrupción. Se termina relevando el bit de interrupción y antes de retornar al lugar donde se estaba ejecutando el codigo de programa anterior, se deben recuperar los datos con los que se estaba trabajando mediante las instrucciónes
POP RX1,X que hubiera, finalmente se ejecuta la instrucción
RETURN INT para volver al programa principal, como si nada hubiera ocurrido.
Ver abajo
ver esto