Autor Tema: kbhit recepciona datos aun con el disable_interrupts(int_rda)  (Leído 2125 veces)

0 Usuarios y 1 Visitante están viendo este tema.

Desconectado micronet3

  • PIC18
  • ****
  • Mensajes: 288
kbhit recepciona datos aun con el disable_interrupts(int_rda)
« en: 24 de Septiembre de 2018, 11:55:59 »
saludos.
me parece interesante recepecionar datos por medio de kbhit() sin la necesidad de usar interrupciones, pero que pasaria si llega datos al puerto serial y este no es leido, y mas adelante cuando se lee, el kbhit parece ya no responder.

he usado este codigo que encontre en el foro para limpiar el buffer, pero nada

while(kbhit()){c=getc();};

saludos


Desconectado KILLERJC

  • Colaborador
  • DsPIC33
  • *****
  • Mensajes: 8242
Re:kbhit recepciona datos aun con el disable_interrupts(int_rda)
« Respuesta #1 en: 24 de Septiembre de 2018, 12:15:57 »
Suponiendo que sea una UART por hardware:

El problema es que la PICs gamas bajas solo tiene espacio para un caracter.

Si llegan 2, el modulo de la UART procede a bloquearse manteniendo el valor del primer caracter que llego, y avisa con una de las flags que ocurrio un OVERRUN, La forma de salir de este estado esta explicado en el datasheet, y es desactivar y volver a activar la recepcion. En el caso de CCS, creo que poniendo en la directiva ERRORS hace que el compilador agregue codigo para el manejo de esos errores y asi no se bloquee.

El problema esta en que ya los caracteres los perdiste.

Otras gamas de PIC posee buffers mas grandes. Pero esa es la desventaja que posee hacer la recepcion sin interrupcion, por eso lo mejor siempre es interrupcion en la recepcion.

Desconectado micronet3

  • PIC18
  • ****
  • Mensajes: 288
Re:kbhit recepciona datos aun con el disable_interrupts(int_rda)
« Respuesta #2 en: 24 de Septiembre de 2018, 18:00:21 »
Efectivamente KILLERJC, poniendo ERRORS  se soluciono el problemaaa :-/ :-/ :-/

un saludo, gracias