Sei sulla pagina 1di 18

APLICACIONES

MICROPROCESADORES

PRACTICA 1.ASM Realizar el programa para prender y apagar 8 leds conectados al puerto de salida del puerto paralelo a intervalos de seg. aproximadamente y durante 20 veces.

PC
D0 D1 D2 D3 D4 D5 D6 D7

DB25

TARJETA DE INTERFASE
D7 LED D6 LED D5 LED D4 LED D3 LED D2 LED D1 LED D0 LED

R1 100

INSTRUCCIONES DEL PROGRAMA .MODEL .STACK .DATA .CODE PROC MOV MOV MOV MOV MOV OUT CALL MOV OUT CALL LOOP MOV INT ENDP SMALL 64h

; reserva 100 bytes en la pila ; Segmento de datos (no hay datos)

MAIN

FAR AX, @Data DS, AX DX, 378H CX, 20


AL, 0FFH DX, AL PDELAY AL, 00H DX, AL PDELAY repite AH, 4CH 21H

; Inicializa segmento de datos ; Para que apunte a mi segmento "Data" ; Direccin LPT1 ; Nmero de veces que se repite el bucle ; Todos los Leds prendidos ; Enva valor al puerto ; Procedimiento delay de seg. ; Todos los Leds apagados ; Enva valor al puerto ; Procedimiento delay de seg.

repite:

MAIN

; Funcin para salir al DOS ; Llama a la interrupcin ; Fin del procedimiento

;---------------------------------------------------------------------------------PDELAY PROC NEAR ; Retardo de tiempo 1/2 seg. aproximado PUSH CX ; Guarda registro CX (CX0) MOV CX, 150 p1: PUSH CX ; Guarda nuevamente CX (CX1) MOV CX, 0FFFFH ; CX = 65535 (CX2) p2: LOOP p2 ; Decremento CX2 hasta llegar a cero POP CX ; Recupera CX (CX1) LOOP p1 ; Decremento CX1 hasta llegar a cero DEC DX ; Si cero, decremento DX POP CX ; Recupera CX (CX0) RET ; Retorna PDELAY ENDP ;---------------------------------------------------------------------------------END MAIN ; Fin de programa

PRACTICA 2; Este programa muestra como prender y apagar 8 leds conectados al puerto de salida del puerto paralelo a intervalos de seg. aproximadamente y durante 20 veces Pero simultneamente se debe enviar a la pantalla en binario el valor enviado al puerto paralelo.

PC
D0 D1 D2 D3 D4 D5 D6 D7

DB25

TARJETA DE INTERFASE
D7 LED D6 LED D5 LED D4 LED D3 LED D2 LED D1 LED D0 LED

R1 100

INCLUDE LIB_GEN.TXT .MODEL SMALL .STACK 64h ; reserva 100 bytes en la pila .DATA ; Segmento de datos (no hay datos) .CODE MAIN PROC FAR MOV AX, @Data ; Inicializa segmento de datos MOV DS, AX ; Para que apunte a mi segmento "Data ;****************************************************************** CALL borra ; Procedimiento que borra pantalla PCURSOR 5,0 ; Macro que posiciona cursor (fila,columna) CALL parpachar ; Imprime carcter parpadeante PCURSOR 7,20 ; Fila=3, Columna=25 PRINT 'PROGRAMA INTERMITENTE EN EL PUERTO PARALELO' ; Macro PCURSOR 9,0 ; Fila=11, Columna=0 CALL parpachar ; Imprime carcter parpadeante MOV DX, 378H ; Direccin puerto de salida MOV CX, 20 ; Numero de veces del lazo ;*********************************************************************

REPI: PCURSOR 15,35 MOV AL, 0FFH OUT DX, AL CALL VISUBIN_8 CALL PDELAY ; Posiciona cursor ; AL = 11111111b (leds ON) ; Se enva al puerto ; Se imprime en binario ; Se llama retardo de 1/2 seg

PCURSOR 15,35 MOV AL, 00H OUT DX, AL CALL VISUBIN_8 CALL PDELAY LOOP REPI
MOV INT ENDP AH, 4CH 21H

; Posiciona cursor ; AL = 00000000b (leds OFF) ; Se enva al puerto ; Se imprime en binario ; Se llama retardo de 1/2 seg ; Se repite bucle
; Funcin para salir al DOS ; Llama a la interrupcin ;Fin del procedimiento

