TODOPIC
Microcontroladores PIC => Lenguaje C para microcontroladores PIC => Mensaje iniciado por: C4_ESP en 21 de Febrero de 2006, 06:04:00
-
Hola todos:
Lo primero espero no haber repetido un link ya existente pues llevo 1 hora en la busqueda y no encuentro nada.
Bueno al grano, quiero generar interrupciones en dichos micros con dicho compilador pero en el manual de microchip sólo encuentro lo siguiente:
ClosePORTB Disable the interrupts and internal pull-up resistors for PORTB.
CloseRBxINT Disable interrupts for PORTB pin x .
DisablePullups Disable the internal pull-up resistors on PORTB.
EnablePullups Enable the internal pull-up resistors on PORTB.
OpenPORTB Configure the interrupts and internal pull-up resistors on PORTB.
OpenRBxINT Enable interrupts for PORTB pin x .
Vamos que lo único que he podido hacer con esas funciones es...
#include <p18f442.h>
#include <portb.h> //libreria de interrupciones del puerto B
void main(void)
{
for( ;; ) //bucle infinito
{
OpenPORTB( PORTB_CHANGE_INT_ON & PORTB_PULLUPS_ON); //Configure the interrupts and internal pull-up resistors on PORTB.
}
}
Con esta función habilito las interrupciones en el puertob pero donde y como implemento mi función de interrupción...
Espero que algún buen samaritano me ayude pues o esto es más difici que encontrar una aguja en un pajar o estoy exo un lio...y creo que es lo segundo

-
Hola, pues para atender a las interrupciones con C18, ya que las habilitaste y todo eso, tenemos:
#pragma interruptlow ‘nombre-función’
Indica al compilador que ‘nombre-función’ es la rutina de servicio de atención a la
interrupción con prioridad baja.
• Utiliza la pila software para guardar el contexto.
• Sale de la interrupción con el retorno normal.
• Sobrecarga de 10 acceso a WORD respecto a I. con alta prioridad.
• Se pueden encadenar. Indicarlo por software al procesador.
#pragma interrupt ‘nombre-función’
Indica al compilador que ‘nombre-función’ es la rutina de servicio de atención a la
interrupción con prioridad alta.
• Utiliza los registros SHADOW para guardar el contexto.
• Sale de la interrupción con un retorno rápido.
• Se usan para secciones críticas en tiempo.
Pero para ello debes definir el vector de interrupcion como en el ejemplo siguiente:
1. #include <p18f452.h>
2. void low_isr(void);
3.
4. // configuro el vector de interrupción LOW
5. #pragma code low_vector=0x18
6. void low_interrupt(void) {
7. _asm GOTO low_isr _endasm
8. }
9.
10. // Esta es la Rutina de Servicio de la Interrupción
11. #pragma interruptlow low_isr
12. void low_isr (void) {
13. // instrucciones
14. }
-
eeeeeeeeeeeeeehhhhhhhh, ummmmmmmmmmmmmmmmm
![Llorica Llorica]()
![Llorica Llorica]()
![Llorica Llorica]()
![Llorica Llorica]()
![Llorica Llorica]()
![Llorica Llorica]()
![Llorica Llorica]()
Muchas gracias por la información, lo probaré, pero de donde has sacado toda la información ya que en el manual de microchip no viene, me quedo flipao, porque o una de dos sois unos cracks o naceis ya con toda esa información...
Haber si me puedes decir donde encontrar un manual o algún sitio donde venga todo eso y más como timers, TX/RX, etc...
Muchas gracias, ya pensaba que nadia sabia hacer esto 

-
Hola.
Je je je , no estoy seguro de que manual hablas de microchip, pero en el que yo tengo si viene, lo unico que hice fue colocarlo en español. Ojala hubiera nacido con todo ese conocimiento
.
Aqui te dejo algunos Links:
http://www.microchip.com/c18
y esta es la guia que yo solia ocupar, porque ahora estoy en CCS
http://ww1.microchip.com/downloads/en/devicedoc/mplab_c18_users_guide_51288j.pdf
-
Además de estar la información en las datasheet, el C18 trae varios ejemplos donde te puedes dar cuenta como trata las interrupciones.
Yo aprendí con eso.
Saludos