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
Publicar un comentario