Recepcion de comandos via puerto serie

    ALGUNAS CIFRAS PRELIMINARES

    La comunicacion serie en el Serial Bus (RS485) se efectua a 19200 Baud.
    Puesto que cada frame (byte) consta de 10 bits (start bit, 8-bits data,
    stop bit), resulta que la duracion del frame es aproximadamente: 0.25 ms.

    Los comandos son de longitud variable, pudiendo ser tan cortos como
    4 bytes. La longitud maxima permitida por disenno es 10 bytes. Algunos
    comandos causan respuestas cuya longitud maxima esta' tambien limitada
    por disenno a 10 bytes. Siendo asi, la maxima duracion de un comando
    y su respuesta es: 5ms.

    Puesto que el MASTER SOFTWARE esta' encuenstando el bus cliclicamente
    para conocer el estado de las unidades en ese bus, un ciclo completo
    toma, en el peor de los casos, 70ms.

    El PIC funciona con un reloj de 3.6864MHz cuyo periodo es 0.27uS.
    Como la mayoria de las instrucciones se ejecutan en un solo periodo
    de reloj, resulta que el CPU puede ejecutar aproximadamente 900 ins-
    trucciones en el tiempo que se esta' recibiendo un byte por el puerto
    serie.

    IMPLEMENTACION

    Todas las unidad estan conectadas al mismo SERIAL BUS y por tanto reciben
    por igual los comandos enviados por el HOST, esten dirigidos a esa unidad
    o no. El Firmware tiene que escuchar y traducir esos comandos antes de
    conocer si estan dirigidos o no a esa unidad; esto se determina por la
    direccion de destino contenida en el comando, la cual puede o no coincidir
    con la direccion configurada en la unidad.

    Los serial frames son recibidos en un UART. Por cada byte colectado en
    el UART, se produce una interrupcion cuyo ISR se encarga de coleccionar-
    los en un buffer de memoria.

    Mientras no se haya recibido el caracter STX (que encabeza cada
    comando), los bytes recibidos se descartan, es decir, no se guardan
    en memoria. Tan pronto como se recibe STX, se cae en un estado en
    el cual se interpreta el proximo byte como destination ADDR. Cuando este
    byte es recibido, se compara con la direccion de la unidad; si no
    coincide, la escucha se aborta cayendo en el estado inicial (espera
    de STX).

    Si ADDR coincide con la direccion de la unidad, el ISR comienza a
    colectar en memoria la secuencia de bytes recibidos, hasta leer
    ETX en cuyo caso da por terminada la lectura. Debe existir ademas
    un conteo de salvaguarda para evitar bloqueo en caso de no recibirse
    el caracter ETX, en cuyo caso se caera' en estado de alarma.

    Notese que la recololeccion de bytes en el UART es concurente con
    la ejecucion del programa y que esto es un periodo de tiempo bastante
    largo, suficiente para ejecutar unas 900 instrucciones. Es solo despues
    que el byte ha sido colectado en el UART que se llama el ISR via inte-
    rrupcion. No obstante, la ejecucion del ISR debe ser breve limitandose
    tan solo a lo dicho anteriormente.

    Una vez aceptado el comando, se llama a una rutina INTERPRETER como
    resultado de la cual puede, quizas, producirse el envio de una
    respuesta desde la unidad via puerto serie. Esta rutina INTERPRETE
    es interrumpible, de modo que se pueden ir recibiendo bytes por el
    puerto serie, tal vez no dirigidos a esta unidad, o quizas comandos
    dirigidos a ella (irlos colectando en memoria) mientras que el comando
    anterior esta' siendo decodificando por el INTERPRETER.