; Subrutina "RS232_LeeDato" -------------------------------------------------------------
;
; El microcontrolador lee el dato por la línea de entrada comenzando por el bit de menor
; peso. El dato leído se envía finalmente en el registro de trabajo W.
;
; El ordenador parte siempre de un nivel alto, que es el estado que tiene cuando no
; envía información. La secuencia utilizada es:
; 1º   Espera que se ejecute el pulso negativo del bit Start o flanco de bajada.
; 2º   Deja pasar un tiempo una y media veces mayor que el periodo de transmisión para
;      saltarse el bit de Start y lee el primer bit en su mitad.
; 3º   Lee el resto de los bits de datos, esperando un tiempo igual a la duración del
;      período entre lectura y lectura para testearlos en mitad del bit.
;
; Salida: En el registro de trabajo W el byte leído.

RS232_LeeDato
   movlw   d'8'               ; Número de bits a recibir.
   movwf   RS232_ContadorBits
RS232_EsperaBitStart
   btfsc   RS232_Entrada          ; Lee la entrada y espera a que sea "0".
   goto   RS232_EsperaBitStart   ; No, pues espera el nivel bajo.
   call    Retardo_100micros      ; El primer bit debe leerlo un tiempo igual a una
   call    Retardo_50micros       ; vez y media el periodo de transmisión.
RS232_LeeBit
   bcf      STATUS,C            ; Ahora lee el pin. En principio supone que es 0.
   btfsc   RS232_Entrada         ; ¿Realmente es cero?
   bsf      STATUS,C            ; No, pues cambia a "1".
   rrf      RS232_Dato,F         ; Introduce el bit en el registro de lectura.
   call   Retardo_100micros      ; Los siguientes bits los lee un periodo más tarde.
   decfsz    RS232_ContadorBits,F   ; Comprueba que es el último bit.
   goto   RS232_LeeBit         ; Si no es el último bit pasa a leer el siguiente.
   call   Retardo_200micros      ; Espera un tiempo igual al los 2 bits de Stop.
   movf   RS232_Dato,W         ; El resultado en el registro W.
   return