Instrucciones de Preprocesado en PICC
julio 25, 2011 Deja un comentario
Bueno les cuento , un problema que tuve y pude resolver, por medio de las instrucciones de preprocesado, ya las habia escuchado varias veces y me habian dicho que eran muy utiles en especial para la depuracion…
El problema era el siguiente con el PIC18LF26K22 quería depurar por medio del serial numero 2 es decir los pines B6 y B7, pero estos pines también se usan en la interrupción de cambio de puerto de RB4-RB7, entonces la solución fue cuando quería depurar utilizaba el puerto serial y deshabilitaba la interrupción de RB4-RB7, y cuando quería utilizar la interrupción de RB4-RB7 no utilizaba el puerto serial, y para utilizar el uno o el otro simplemente tenia que comentar una linea de codigo, bueno no mas explicaciones, el codigo:
// Licencia: GPL #include <18LF26K22.h> #device adc=16 #FUSES NOWDT //No Watch Dog Timer #FUSES WDT128 //Watch Dog Timer uses 1:128 Postscale #FUSES INTRC_IO //Internal RC Osc, no CLKOUT #FUSES NOPLLEN //4X HW PLL disabled, 4X PLL enabled in software #FUSES PUT //Power Up Timer #FUSES NOBROWNOUT //No brownout reset #FUSES WDT_SW //No Watch Dog Timer, enabled in Software #FUSES NOPBADEN //PORTB pins are configured as digital I/O on RESET #FUSES NOMCLR //Master Clear pin used for I/O #FUSES NOLVP //No low voltage prgming, B3(PIC16) or B5(PIC18) used for I/O #FUSES NOXINST //Extended set extension and Indexed Addressing mode disabled (Legacy mode) #use delay(int=8000000) #define DEBUG // Comment line out for no debug #use rs232(baud=9600,parity=N,xmit=PIN_C6,rcv=PIN_C7,bits=8,stream=PORT1) #ifdef DEBUG #use rs232(baud=9600,parity=N,xmit=PIN_B6,rcv=PIN_B7,bits=8,stream=DEBUG_S) #endif #use fast_io(B) #use fast_io(C) int1 ini; #int_RB void RB_isr(void) { ini=1; } #int_RDA void RDA_isr(void) { } void main() { int i; #ifdef DEBUG set_tris_b(0b10111111); // con tx habilitado #else set_tris_b(0b11111111); // con tx deshabilitado #endif set_tris_c(0b10111111); // con tx habilitado ini = 0; setup_timer_3(T3_DISABLED|T3_DIV_BY_1); setup_timer_4(T4_DISABLED,0,1); setup_comparator(NC_NC_NC_NC);// This device COMP currently not supported by the PICWizard #ifndef DEBUG enable_interrupts(INT_RB); #endif #ifdef DEBUG enable_interrupts(INT_RDA2); #endif enable_interrupts(INT_RDA); enable_interrupts(GLOBAL); setup_oscillator(OSC_8MHZ|OSC_INTRC|OSC_31250|OSC_PLL_OFF); fprintf(PORT1,__TIME__); #ifdef DEBUG fprintf(DEBUG_S,"funciona..."); #endif i=0; while (TRUE) { delay_ms(300); fprintf(PORT1,"%2u \n\r",i); if (ini == 1) {fprintf(PORT1,"Pulsador.. \n\r");ini=0;} i++; } }
y listo si se quiere depurar tan solo se deja la linea habilitada la linea 19, en caso contrario simplemente se comenta esta linea