/**************************************************************************************/
/* ** Prueba de comunicacion del modulo USART con Interrupcion de Alta Prioridad
/* ** Encendemos 2 leds conectados al PORTB bits <0:1>
/* ** LED ROJO ----> RB0
/* ** LED AZUL ----> RB1
/* ** Letra R ----> Led Rojo
/* ** Letra A ----> Led Azul
/* ** Autor: Miquel Servera
/* ** Fecha: 25-Abril-2011
/* ** Modelo de Micro: PIC18F4550
/*************************************************************************************/
/* ** Archivo con definicion de registros y bits del microcontrolador elegido ** */
#include <p18f4550.h>
/* ** Include para el USART ** */
#include <usart.h>
/* ** Configuracion de los Fuses del microcontrolador ** */
#pragma config FOSC = XT_XT,FCMEN = OFF,IESO = OFF,CPUDIV = OSC1_PLL2
#pragma config PWRT = ON,BOR = OFF,BORV =0,WDT = OFF
#pragma config WDTPS = 32768,CCP2MX = OFF,PBADEN = OFF,LPT1OSC = OFF
#pragma config MCLRE = OFF,STVREN = OFF,LVP = OFF,ICPRT = OFF
#pragma config XINST = OFF,DEBUG = OFF,CP0 = OFF,CP1 = OFF
#pragma config CP2 = OFF,CP3 = OFF,CPB = OFF,CPD = OFF
#pragma config WRT0 = OFF,WRT1 = OFF,WRT2 = OFF,WRT3 = OFF
#pragma config WRTC = OFF,WRTB = OFF,WRTD = OFF,EBTR0 = OFF
#pragma config EBTR1 = OFF,EBTR2 = OFF,EBTR3 = OFF,EBTRB = OFF
/* ** Declaracion de Funciones a utilizar ** */
void ISRRecepcion(void);
/* ** Variables de uso general ** */
volatile char Dato,kbhit;
/* ** Seccion de codigo a partir de la direccion 0x0008 ** */
#pragma code interrupcion = 0x0008
void VectorInterrupcion(void)
{
_asm goto ISRRecepcion _endasm
}
#pragma code // Cerramos seccion.-
/* ** Rutina de Interrupcion ** */
#pragma interrupt ISRRecepcion
void ISRRecepcion(void)
{
if(PIR1bits.RCIF==1)
{
Dato=getcUSART(); // Leemos dato recibido.-
kbhit=1; // Indicamos que se ha recibido un dato.-
PIR1bits.RCIF=0; // Borramos flag.-
}
}
/* ** Funcion MAIN ** */
void main(void)
{
TRISB=0x00;
LATB=0x00;
OpenUSART( USART_TX_INT_OFF &
USART_RX_INT_ON &
USART_ASYNCH_MODE &
USART_EIGHT_BIT &
USART_CONT_RX &
USART_BRGH_HIGH,12); // 19.200 baudios.-
kbhit=0;
RCONbits.IPEN=0; // Desabilitamos Prioridades.-
INTCONbits.PEIE=1; // Habilitamos Interrupcion de perifericos.-
INTCONbits.GIE=1; // Habilitamos Interrupcion Global.-
putrsUSART("Prueba de Comunicacion USART \r");
putrsUSART("Seleccione una opcion del Menu \r");
putrsUSART("\r");
putrsUSART("R: Led ROJO \r");
putrsUSART("A: Led AZUL \r");
putrsUSART("\r");
while(1)
{
while(kbhit==0){}; // Esperamos a recibir dato.-
kbhit=0;
switch(Dato)
{
case 0x52: // Letra R.-
LATB=0b00000001;
putrsUSART("Led ROJO ON \r");
break;
case 0x41: // Letra A.-
LATB=0b00000010;
putrsUSART("Led ROJO OFF \r");
putrsUSART("Led AZUL ON \r");
break;
}
}
}