PAGE 66,132 TITLE** PROGRAMMA di GESTIONE di programmi ASSEMBLER tipo COM (ottobre 2003) SUBTTL ** TUTORIAL ASSEMBLY -- www.giobe2000.it -- by ing. Giorgio OBER ;/---------------------------------------------------------------------------\ ;| NOME : Out16Lpt.ASM | ;| AUTORE : Giorgio OBER | ;| VERSIONE : ottobre 2003 | ;| DESCRIZIONE : Gestione di una PORTA PARALLELA a basso livello, al fine di| ;| controllare 16 linee d'uscita. | ;| /----------\ -------------------------------------------------------------| ;| | | Se si lavora con i Sistemi Operativi Win2000, Win NT o WinXP | ;| | NB !! | bisogna prima installare il Driver Configura_LPT1; scaricalo | ;| | | a: http://www.giobe2000.it/consigli/Scarica_VediLPT_XP.htm | ;| *----------* -------------------------------------------------------------| ;| | | Se si lavora con i Sistemi Operativi Win2000, Win NT o WinXP | ;| | NB !! | la SHELL DOS deve essere a "Pieno Schermo" (l'esecuzione in | ;| | | "finestra DOS" non produce effetto sulla Stampante) | ;| *----------* -------------------------------------------------------------| ;| | | In ogni caso PRIMA DI OGNI SESSIONE DOS Š necessario eseguire| ;| | NB !! | il programma Config_LPT1.EXE in ambiente Windows per attivare| ;| | | la visibilit… dei driver installati con Configura_LPT1 !!!!! | ;| \----------/ -------------------------------------------------------------| ;\---------------------------------------------------------------------------/ ; COSTANTI DEFINITE PER IL PROGRAMMA: PRNdato EQU 378H ;Registro dei DATI ( USCITA ) PRNcomd EQU 37AH ;Registro di CONTROLLO ( USCITA ) ; MACRO UTILIZZATE DAL PROGRAMMA: include c:\arch-lab\bin\GIOBE.MAC ; LIBRERIA UTILIZZATA DAL PROGRAMMA [opzione WinASM altrimenti non necessaria] includelib c:\arch-lab\bin\GIOBE.LIB ;PROCEDURE ESTERNE UTILIZZATE dal PROGRAMMA [NEAR, dalla LIBRERIA ~GIOBE.LIB~] ;----------------------------------------------------------------------------- EXTRN CambiaCol:NEAR EXTRN SET_cur:NEAR EXTRN VIA_cur:NEAR EXTRN RIP_cur:NEAR EXTRN KEYwait:NEAR EXTRN BIOSmsg:NEAR EXTRN Byt2Asc:NEAR EXTRN RAMcls:NEAR EXTRN RAMchr:NEAR EXTRN RAMcur:NEAR EXTRN RAMmes:NEAR EXTRN RIEMPI:NEAR EXTRN RAMpiu:NEAR ; DICHIARAZIONI PER I PROGRAMMI ESTERNI: PUBLIC ATTRIB PUBLIC Out16Lpt ;DEFINIZIONE DEL SEGMENTO DEL CODICE ;----------------------------------------------------------------------------- _prog SEGMENT BYTE PUBLIC 'CODE' ASSUME CS:_prog,DS:_prog ORG 0100H INIZIO: JMP Out16Lpt ;AREA DESTINATA AI DATI DEL PROGRAMMA ;\---------------------------------------------------------------------------/ ATTRIB DB 1FH Dato_16 DW 0 TESTO1 DB "Erogazione di un dato a 16 bit sulla porta parallela",00H TESTO2 DB "TUTORIAL ASSEMBLY --- www.Giobe2000.it ---",00H TESTO3 DB "Quit",00H ;AREA DESTINATA ALLE PROCEDURE DEL PROGRAMMA ;/---------------------------------------------------------------------------\ ;|PROCEDURA : DeskTop | ;|DESCRIZIONE: Procedura che inizializza completamente il piano di lavoro.| ;\---------------------------------------------------------------------------/ DeskTop:CALL RAMcls ;Pulisce lo schermo e inizializza il segmento ;dedicato alla RamVideo (ES=0B800H) CALL VIA_cur ; Rende il cursore invisibile M_COLOR 71H ; MOV AL,"°" ; CALL RIEMPI ; RAMrepC 80," ", 0, 0,30H; RAMrepC 80," ",24, 0,30H; RAMcol TESTO1, 0,10,3FH; Organizza il piano di presentazione RAMcol TESTO2,24,10,3FH; RAMcol TESTO3,24,73,30H; RAM_cur 24,73 ; M_COLOR 3FH ; MOV AL,"Q" ; CALL RAMchr ; RET ;/---------------------------------------------------------------------------\ ;|PROCEDURA : Out16bit | ;|DESCRIZIONE: Procedura che provvede a fissare sulle 2 memorie 74LS374 il | ;| dato a 16 predisposto nei registri AX. | ;| In pratica i 2 bytes predisposti sulla porta 0378H (copia ri-| ;| spettivamente di AL, AH) vengono smistati in sequenza sulle| ;| rispettive memorie (numerate con 0 e 1) | ;| | ;| /-[037AH/027AH - PORTA d'USCITA dei COMANDI]---------------\ | ;| | | * | * | * | * |Out|Out|Out|Out| | | ;| |non \---*---*---*---*---*---*---*---/ | | ;| |disponib.*---*---*---/ | | | | | | ;| |pin 17 Negato---non usato/ | | | | | ;| |pin 16 ---------non usato----/ | | | | ;| |pin 14 Negato---[Ctr1]-----------/ \[Ctrl0] pin 1 Negato| | ;| \----------------------------------------------------------/ | ;\---------------------------------------------------------------------------/ Out16bit:PUSH AX ; /[opzionale]---------------------------------\ M_CURSOR 13,38 ; | Provvede alla stampa a video dell'informa- | CALL Byt2Asc ; | zione (2 bytes) che sta per essere spedita | MOV AL,AH ; | al registro DATI della porta parallela | CALL Byt2Asc ; \--------------------------------------------/ POP AX ; MOV DX,PRNdato ; Punta il Registro DATI 0378H della parallela OUT DX,AL ; Eroga in stretta sequenza i 2 bytes; il clock MOV AL,02 ; Š generato controllando i bit1, bit0 del CALL Clock ; Registro di CONTROLLO 037AH (invertiti inter- MOV AL,AH ; namente) con sequenza 11,10,11 per la prima OUT DX,AL ; memoria e 11,01,11 per la seconda; in questo MOV AL,01 ; modo in entrambi i casi viene infatti generato CALL Clock ; un breve impulso positivo RET ;--------------------------------------------------------------------- Clock: ADD DX,2 ; Genera un impulso alto sulla linea di clock OUT DX,AL ; di una sola delle 2 memorie 74LS374 in accordo MOV AL,03 ; con il valore dei bit1, bit0 predisposto nel OUT DX,AL ; registro AL prima di chiamare la procedura; SUB DX,2 ; l'impulso Š fornito al clock della prima, con RET ; AL=02, e a quello della seconda, con AL=01; la RET ; linea di clock della rimanente rimane bassa. ;***************************************************************************** ; ---------------------------------------------- Out16Lpt proc NEAR ; AREA DEDICATA AL MAIN PROGRAM ; ---------------------------------------------- ;----------------------------------------------------------------------------- ; Mette le memorie 74LS374 in condizione di MOV DX,PRNcomd ; attesa predisponendo i bit1, bit0 del Registro MOV AL,03 ; di CONTROLLO 037AH (invertiti internamente) al OUT DX,AL ; valore 11 cioŠ ponendo a "0" le linee di ckock ; di entrambe le memorie 74LS374 CALL DeskTop ; Organizza il piano di presentazione MOV AX,2301H ; Prepara il dato a 16 bit da spedire, un byte ; alla volta, alla porta parallela ;/---------------------------------------------\ CALL Out16bit ;|Memorizza il dato a 16 sulle linee di USCITA | ;\---------------------------------------------/ xxx00: CALL KEYwait ; Si ferma in attesa della pressione di un tasto AND AL,11011111B ; imponendo il ritorno immediato al sistema CMP AL,"Q" ; operativo se si tratta del tasto "Q" JZ _OUT ; (cosa non strettamente necessaria..) JMP SHORT xxx00 ; _OUT: PUSH AX ; Torna al DOS con la memoria liberata e con la CALL RIP_cur ; chiusura di tutti i file; cede il controllo MOV DH,23 ; al processo padre (generalmente COMMAND.COM); MOV DL,0 ; il valore posto eventualmente in AL prima di CALL SET_cur ; uscire pu• essere testato in uscita con la POP AX ; funzione 4DH o mediante la lettura della MOV AH,4CH ; variabile DOS "ERRORLEVEL" INT 21H Out16Lpt ENDP ; Chiusura della Procedura "Main Program" _prog ENDS ; Chiusura del Segmento di CODICE END INIZIO ; Indirizzo dell'ultima istruzione da compilare