TODOPIC
Microcontroladores PIC => Lenguaje C para microcontroladores PIC => Mensaje iniciado por: shinseiky en 08 de Junio de 2011, 23:11:20
-
buenas noches; miren estoy haciendo un programa de prueba con la uart del pic18f4550 y bueno cada vez que quiero compilar me sale esto
" interrupts disabled during call to prevent re-entrancy (@PSTRINGC_9600_31766_31767) "
no se que error estoy cometiendo a ver si me ayudan. aca dejo mi programa para que lo revisen, ahh tbm estoy trabajando con int0 y enciendo unos leds con la pc
#include "D:\PCW_CCS_LENGUAJE C_PIC\UART_PIC18F4550\UART.h"
#int_RDA
void RDA_isr(void)
{
unsigned int dato,adc0;
dato=getc();
switch(dato)
{
case"1": output_toggle(PIN_B1);
break;
case"2": output_toggle(PIN_B2);
break;
case"a": adc0 = read_adc();
printf("ADC0%u\n\r",adc0);
break;
default: break;
}
}
#int_EXT
void EXT_isr(void)
{
printf("Se ha pulsado un boton\n\r");
delay_ms(200);
}
void main()
{
setup_adc_ports(AN0|VSS_VDD);
setup_adc(ADC_CLOCK_INTERNAL);
setup_psp(PSP_DISABLED);
setup_spi(SPI_SS_DISABLED);
setup_wdt(WDT_OFF);
setup_timer_0(RTCC_INTERNAL);
setup_timer_1(T1_DISABLED);
setup_timer_2(T2_DISABLED,0,1);
setup_timer_3(T3_DISABLED|T3_DIV_BY_1);
setup_comparator(NC_NC_NC_NC);
setup_vref(FALSE);
enable_interrupts(INT_RDA);
enable_interrupts(GLOBAL);
enable_interrupts(INT_EXT);
//Setup_Oscillator parameter not selected from Intr Oscillator Config tab
// TODO: USER CODE!!
set_adc_channel(0);
set_tris_b(0b00000001);
printf("UART CONECTADA\n\r");
while(true){
}
}
-
eso que te aparece debe ser un warning, no un error, se refiere al delay que pusiste dentro de la int_ext, solo te advierte que las interrupciones se deshabilitan durante el retardo
-
alguien que me diga si mi programa esta bien o tiene algun error .
-
Nunca uses Delay, Print,etc. dentro de interutsiones por que si ocurre otra cuando se esta cumpliendo el Delay tu pic no la ve!!!
#int_EXT
void EXT_isr(void)
{
printf("Se ha pulsado un boton\n\r");
delay_ms(200);
}
esto es incorrecto...hay otras formas de hacer lo mismo y correctamente
Solo tomalo como un consejo.
-
ok kaki pero dime tu como seria la forma correcta de hacer el llamado a la interrupcion
-
Setear una bandera, que sea testeada en el bucle principal y allí colocar esas rutinas que ocupan tanto tiempo.
Saludos!
-
si no es mucho pedir podrian colocar el codigo de como seria el ejemplo. ademas cuando lo simulo en proteus todo va bien con la interrupcion int0, me muestra el mensaje que le asigno; pero cuando pulso las teclas que debe recibir el pic y comparar para realizar las funciones de encender o apagar leds o medir el adc el proteus me da error, me dice LOGIC CONTENTION, que segun tengo entendido esto se debe a que puede haber un corto circuito la cosa es que este mensaje me sale en la linea de recepcion del pic y bueno no se que es lo malo, o el programa o el proteus. este mismo programa ya lo he probado con un pic16f876a y todo corre normal pero en el pic18f4550 tengo este problema.
-
Hermano estoy realizando un proyecto donde trabajo con el uart. Cuando compilo mi codigo en ccs me arroja un error con la linea de #include <uart.h>, dice que el archivo no pudo ser abierto (File can not be opened). Ya q tu estas trabajando con esa libreria me puede decir de donde puedo descargar o conseguir la libreria uart.h???