/* Mayo de 2017
* Tarjeta: DM164130-9
* Microcontrolador: PIC18F14K22
* IDE: MPLAB X IDE v.3.60
* Compilador: MPLAB XC8 Compiler v1.42
Programa que produce el parpadeo cíclico del LED DS1 de la tarjeta DM164130-9
(el LED está conectado al pin RC0 del microcontrolador).
*/
#include <xc.h> // Archivo de cabecera genérico
#define _XTAL_FREQ 16000000 // Frecuencia de reloj = 16 MHz
#pragma config FOSC = IRC // Selecciona el oscilador RC interno
void main(void) {
OSCCON |= 0b01110000; // Establece una frec. de reloj de 16 MHZ
TRISCbits.TRISC0 = 0; // Configura el pin RC0 como salida
while(1){
__delay_ms(1000); // Retardo de 1 segundo
LATCbits.LATC0 ^= 1; // Conmuta el estado del LED
}
}
➤ Circuito
No es necesario ningún componente externo a la tarjeta DM164130-9, dado que se utiliza un LED de ésta. En la siguiente imagen puede verse la tarjeta, alimentada a 5 V mediante una fuente y conectada al grabador PICkit 3. El programa se puede ejectutar tanto con el grabador conectado como desconectado.
No es necesario ningún componente externo a la tarjeta DM164130-9, dado que se utiliza un LED de ésta. En la siguiente imagen puede verse la tarjeta, alimentada a 5 V mediante una fuente y conectada al grabador PICkit 3. El programa se puede ejectutar tanto con el grabador conectado como desconectado.
➤ Observaciones
- En la entrada anterior del blog está explicado cómo grabar un programa en el microcontrolador.
- #include <xc.h> : xc.h es un archivo de cabecera genérico, el cual permite acceder a los registros del microcontrolador y el uso de macros.
- #define _XTAL_FREQ 16000000: es la frecuencia de reloj establecida mediante la orden OSCCON |= 0b01110000. Se necesita para utilizar la macro __delay_ms().
- #pragma config FOSC = IRC: selecciona el oscilador RC interno para generar la señal de reloj del microcontrolador. En realidad, con esta instrucción, se escribe '1000' en los bits 3-0 del registro CONFIG1H (ver siguiente figura). Los demás bits quedan con su valor por defecto. Esta orden permite que se pueda utilizar el microcontrolador sin conectarle un cristal externo.
- OSCCON |= 0b01110000: establece una frecuencia de reloj interna de 16 MHz. Esta instrucción escribe '111' en los bits 6-4 del registro OSCCON y deja los demás bits intactos.
- TRISCbits.TRISC0 = 0: el registro TRISC permite determinar los pines del puerto C del microcontrolador que van a funcionar como salidas y los que lo van a hacer como entradas. En este caso, se configura el pin RC0 como salida.
- LATCbits.LATC0 ^= 1: para poner los diferentes pines del puerto C a '1' o a '0' hay que acceder al registro LATC. El programa utiliza el operador bit a bit XOR (bitwise XOR) para cambiar el estado del pin RC0 y dejar el estado de los demás pines intacto. Con esto se consigue encender y apagar el LED.