Documenti di Didattica
Documenti di Professioni
Documenti di Cultura
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
MAIN
; 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
;---------------------------------------------------------------------------------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
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
; 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
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
; Inicializa segmento de datos ; Para que apunte a mi segmento "Data" ; Direccin puerto de salida ; Numero de veces del lazo ; Sentido izquierda
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 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
;===================================================================== ; 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