Friday, March 1, 2013
Configuracion del oscilador INterno y uso de la libreria USART C18
#include
#include
//Fuses para trabajar con 48Mhz/////////
#pragma config FOSC = INTOSCIO_EC //usamos 8Mhz internos
#pragma config PLLDIV = 5 //PLL DIV 20Mhz/5=4Mhz
#pragma config CPUDIV = OSC1_PLL2 //CPUDIV1 96Mhz/2=48Mhz
#pragma config USBDIV = 1 //tRABAJAMOS CON USB CLOCK divido en 1
#pragma config VREGEN = OFF //Trabajamos sin regulador interno 3.3v para usb
#pragma config FCMEN = OFF, IESO = OFF
#pragma config PWRT = ON, BOR = OFF,BORV = 0
#pragma config WDT = OFF,WDTPS = 32768
#pragma config MCLRE = ON, LPT1OSC = OFF,PBADEN = OFF,CCP2MX = OFF
#pragma config STVREN = OFF,LVP = OFF,XINST = OFF,DEBUG = OFF
#pragma config CP0 = OFF,CP1 = OFF,CP2 = OFF
#pragma config CPB = ON, CPD = ON
#pragma config WRT0 = OFF,WRT1 = OFF,WRT2 = OFF
#pragma config WRTB = OFF,WRTC = OFF,WRTD = OFF
#pragma config EBTR0 = OFF,EBTR1 = OFF,EBTR2 = OFF
#pragma config EBTRB = OFF
//Prototipos de funciones ///////
/*------------------------------------------*/
void ISRTimer0(void); //Funcion de Interrupcion
void config(void); //Funcion de Configuraciones de puertos, Timer
/*------------------------------------------*/
/*------------------------------------------*/
//Inicio de la interrupcion por timer 0//////
// //////
//0x08 es la posicion de alta prioridad//////
//0x18 es posicion de baja prioridad //////
#pragma code Interrupcion = 0X0008
void VectorInterrupcion(void){
_asm goto ISRTimer0 _endasm
}
#pragma code
//Funcion de Interrupcion/////////////
#pragma interrupt ISRTimer0
void ISRTimer0(void){
if(INTCONbits.TMR0IF==1){
PORTBbits.RB0=~PORTBbits.RB0;
INTCONbits.TMR0IF=0;
}
WriteTimer0(61629); //Cargamos el timer0
}
//Fin de Interrupcion por timer0
//Funcion de Configuracion
void config(void){
TRISB=0x00; //Puerto b como salida
CMCON&=0x07;//Apagamos comparadores
ADRES=0x00; //Salida/entradas digitales
//Configuramos TIMER0
OpenTimer0(TIMER_INT_ON & //Interrupciones por timer0 activado
T0_16BIT & //16-bit
T0_SOURCE_INT& //Contar los ciclos internos 48Mhz/4
T0_EDGE_FALL & //~~_
T0_PS_1_256); //Preescalar =256
//Interrupcion timpo=(1/(FOSC/4))*preescalar*(65536-timer0)
// .500s=tiempo maximo
// timer0=-{tiempo/[(1/(FOSC/4))*preescalar]}+65536
WriteTimer0(61629); //Cargamos el timer0=0
RCONbits.IPEN=0; //Deshabilitamos prioridades
INTCONbits.PEIE=1; //Activamos Interrupciones por Timer0
INTCONbits.GIE=1; //Interrupciones global Activadas
}
void main(void){
OSCCON=0b01110000; //Corriendo a 8Mhz
config();
while(1);
}
Currently have 0 comentarios: