may 28 2009
[Lenguaje ASM] “El Auto Fantástico”

Antes de llevar estos cursos de Lógica Digital y Organización y Arquitectura de Computadoras, no sabía las funcionalidades que podría tener el puerto Paralelo o LPT (aunque las PC actuales parece no incluirlos ya)… no daré definiciones porque las pueden encontrar en Wikipedia.
Sin embargo si colocaré código Assembler, uno que quiero compartir con ustedes que hoy aprendí en mi horario de laboratorio… ovbiamente deberán hacer algunos pasos previos para que logre funcionar tu aplicación con el puerto LPT, estos pasos los colocaré al final del post, primero vamos con el código fuente:
DATOS SEGMENT IND DB ? ;IND es una variable declarada de tipo byte en el segmento completo DATOS DATOS ENDS CODEGO SEGMENT ASSUME CS: CODEGO, DS:DATOS ENECIO: MOV IND, 0 MOV DX, 378H MOV AL, 0FEH ;11111110 OUT DX, AL ;CALL DLY "Para ver que el programa arranca con el MSB apagado y el resto encendido" ;JMP PREGUN PREGUN: CMP IND, 0 JE SII JNE NOO ;*************Rutina para que el Auto fantastico marche para Adelante************** SII: CMP AL,80H ;10000000 JE SALGO1 SHL AL,1 ;11111100"11111000;11110000;11100000;11000000;10000000 OUT DX,AL;11111100"11111000;11110000;11100000;11000000;10000000 JMP PREPRE SALGO1: MOV IND, 1 JMP PREGUN ;*************Rutina para que el Auto fantastico marche para Atras************** NOO: CMP AL,01H ;00000001 JE SALGO2 SHR AL,1 ;01000000;00100000;00010000;00001000;00000100;00000010;00000001 OUT DX,AL;01000000;00100000;00010000;00001000;00000100;00000010;00000001 JMP PREPRE SALGO2: MOV IND, 0 JMP PREGUN PREPRE: CALL DLY JMP PREGUN DLY: PUSH AX ;Indica a los registros que estan aptos para acumular datos (Registros generales AX,BX,CX,etc.) PUSH BX PUSH CX MOV AX, 1000;Cargan el dato 600 al registro general AX P3: MOV BX, 1000 P2: MOV CX, 100 P1: DEC CX ; Mientras CX no sea cero se repetira N-veces el lazo P1 JNZ P1 DEC BX ; Mientras BX no sea cero se repetira N-veces el lazo P2 JNZ P2 DEC AX ; Mientras AX no sea cero se repetira N-veces el lazo P3 JNZ P3 POP CX ;Indica a los registros que ya no estan aptos para acumular datos (Registros generales AX,BX,CX,etc.) POP BX POP AX RET ; Retorno de Sub Rutina de la ultima posición en la que se quedo CODEGO ENDS END ENECIO
Este Código hace que tus leds se prendan de manera parecida a la consolita del “Auto Fantástico”, pero que leds?… pues ese fue mi proyecto, armar una aplicación con 8 leds de salida que logren conectarse a la PC mediante el Puerto LPT, y aquí está el diagrama del que pueden armar la aplicación que yo armé:

Clic en La Imagen para agrandar
Necesitarían un conector LPT Macho, 3 Buffers o circuitos integrados SN74LS245N, Leds como mínimo: 8, cables UTP-8 de preferencia tener 18 hilos para el LPT, Estaño para soldar, uno o dos Protoboards, y alguna manera de conectarlo a 5 voltios
…
Para hacer funcionar (activar) tu puerto LPT descárgate este archivo.
- Tienes que colocar el en tu carpeta C:\WINDOWS\System32\drivers el archivo UserPort.sys
- Ejecutar UserPort.exe
Luego tendrás que compilar de alguna manera ese código.. pues puedes conseguir cualquier editor Assembler… pero yo recomendaré uno que usa el Profesor de Teoría y que por lo visto es el más practico: El emulador de microprocesador 8086… Descárgalo de aca
Pasos para ejecutar el código:
Una vez que tengas instalado el programa realiza esto…
- Colocar el código en el panel de código
- Hacer clic en “Compile” y guardarlo con cualquier nombre
- Luego te saldrá una ventanita, ubica un botón de nombre “External”, haz clic ahí y luego en “Command Prompt”
- Saldrá una ventana de comandos (cmd.exe) ahí teclearas el nombre de tu archivo que nates guardaste como “Archivo.exe” pero sin extensión (osea para el ejemplo sería “Archivo” sin comillas)
Y Luego tendrás el efecto del auto fantástico… más o menos PARECIDO a éste que colgó mi profesor de teoría
:
NOTA: No es necesario implementar todo lo del diagrama… quizás solo puedas implementar la parte de en medio o el Buffer de en medio que refiere a las salidas… que es donde se mostrará el efecto de lauto fantástico.
Saludos… Luego veré si coloco más ejemplos acerca de este lenguaje !





ene 30, 2010 @ 13:19:24
oe williams, en el video veo que las entradas al buffer salen del puerto USB, no? o me parece?
ene 30, 2010 @ 15:20:14
Supongo que eso ahorra el tener que conectarlo a la fuente y a un paralelo o serial (osea por lo separado).. pero no recuerdo bien
… habrá que preguntarle al profe…
jun 05, 2011 @ 18:10:32
Hola, estoy trabajando con este puerto y con la misma programacion, pero es algo confusa, me podrias explicar como controlas la velocidad en que cambian los leds???