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

Software

El comportamiento que se desea lograr es el siguiente:

Si el usuario presiona una tecla, el sistema trasmite un byte que representa el código de esa tecla. En estos momentos, esa parte del programa se encuentra en desarrollo.

Si el sistema recibe un byte via RS232, simplemente coloca los cuatro bits menos significativos de ese byte, en el puerto PB, los otros bits son ignorados. Un programa que pretenda activar uno o más relays, solo tiene que transmitir un byte cuyos cuatro bits menos significativos constituyan un "bit map" de los relays a activar (1 activado, 0 desactivado).

El programa fuente consta de tres ficheros:

El primero contiene las definiciones generales para los microcontroladores PIC16C54 y PIC16C55.

El segundo contiene las definiciones específicas de este proyecto.

El tercero contiene el código fuente del programa en sí.

Le invito a que echarle un vistazo a los dos ".h" para que se familiarice con las definiciones utilizadas.

Ahora vamos a concentrarnos en proto232.asm.

El primer bloque (entre los labels "start" y "main_loop") inicializa el microcontrolador, configurando los puertos adecuadamente.

El bloque "main_loop" implementa una vigilia. Solo se sale del lazo si se presiona una tecla o se recibe un byte via RS232.

En caso de tecla presionada, se salta a la rutina "key_pressed", que en estos momentos no hace nada en realidad, sino que retorna rapidamente al lazo principal.

Acto seguido, se llama a la subrutina "read_rs232" para ver si hay algún dato entrando via RS232. Esta subrutina trata de detectar un start bit y si no lo encuentra, retorna rapidamente con el registro W en cero. En ese caso el lazo principal continua en su vigilia por tiempo indefinido.

Cuando el PC comienza a transmitir un byte, la llamada a "read_rs232" desde el lazo principal alcanza a detectar el start bit y en lugar de regresar rapidamente con un 0 en el registro W, se detiene a recibir todos los data bits, uno por uno, leyéndolos en la variable "byte_read". Cuando todos los bits han sido leidos, la subrutina retorna al lazo principal colocando un 1 en el registro W.

El lazo principal siempre consulta la bandera Z del registro de STATUS para saber cual fue el resultado de la llamada a "read_rs232". En caso de ser 1, significa que se ha leido un byte y salta entonces a tomar la acción pertinente, en este caso, sacar dicho byte por el puerto PB (4 bits menos significativos solamente, puesto que los otros están configurados como entradas).

La subrutina "read_rs232" se explica con más detalle en el epígrafe siguiente.

 Contenido | Anterior | Siguiente

  • Otros articulos técnicos


  • Imprimir   Enviar a un amigo   
                                                    

    Miami / USAmail@armandoacosta.comInicio