El presente sitio presenta diseños y proyectos realizados con Solidworks y otros programas 3d , además de laminas y modelos 3d para practicar en casa, con el único objetivo de poder aprender y explorar la capacidad de Solidworks, no existiendo en ningún caso fines de lucro.

Friday, March 1, 2013

Configuracion del oscilador INterno y uso de la libreria USART C18

Posted by Juan Francisco | Friday, March 1, 2013 | Category: |


#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:


Leave a Reply

Te doy la bienvenida al blog , puedes escribir tu comentario en la casilla mostrada abajo ,gracias.
You are welcome in this blog , you can write your comment in the box shown below, thanks.