Inicio
He creado este espacio para compartirlo con familiares y amigos, aunque no descarto la posibilidad de que otros visitantes se encuntren a gusto y lo puedan disfrutar tambien...

InicioMapa del sitioDescargasColaboradoresEnlacesAutor    
Buscar :

Ideas


Y encima del sofá... un televisor

¿Realmente merece el televisor ese papel protagónico que solemos darle?


¿Un flat panel sobre mi buró?

¿Y por qué no... "debajo" del buró?


 Controle "cualquier cosa" desde el puerto serie de su PC  Contenido | Anterior | Siguiente

Lectura de un byte via RS232


La figura 3 nos va a ayudar a comprender qué se quiere lograr con la rutina "read_rs232".

Como la vigilancia del puerto PA0 es constante, es de esperar que el start bit se detecte muy temprano, es decir, bien pegado al flanco izquierdo del mismo.

Una vez detectado, el programa tiene que generar un delay antes de leer el proximo bit. Este delay debería ser de justamente la duración de un bit, en este caso 104 microsegundos. Antes de leer el primer data bit, sin embargo, el programa introduce "pre-delay" igual a la mitad de la duracion de un bit, esto es, 52 microsegundos. El propósito de este pre-delay es ubicar las lecturas subsiguientes más próximas al centro del bit, con lo cual se logra mayor fiabilidad. En efecto, al ser esta una transmisión asincrónica, es de desperar algún desplazamiento en la frecuencia del reloj del receptor respecto al reloj del transmisor; leer cerca del centro del bit es una manera de protegerse contra estos pequeños desplazamientos.

Los parametros del delay y el pre-delay empleados están definidos en proto232.h como "TIME_OUT" y "TIME_OUT_HALF" respectivamente.

La manera de provocar estos delays es mediante lazos de espera. El valor de las constantes TIME_OUT y TIME_OUT_HALF fueron calculadas multiplicando la cantidad de ciclos de instrucción del lazo de espera, por la duración de un ciclo de instrucción, que para XTAL = 4 MHz, es 1 microsegundo.

Ahora vamos a concentrarnos en la subrutina "read_rs232" (fichero proto232.asm).

Las dos primeras instrucciones hacen una lectura rapida del puerto PA0. Si encuentran un 1 logico significa que no hay start bit, por lo que retorna de inmediato colocando FALSE (0) en el registro W para indicar que no entró ningun dato.

En caso contrario, se está en presencia de un start bit y por tanto hay que disponerse a recibir la transmisión.

Despues del bloque de inicialización que sigue, se cae en un lazo de espera (etiqueta "delay_1") para colocarse en el centro del start bit. Transcurrido este delay, el sistema se dispone a leer los 8 data bits que siguen (etiqueta "read_next_bit").

Aqui se utiliza un delay cuyo tiempo es igual a la duración de un bit. Los bits son leidos uno por uno y acomodados convenientemente en la variable "byte_read". La variable "bit_counter" se utiliza para contar los bits leidos. Cuando todos han sido leidos, la rutina returna colocando TRUE (1) en el registro W. El dato leido queda en la variable "byte_read".

 Contenido | Anterior | Siguiente

  • Otros articulos técnicos


  • Imprimir   Enviar a un amigo   
                                                    

    Miami / USAmail@armandoacosta.comInicio