Si, perdon, estoy usando el picc en el entorno mplab. Aqui os expongo el código, no se exactamente si la rutina de interrupción haría lo que se pretende.. pero lo mas importante es que no salta a ella, es decir que no se produce la interrupción. Disculpad que los comentarions no esten en castellano, pero dada la sencillez del código no creo que sean necesarios, no obstante preguntadme si no veis claro por que hago algo en concreto. Saludos!!
//Rebre y transmetre per interrupció
#include <stdio.h>
#include <pic16F87.h>
//Prototips de funció
void Init (void); //Inicialitza PSERIE i T1
void interrupt UART_ISR(void);
//Principal: superbucle-------------------------------------------
void main(void)
{
Init();
TRISB=0;
PORTB = 1;
TXREG = PORTB;
//TRMT=0;
RCIF=1; //Provoquem la primera transmissió
while(1);
}
//Funcions:-------------------------------------------------------
void Init(void)
{
//PIR1=0x00;
EEIE=1;
PEIE = 1;
GIE = 1;
RCIE=1;
TXIE=1; //Activem interrupcions
TXEN=1; //Activem el transmissor
CREN = 1; //Activem el recetor
TMR1L = 0x00; //Baudios
TMR1H = 0xFF;
TMR1ON = 1; //Activem el Timer 1
TMR1CS = 0; //Timer 1 mode temporitzador Fosc/4, rellotge intern
SYNC = 0; //Seleccionem mode de transmisió asíncron
}
//ISR USART-------------------------------------------------------
void interrupt UART_ISR(void)
{
if((RCIF)&(RCIE)){
TRISB=1; //Port B configurat com a port d'entrada
PORTB=RCREG; //El que hem rebut ho pasem al PORTB
RCIF = 1;
}
if((TXIF)&(TXIE)){
TRISB=0; //Port B configurat com a port d'eixida
TXREG=PORTB; //El que tenim al PORTB ho enviem
TXIF = 1;
}
}