Interrupción USART PIC


Compartir: Share on Facebook1Tweet about this on TwitterShare on Google+0Share on Tumblr0Share on LinkedIn0

Interrupción USART PIC, es necesario comprender la utilización del módulo USART para la comunicación serial del microcontroladore PIC, este es un tema que se ha tratado y se puede ver aquí, también se han realizado algunos ejemplo sencillos sin el uso de la interrupción USART PIC que se pueden ver aquí, de no ser así se recomienda antes de continuar revisar los enlaces indicados.

En esta sección se comenta como utilizar la interrupción USART PIC, que puede ser producida cuando se transmite o se recibe un caracter al realizar la comunicación serial utilizando el módulo USART PIC.

La forma de trabajo del módulo USART PIC a utilizar en esta sección será en modo asíncrono, la programación para los ejemplos de la interrupción USART PIC será realizada en el XC8, los ejemplos serán para la comunicación serial entre el microcontrolador PIC y el ordenador, siendo la idea la misma si se quiere realizar la comunicación serial entre microcontroladores, solo hay que estar muy atentos a las conexiones a realizar.

Se utilizará como referencia el PIC16F877A, en caso de utilizar otro microcontrolador PIC que cuente con un módulo USART PIC el procedimiento será muy similar, siempre hay que estar atentos a cuales son los pines RX y TX del microcontrolador utilizado, los registros involucrados en la comunicación serial y en este caso los registros involucrados en la interrupción USART PIC, por ello siempre hay que tener a mano la hoja de datos del PIC.

Interrupción USART PIC

Para habilitar la interrupción USART PIC los bits 7 y 6 del registro INTCON se pondrán a 1 en el XC8 esto se hace así:

INTCON=0b11000000;//Habilitación del uso de las interrupciones

Para habilitar la interrupción USART PIC al completar la recepción de un caracter, del registro PIE1 se pone a 1 su bit5, lo que en el XC8 se hace así

PIE1bits.RCIE=1;//habilita interrupción por recepción USART PIC.

El bit5 del registro PIR1 que es de solo lectura, se pondrá a 1 automáticamente para indicar que se ha producido una interrupción USART PIC al completar la recepción de un caracter en el registro RCREG, cuando se lea el caracter recibido este bit se pondrá automáticamente a 0 para seguir detectando la interrupción USART PIC por la recepción de datos.

Para habilitar la interrupción USART PIC al completar la transmisión de un caracter, del registro PIE1 se pone a 1 su bit4, lo que en el XC8 se hace así

PIE1bits.TXIE=1;//habilita interrupción por transmisión USART PIC.

El bit4 del registro PIR1 que es de solo lectura, se pondrá a 1 automáticamente para indicar que se ha producido una interrupción USART PIC por la transmisión del caracter que se encontraba en el registro TXREG, cuando se cargue un nuevo caracter en el registro TXREG este bit se pondrá automáticamente a 0 para seguir detectando la interrupción USART PIC por la transmisión de datos.

Interrupción USART PIC en el XC8

Para programar la interrupción USART PIC en el XC8, se realizará dentro de la función interrupt de la siguiente manera:

void interrupt nombre_funcion(){//rutina de atención a las interrupciones

     if(PIR1bits.RCIF==1){  // interrupción USART PIC por recepción

               dato=RCREG;     //a dato de tipo char se le asigna el valor del registro RCREG

                                        //otras tareas a realizar

     }

    if(PIR1bits.TXIF==1){  // interrupción USART PIC por transmisión

              TXREG = caracter;   //en el registro RCREG se carga el caracter a transmitir

                                             //otras tareas a realizar

     }

}

Interrupción USART PIC ejemplos

Interrupción USART PIC ejemplo 1

En este primer ejemplo se  realizará la comunicación serial entre el microcontrolador PIC16F877A y el ordenador a 9600 baudios asíncrona 8 bits, se encenderá y apagará un led conectado al pin RD1 del microcontrolador, al presionar la tecla + del ordenador se encenderá el led, al presionar la tecla – del ordenador se apagará el led, se utilizará el TERA TERM para realizar la comunicación. La recepción del  caracter transmitido por el ordenador será por interrupción USART PIC.

El circuito utilizado es el siguiente:

interrupción Usart pic ejemplo 1 circuito

En el código realizado con el XC8 se creará una función para iniciar el módulo USART PIC, en la interrupción por recepción del PIC se leerá el caracter transmitido por el ordenador, para que en el ciclo del programa se encienda o apague el led.

Interrupción USART PIC ejemplo 2

En este segundo ejemplo se  realizará la comunicación serial entre el microcontrolador PIC16F877A y el ordenador a 9600 baudios asíncrona 8 bits, se transmitirán los caracteres de la A a la Z uno a la vez cada segundo, que serán vistos en pantalla utilizando el TERA TERM en la comunicación serial. La transmisión de los caracteres hacia el ordenador por la interrupción USART PIC por transmisión, se conectará además un led en el pin PD1 que cambiará de estado cada 200ms.

El circuito utilizado es el siguiente:

interrupción Usart pic ejemplo 2 circuito

En el código realizado con el XC8 se creará una función para iniciar el módulo USART PIC, en la rutina de atención a las interrupciones de la interrupción por transmisión del PIC, se transmitirá al ordenador un caracter cada segundo y se deshabilitará esta interrupción, en el ciclo del programa se cambiará el estado del led conectado al pin PD1, con la ayuda de una variable auxiliar se habilitará el uso de la interrupción USART PIC por transmisión cada segundo y se incrementará el valor del caracter a transmitir  al ordenador mediante la interrupción.

Atte:MrElberni.

Compartir: Share on Facebook1Tweet about this on TwitterShare on Google+0Share on Tumblr0Share on LinkedIn0