| PicManía by RedRaven |
Búsqueda personalizada
|
TÉCNICAS EN C |
||
|
|
|
Esta serie de contenidos titulada Técnicas en C pretende mostrar con ejemplos comentados la forma de implementar ciertos procesos muy usuales durante el uso de los Microcontroladores PIC de las series 16F y 18F. |
|
|
|
|
Generando un pulso. 2ª Parte. Onda cuadrada simétrica mediante INTCCP |
|
|
| A.- Conceptos involucrados: |
|
|
|
|
| B.- Técnica a Aplicar: |
|
|
|
|
|
|
|
| C.- Implementación en C: |
|
|
setup_ccp2(CCP_COMPARE_SET_ON_MATCH); // Configura CCP2 en modo COMPARE cambiando a Alto enable_interrupts(int_ccp2); // Habilito la interrpción INT_CCP2 enable_interrupts(global); // Habilito las interrupciones necesarias |
||
|
| #int_ccp2 void handle_ccp2_int(){ if(++flagConmuta==1){ setup_ccp2(CCP_COMPARE_CLR_ON_MATCH); // Configura CCP2 modo COMPARE cambiando a Bajo } else{ setup_ccp2(CCP_COMPARE_SET_ON_MATCH); // Configura CCP2 modo COMPARE cambiando a Alto } CCP_2=0; // Pongo a cero el valor a comparar ... set_timer1(0); // y el TMR1. CCP_2 = 1250; // Quiero que se dispare cada 0.25 ms ... // luego pongo los Ticks de TMR1 para ese tiempo. } |
||
|
|
|
|
///////////////////////////////////////////////////////////////////////////////////// // // generando_un_pulso_6_intccp.c // // SERIE: "Técnicas en C" para el Foro TODOPIC // // (c) 11.2006 by RedPic // // Propósito: Generar un pulso de 2 Khz (0.5 ms de periodo) // // Técnica Empleada: Habilitar INTCCP para conmutar el PIN CCP2 cada semiperiodo // utilizando el recurso CCP en modo compare. // //////////////////////////////////////////////////////////////////////////////////// #include <18f4550.h> #fuses HS,MCLR,CCP2B3,NOWDT,NOPROTECT,NOPUT,NOBROWNOUT,NOPBADEN,NOLVP,NOCPD,NODEBUG,NOWRT,NOVREGEN #use delay(clock=20000000) #use rs232(baud=9600, xmit=PIN_C6, rcv=PIN_C7) //////////////////////////////////////////////////////////////////////////////////// // // Defines y Constantes // //////////////////////////////////////////////////////////////////////////////////// #define LED PIN_E0 // Defino el Pin del Led #define OUT PIN_B3 //////////////////////////////////////////////////////////////////////////////////// // // Variables en RAM // //////////////////////////////////////////////////////////////////////////////////// int1 flagConmuta=0; //////////////////////////////////////////////////////////////////////////////////// // // Interrupción CCP por Compare TMR1 // //////////////////////////////////////////////////////////////////////////////////// #int_ccp2 void handle_ccp2_int(){ if(++flagConmuta==1){ setup_ccp2(CCP_COMPARE_CLR_ON_MATCH); // Configura CCP2 modo COMPARE cambiando a Bajo } else{ setup_ccp2(CCP_COMPARE_SET_ON_MATCH); // Configura CCP2 modo COMPARE cambiando a Alto } CCP_2=0; // Pongo a cero el valor a comparar ... set_timer1(0); // y el TMR1. CCP_2 = 1250; // Quiero que se dispare cada 0.25 ms ... // luego pongo los Ticks de TMR1 para ese tiempo. Output_Toggle(LED); // Monitorizo visualmente con el PIN de Led; } //////////////////////////////////////////////////////////////////////////////////// // // Main // //////////////////////////////////////////////////////////////////////////////////// void main() { ////////////////////////////////////////// INICIALIZACIONES GENERALES delay_ms(333); // Espero a que todo se estabilice e ... disable_interrupts(global); // Inicializo el Micro y ... disable_interrupts(int_timer1); // deshabilitando todo lo no necesario ... disable_interrupts(int_rda); disable_interrupts(int_ext); disable_interrupts(int_ext1); disable_interrupts(int_ext2); setup_adc_ports(NO_ANALOGS); setup_adc(ADC_OFF); setup_spi(FALSE); setup_psp(PSP_DISABLED); setup_counters(RTCC_INTERNAL,RTCC_DIV_2); setup_timer_0(RTCC_OFF); setup_timer_1(T1_INTERNAL | T1_DIV_BY_1); setup_timer_2(T2_DISABLED,0,1); setup_timer_3(T3_DISABLED); setup_comparator(NC_NC_NC_NC); setup_vref(FALSE); port_b_pullups(FALSE); delay_ms(333); /////////////////////////////////////////// INICIALIZACIONES PERTINENTES A LA APLICACION setup_ccp2(CCP_COMPARE_SET_ON_MATCH); // Configura CCP2 modo COMPARE cambiando a Alto enable_interrupts(int_ccp2); // Habilito la interrpción INT_CCP2 enable_interrupts(global); // Habilito las interrupciones necesarias printf("\r\nGenerando un pulso : INTCCP Compare\r\n"); printf("By Redpic para Foro TODOPIC\r\n\n"); do { } while (TRUE); } |
||
|
D.- Ejemplo funcionando: |
|
|
|
Esta página se modificó el 27/12/2008
|