MAIN

borra

borra

PROC MOV MOV MOV MOV INT RET ENDP

NEAR AX, 0600H BH, 07H CX, 0000 DX, 184FH 10H

; Procedimiento que borra pantalla ; Recorrer toda la pantalla ; Atributo fondo blanco, letra blanca ; Posicin superior izquierda ; Posicin inferior derecha

parpachar PROC NEAR MOV AH, 09H MOV AL, '*' MOV BH, 0 MOV BL, 0EH MOV CX, 79 INT 10H RET parpachar ENDP

; Procedimiento parpadeante ; Peticin de despliegue ; Carcter a imprimir ; Pgina 0 ; Fondo negro, letra amarilla ; Nmero de caracteres

;======================= Procedimiento que imprime en pantalla ======== ; Entrada: AL = valor a imprimir en binario un dato de 8 bits ;---------------------------------------------------------------------------------VISUBIN_8 PROC NEAR PUSH AX PUSH BX PUSH CX MOV CX, 8 ; Numero de veces que se repite MOV BH, 80H XX1: TEST AL, BH JZ CERO PUTCHAR "1" JMP XX2 CERO: PUTCHAR "0" XX2: SHR BH, 1 LOOP XX1 POP CX POP BX POP AX RET VISUBIN_8 ENDP

PDELAY PROC PUSH MOV p1: PUSH MOV p2: LOOP POP LOOP DEC POP RET PDELAY ENDP

NEAR CX CX, 650 CX CX, 0FFFFH p2 CX p1 DX CX

; Retardo de tiempo 1 seg aproximado ; Guarda registro CX (CX0) ; Guarda nuevamente CX (CX1) ; CX = 65535 (CX2) ; Decrementa CX2 hasta llegar a cero ; Recupera CX (CX1) ; Decrementa CX1 hasta llegar a cero ; Si cero, decrementa DX ; Recupera CX (CX0) ; Retorna

;---------------------------------------------------------------------------------END MAIN ; Fin de programa

APLICACIN 3 Este programa muestra como desplazar un bit de izquierda a derecha y viceversa ; durante 10 veces en 8 leds conectados al puerto paralelo

.MODEL SMALL .STACK 64h .DATA .CODE MAIN PROC FAR MOV AX, @Data MOV DS, AX MOV DX, 378H MOV CX, 10 MOV AL, 01H LAZO2: OUT DX, AL CALL PDELAY SHL AL, 1 TEST AL, 80H JZ LAZO2

; reserva 100 bytes en la pila ; Segmento de datos (no hay datos)

; Inicializa segmento de datos ; Para que apunte a mi segmento "Data" ; Direccin puerto de salida ; Numero de veces del lazo ; Sentido izquierda

; desplaza 1 bit a la izquierda ; Lleg al bit 7? ; NO, regresa a lazo2

;========================================================== ; Procedimientos tipo Near ;========================================================

PDELAY PROC NEAR ; Retardo de tiempo 300 mseg. aproximado PUSH CX ;Guarda registro CX (CX0) MOV CX, 100 p1: PUSH CX ; Guarda nuevamente CX (CX1) MOV CX, 0FFFFH ; CX = 65535 (CX2) p2: LOOP p2 ; Decremento CX2 hasta llegar a cero POP CX ; Recupera CX (CX1) LOOP p1 ; Decremento CX1 hasta llegar a cero POP CX ; Recupera CX (CX0) RET ; Retorna PDELAY ENDP ;---------------------------------------------------------------------------------END MAIN ; Fin de programa

APLICACIN 4 Este programa muestra como leer un dato de 8 bits conectado al puerto de entrada 379H. El dato ledo ser visualizado en 8 leds conectados al puerto de salida Descripcin: 1) Conecte el dip switch de 8 bits al MUX y de all al puerto 379H 2) Conecte el Pin 1 del puerto 37AH a la entrada A'/B del MUX 3) Conecte los 8 bits del puerto 378H a los 8 leds

MAIN

