Vistas de página en total

miércoles, 13 de noviembre de 2013

COMUNICACIÓN RS232

 Hoy vamos a comenzar con los puertos de comunicación, y en particular con el puerto serie.
 No vamos a usar interrupciones, ni el dos. Vamos a programar el PIO directamente.
 Para ello usaremos las nuevas funciones de la entrada anterior peek y poke.

     Con esta cabecera rearemos unas funciones básicas para inicialización, lectura y escritura sobre el PIO 8050, que nos permitirán leer y escribir sobre el puerto serie. Se pueden  ampliar después convirtiéndolas en funciones, con gestión de errores, pero como la idea de este blog es estar al menor nivel, pero que sea operativo, lo dejaré así.
    La idea del blog, como dije desde el principio es que sea didáctico a bajo nivel, pero permitiendo al mismo tiempo hacer operativo el ensamblador.
     Ya sabemos que se puede hacer mejor... pero para hacerlo mejor usaríamos las librerías ya existentes. Sin embargo los ejemplos que existen a bajo nivel no son realmente operativos sin un debuger, pues les falta implementación.

     Como ya habréis visto es blog es algo intermedio, estando siempre en bajo nivel, como si el PC fuera un microordenador, estamos haciendo programas útiles y ejecutables por si solos, sin necesidad de debuger, para ver los resultados.

   

RS232.MAC 
; Copyright (C) 2013  José Ángel Moneo Fernández

;    This program is free software: you can redistribute it and/or modify
;    it under the terms of the GNU General Public License as published by
;    the Free Software Foundation, either version 3 of the License, or
;   (at your option) any later version.

;    This program is distributed in the hope that it will be useful,
;    but WITHOUT ANY WARRANTY; without even the implied warranty of
;    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
;    GNU General Public License for more details.

;    You should have received a copy of the GNU General Public License
;    along with this program.  If not, see <http://www.gnu.org/licenses/>.

include io.mac

;CABECERA Y MACROS COMUNICACIÓN SERIE

;velocidades de transmisión
v4800 equ 24
V9600 EQU 12
V19200 EQU 6

;direcciones PUERTO COM 1
rtd equ 3f8h  ; Transmitter Holding Register
lsb equ 3f8h  ; Receiver Data Register SI BIT 7=0 EN LC, Baud Rate Divisor SI BIT 7=1 EN LC
msb equ 3f9h  ;Baud Rate Divisor    SI bit 7=1 LC
ie equ  3f9h  ;Interrupt Enable Register
ii equ  3fah  ;Interrupt Identification  Register
lc equ  3fbh  ;Line Control Register   
mc equ  3fch   ;Modem Control Register
ls equ  3fdh   ;Line Status Register   
ms equ  3feh   ;Modem Status  Register




; LECTURA DE CARACTER POR PUETO SERIE
getcaux macro
local rs_bien
local espera1
espera1:
        peek ls      ;LECTURA REGISTRO DE ESTADO
        test al,1eh  ; VERIFICACIÓN DE ERRORES          
        jz rs_bien    ;SI NO HAY ERROR SEGUIMOS
        peek rtd      ;TOMAMOS EL ERROR.. nO VAMOS A TRATARLO RODAVÍA. AQUÍ PODRÍAMOS TRATARLO MEDIANTE UN MENSAJE
rs_bien:
        test al,1     ; VERIFICAMOS SI HAY DATO
        jz espera1    ; ESPERAMOS RECIBIRLO
        peek rtd       ; LO LEEMOS
        endm

;ENVÍO DE CARACTER POR PUERTO SERIE
putcaux macro dato
local espera
espera: peek ls            ; SE LEE EL REGISTRO DE LECTURA
        test al,100000b     ; REGISTRO DE SALIDA DISPONIBLE
        jz espera
        poke rtd,dato      ; ESCRIBE EL DATO
        endm
       
       
;INICIALIZCIÓN DEL PUERTO A UNA VELODIAD
rs232_ini macro velocidad
        poke lc,80h         ; ACCESO A CONFIGURACIÓN DE VELOCIDAD
        mov bx,velocidad     ;ALAMACENA LA VELOCIDAD
        poke lsb,bl
        poke msb,bh
        poke lc,3           ;CONFIUGURA 8 BITS DE TRANSMISIÓN- 1 BIT DE STOP. SIN PARIDAD
        poke mc,0          
        poke ie,0
        endm

No hay comentarios:

Publicar un comentario

Si tienes algún comentario, duda o sugerencia, o si quieres aportar algún código creado a partir de las librerías expuestas aquí, por favor, indícamelo.