Programación del puerto paralelo



 ===================
Programa
;Hecho por Erik Vazquez
;Instituto Tecnolgico de Tuxtla Gutierrez
   
    .model small
    .stack 64
   
    macro irXY x,y ;posicionamiento del cursor.
       
        mov ah,02
        mov dh,y   ;filas
        mov dl,x   ;columnas
        mov bh,0   ;pagina de video
        int 10h
       
        endm
    .data
    .code

inicio:
   
    irXY 1,1    ;siempre el cursor inciara aqui para que
                ;no se nos llene la pantalla de numeros.

    mov dx,379h ;lectura del nibble alto
    in ax,dx    ;registro STATUS
   
    mov bl,al   ;salvamos el dato obtenido
    xor bl,80h  ;apliamos una mascara para
                ;arreglar los bits negados
               
   
    mov dx,37Ah ;lectura del nibble bajo
    in ax,dx    ;registro CONTROL
   
    xor al,0Bh  ;mascara para arreglar los
                ;bits negados
   
    or al,bl    ;unimos los dos nibles en uno
                ;el byte queda en AL
   
    call convertir  ;procedimiento para imprimir
                    ;en pantalla datos decimales
                   
   
    mov ah,01   ;esperamos si se presiona
    int 16h     ;alguna tecla                         
   
    jz inicio   ;si no se presiona regresamos
    jmp salir   ;si se presiona salimos del bucle

proc convertir
   
    mov bl,100  ;divimos por 100 al registro AX.
    div bl      ;recordamos que en AL esta la informacion leida
   
    push ax     ;salvamos AX para no perder estos valores
                ;     +----+----+ 
                ;  AX | DU | 0C |  C= centenas
                ;     +-- -+----+
                ;
     
    or al,30h   ;CENTENAS (ASCII para poder imprimir)
   
    mov ah,02
    mov dl,al   ;imprimimos las CENTENAS
    int 21h
   
    pop ax      ;restaruamos AX con sus valores anteriores
               
                ;cargamos los datos a AX para la
                ;proxima division
                ;   +----+----+  D= decena
    mov al,ah   ;AX | 00 | DU |  U= unidad
    mov ah,0    ;   +----+----+
   
    mov bl,10   ;divimos por 10 AX para separar
    div bl      ; las Decenas y las Unidades
   
    or ax,3030h ;convertimos a ASCII para poder imprimir
   
    mov ch,ah   ;salvamos las UNIDADES de AH a CH
   
    mov ah,02   ;imprimimos las DECENAS
    mov dl,al   ;que estan en el registro AL
    int 21h
   
    mov ah,02   ;imprimimos las UNIDADES que
    mov dl,ch   ;estan el registro CH.
    int 21h
   
    ret         ;fin del procedimiento
    endp
   
   
salir:
    mov ah,4ch  ;regresamos el control
    int 21h     ;al sistema operativo                      
   
    end

==================================
Programa para encender un led
STACK SEGMENT PARA STACK 'STACK'
DB 256 DUP(0)
STACK ENDS
ASSUME CS:COD ,DS:COD
COD SEGMENT
   
MES1 DB 'Encender y Apagar LED con puerto paralelo','$'
MES2 DB 'Oprimir S para salir','$'
MES3 DB 'Fin del programa','$'
MENSAJE DW 0


MAIN PROC FAR
MOV AX,CS
MOV DS,AX

MOV MENSAJE,OFFSET MES1
CALL ESCRIBIR
MOV MENSAJE,OFFSET MES2
CALL ESCRIBIR
bucle:

MOV AH,1
MOV DL,0FFH
INT 21H
CMP AL,'S'
JE SALIR
MOV DX,378H
OUT DX,AL
JMP bucle
MAIN ENDP


ESCRIBIR PROC NEAR
PUSH AX
PUSH DX
MOV AH,09H
MOV DX,MENSAJE
INT 21H

MOV AH,06
MOV DL,0DH
INT 21H
MOV AH,06H
MOV DL,0AH
INT 21H
POP DX
POP AX
RET
ESCRIBIR ENDP

SALIR:
MOV AH,06
MOV DL,0DH
INT 21H
MOV AH,06H
MOV DL,0AH
INT 21H

MOV MENSAJE,OFFSET MES3
CALL ESCRIBIR
MOV AH,4CH
INT 21H
COD ENDS
 END MAIN
================================
Archivo complementario
Video

Comentarios

Entradas populares de este blog

Registro de un procesador.