.MODEL SMALL .STACK 64h ; reserva 100 bytes en la pila .DATA ; Segmento de datos (no hay datos) .CODE PROC FAR MOV AX, @Data ; Inicializa segmento de datos MOV DS, AX ; Para que apunte a mi segmento "Data" CALL borra ; Procedimiento que borra pantalla PCURSOR 4,0 ; Macro que posiciona cursor (fila,columna) CALL parpachar ; Imprime carcter parpadeante PCURSOR 5,25 ; Fila=3, Columna=25 PRINT 'PROGRAMA DE LECTURA DEL PUERTO PARALELO' ; PCURSOR 6,0 CALL parpachar MOV MOV OUT MOV IN MOV DX, 37AH AL, 1H DX, AL DX, 379H AL, DX BL, AL ; Fila = 11, Columna = 0 ; Imprime carcter parpadeante

Macro

; Se selecciona nibble bajo P1'=0


; AL = 00000001b (C0'=0)

; Se lee nibble bajo y se almacena en BL


; BL = y'?yyy???

; Se selecciona nibble alto P1'=1 MOV DX, 37AH MOV AL, 0H ; AL = 00000000b (C0'=1) OUT DX, AL ; Se lee nibble bajo y se almacena en BH MOV DX, 379H IN AL, DX MOV BH, AL ; BH = x'?xxx??? ; BX = dato a corregir ; Se corrigen los 2 nibbles para tener el dato valido AND BX, 0B8B8h ; BX = x'0xxx000 _ y'0yyy000 MOV AX, BX AND BX, 8080h ; BX = x'0000000 _ y'0000000 XOR BX, 8080h ; BX = x0000000 _ y0000000 SHL AH, 1 ; AH = 0xxx0000 SHL AL, 1 ; AL = 0yyy0000 OR BX, AX ; BX = xxxx0000 _ yyyy0000 MOV CL, 4 SHR BL, CL ; BL = 0000yyyy OR BL, BH ; BL = xxxxyyyy (dato valido) ; Se envia a los 8 leds del puerto de salida MOV AL, BL MOV DX, 378H OUT DX, AL

MAIN

MOV INT ENDP

AH, 4CH 21H

; Funcin para salir al DOS ; Llama a la interrupcin ; Fin del procedimiento

;===================================================================== ; Procedimientos tipo Near ;============================================================== borra PROC NEAR ; Procedimiento que borra pantalla MOV AX, 0600H ; Recorrer toda la pantalla MOV BH, 07H ; Atributo fondo blanco, letra blanca MOV CX, 0000 ; Posicin superior izquierda MOV DX, 184FH ; Posicin inferior derecha INT 10H RET borra ENDP parpachar PROC NEAR ; Procedimiento parpadeante MOV AH, 09H ; Peticin de despliegue MOV AL, '*' ; Carcter a imprimir MOV BH, 0 ; Pgina 0 MOV BL, 8EH ; Fondo negro, letra amarilla MOV CX, 79 ; Nmero de caracteres INT 10H RET parpachar ENDP

;----------------------- Procedimiento que imprime en pantalla -------------------; Entrada: AL = valor a imprimir en binario un dato de 8 bits ;---------------------------------------------------------------------------------VISUBIN_8 PROC NEAR PUSH AX PUSH BX PUSH CX MOV CX, 8 ; Numero de veces que se repite MOV BH, 80H ; BH = 10000000b XX1: TEST AL, BH ; Es AL = BH? JZ CERO ; Si es igual, salta a CERO PUTCHAR "1" ; Si no, imprime un "1" JMP XX2 ; Salta a XX2 CERO: PUTCHAR "0" ; Imprime un "0" XX2: SHR BH, 1 ; Desplaza un bit a la derecha LOOP XX1 ; CX =0?, NO: Regresa a XX1 POP CX ; S, sale del bucle POP BX POP AX RET VISUBIN_8 ENDP

PDELAY PROC NEAR ; Retardo de tiempo 1 seg. aproximado PUSH CX ; Guarda registro CX (CX0) MOV CX, 650 p1: PUSH CX ; Guarda nuevamente CX (CX1) MOV CX, 0FFFFH ; CX = 65535 (CX2) p2: LOOP p2 ; Decremento CX2 hasta llegar a cero POP CX ; Recupera CX (CX1) LOOP p1 ; Decremento CX1 hasta llegar a cero POP CX ; Recupera CX (CX0) RET ; Retorna PDELAY ENDP ;---------------------------------------------------------------------------------END MAIN ; Fin de programa

Potrebbero piacerti anche