0% encontró este documento útil (0 votos)
14 vistas2 páginas

Configuración PIC: Puertos y Timer

El documento es un código en lenguaje C para un microcontrolador que configura el oscilador y los puertos de entrada/salida. Se establecen interrupciones para manejar botones que controlan salidas digitales en función de su activación. El código incluye la configuración de un temporizador para gestionar los retardos necesarios al activar las salidas.
Derechos de autor
© © All Rights Reserved
Nos tomamos en serio los derechos de los contenidos. Si sospechas que se trata de tu contenido, reclámalo aquí.
Formatos disponibles
Descarga como TXT, PDF, TXT o lee en línea desde Scribd
0% encontró este documento útil (0 votos)
14 vistas2 páginas

Configuración PIC: Puertos y Timer

El documento es un código en lenguaje C para un microcontrolador que configura el oscilador y los puertos de entrada/salida. Se establecen interrupciones para manejar botones que controlan salidas digitales en función de su activación. El código incluye la configuración de un temporizador para gestionar los retardos necesarios al activar las salidas.
Derechos de autor
© © All Rights Reserved
Nos tomamos en serio los derechos de los contenidos. Si sospechas que se trata de tu contenido, reclámalo aquí.
Formatos disponibles
Descarga como TXT, PDF, TXT o lee en línea desde Scribd

#include <xc.

h>
#pragma config PLLSEL = PLL4X, CFGPLLEN = OFF, CPUDIV = CLKDIV3, LS48MHZ = SYS48X8
#pragma config FOSC = INTOSCIO, PCLKEN = ON, FCMEN = OFF, IESO = OFF
#pragma config nPWRTEN = OFF, nLPBOR = OFF
#pragma config WDTEN = OFF
#pragma config PBADEN = OFF, MCLRE = ON
#pragma config STVREN = ON, LVP = ON, ICPRT = OFF, XINST = OFF

#define _XTAL_FREQ 16000000 //16MHz.

void main(void) {
//Configuración del oscilador.
OSCCON = 0x70;

//Configuración de puertos.
ANSELA = 0x00;//Puerto A como digital.
ANSELB = 0x00;//Puerto B como digital.

TRISA = 0x00; //Puerto A como salida.


LATA = 0x00; //Limpiar el puerto A.

TRISBbits.RB0 = 1; //RB0 como entrada (botón 1).


TRISBbits.RB1 = 1; //RB1 como entrada (botón 2).
TRISBbits.RB2 = 1; //RB2 como entrada (botón 3).

INTCON2bits.RBPU = 0; //Habilito Pull Up del puerto B.

TMR0 = 65223; //Valor del timer.


T0CON = 0x87; // Configuración del timer.
INTCONbits.GIE = 1; //Habilitar interrupciones globales.
INTCONbits.TMR0IE = 1; //Habilitar el timer 0.
INTCONbits.TMR0IF = 0; //Limpiar bandera del timer 0.
INTCONbits.PEIE = 1; //Habilitar interrupciones periféricas.

while (1) {
//Instrucciones a ejecutar.
}
return;
}
//Interrupciones.
void __interrupt() servo(){
if (INTCONbits.TMR0IF){ //Si se activó la interrupción.
if (PORTBbits.RB0 == 0){ //Si se pulsa el botón 1.
LATAbits.LATA0 = 1; //Activo RA0.
__delay_us(1500); //Retardo de 2500 us.
LATAbits.LATA0 = 0;
TMR0 = 65262; //Valor del timer.
INTCONbits.TMR0IF = 0; //Limpiar bandera del timer.
}

else if (PORTBbits.RB1 == 0){


LATAbits.LATA1 = 1; //Activo RA1.
__delay_us(2500); //Retardo de 1500 us.
LATAbits.LATA1 = 0; //Desactivo RA1.
TMR0 = 65262; //Valor del timer.
INTCONbits.TMR0IF = 0; //Limpiar bandera del timer.
}

else if (PORTBbits.RB2 == 0){ //Si se pulsa el botón 2.


LATAbits.LATA2 = 1; //Activo RA1.
__delay_us(2500); //Retardo de 1500 us.
LATAbits.LATA2 = 0; //Desactivo RA1.
TMR0 = 65262; //Valor del timer.
INTCONbits.TMR0IF = 0; //Limpiar bandera del timer.
}
}
}

También podría gustarte