PAGE 66,132 TITLE** PROGRAMMA di GESTIONE di programmi ASSEMBLER tipo COM (maggio 2012) SUBTTL ** TUTORIAL ASSEMBLY -- www.giobe2000.it -- by ing. Giorgio OBER ;/---------------------------------------------------------------------------\ ;| NOME : Out08Lpt.ASM | ;| AUTORE : Giorgio OBER | ;| VERSIONE : maggio 2012 | ;| DESCRIZIONE : Gestione di una PORTA PARALLELA a basso livello, al fine di| ;| controllare una memoria 74LS374 posta sulla porta 0378H, a| ;| sua volta chiamata al controllo dell'accensione di un DIGIT.| ;| /----------\ -------------------------------------------------------------| ;| | | 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 STASP: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 Out08Lpt ;DEFINIZIONE DEL SEGMENTO DEL CODICE ;----------------------------------------------------------------------------- _prog SEGMENT BYTE PUBLIC 'CODE' ASSUME CS:_prog,DS:_prog ORG 0100H INIZIO: JMP Out08Lpt ;AREA DESTINATA AI DATI DEL PROGRAMMA ;\---------------------------------------------------------------------------/ ATTRIB DB 1FH Dato_16 DW 0 TESTO1 DB "Erogazione di un dato a 8 bit sulla porta parallela",00H TESTO2 DB "TUTORIAL ASSEMBLY --- www.Giobe2000.it ---",00H TESTO3 DB "Incrementa",00H TESTO4 DB "Quit",00H ;------------------------------------------- ; Tabella per logiche attive alte (FND500) ;------------------------------------------- TabSeg DB 00111111B ; = 3FH "0" DB 00000110B ; = 06H "1" DB 01011011B ; = 5BH "2" DB 01001111B ; = 4FH "3" DB 01100110B ; = 06H "4" DB 01101101B ; = 6DH "5" DB 01111101B ; = 7DH "6" DB 00000111B ; = 07H "7" DB 01111111B ; = 7FH "8" DB 01101111B ; = 6FH "9" DB 01110111B ; = 77H "A" DB 01111100B ; = 7CH "b" DB 01011000B ; = 58H "C" DB 01011110B ; = 5EH "d" DB 01111001B ; = 79H "E" DB 01110001B ; = 71H "F" ;------------------------------------------- ;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,60,30H; RAMcol TESTO4,24,73,30H; RAM_cur 24,60 ; M_COLOR 3FH ; MOV AL,"I" ; CALL RAMchr ; RAM_cur 24,73 ; MOV AL,"Q" ; CALL RAMchr ; RET ;/---------------------------------------------------------------------------\ ;|PROCEDURA : Out08bit | ;|DESCRIZIONE: Procedura che provvede a fissare sulla memoria 74LS374 il dato| ;| a 8 bit predisposto nel registri AL. | ;| In pratica il byte predisposto prima sulla porta 0378H (copia| ;| di AL) e poi trasferito a valle del 74LS374, generando un| ;| breve impulso attivo alto con il bit0 della porta 037AH. | ;| | ;| /-[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---non usato--------/ \[Ctrl] pin 1 Negato| | ;| \----------------------------------------------------------/ | ;\---------------------------------------------------------------------------/ Out08bit:PUSH AX ; MOV DX,0378H ; Punta il Registro DATI 0378H della parallela OUT DX,AL ; Eroga il byte desiderato MOV DX,037AH ; Genera un impulso alto sulla linea di clock MOV AL,00 ; della memoria 74LS374 forzando a "1" il bit0 OUT DX,AL ; del Registro di CONTROLLO 037AH (NB: invertito MOV AL,01 ; internamente) e, subito dopo, riportandolo a OUT DX,AL ; "0": in questo modo viene infatti generato un ; breve impulso positivo che fornisce il fronte ; di salita necessario per la memorizazione POP AX ; /[opzionale]---------------------------------\ M_CURSOR 13,38 ; | Provvede alla stampa a video dell'informa- | CALL STASP ; | zione (1 byte) che sta per essere spedito | CALL Byt2Asc ; | al registro DATI della porta parallela | CALL STASP ; \--------------------------------------------/ RET ;***************************************************************************** ; ---------------------------------------------- Out08Lpt proc NEAR ; AREA DEDICATA AL MAIN PROGRAM ; ---------------------------------------------- ;----------------------------------------------------------------------------- CALL DeskTop ; Organizza il piano di presentazione LEA SI,TabSeg ; Prepara il dato a 8 bit da spedire alla porta MOV AL,00H ; Inizializza l'interfaccia 74LS374 col valore ; necessario per tenere spenta la periferica, ; cioŠ il nostro Digit FND500 ;/---------------------------------------------\ xxx00: CALL Out08bit ;|Memorizza il dato corrente sulle linee di OUT| ;\---------------------------------------------/ xxx01: CALL KEYwait ; Si ferma in attesa della pressione di un tasto AND AL,11011111B ; rende maiuscolo il codice Ascii del tasto CMP AL,"I" ; Se NON si tratta del tasto "I" prosegue JNZ xxx02 ; l'interpretazione del codice del tasto premuto MOV AL,[SI] ; Altrimenti provvede all'erogazione del byte INC SI ; prelevato dalla tabella sul digit FND500 JMP xxx00 xxx02: CMP AL,"Q" ; Se si tratta del tasto "Q" impone il ritorno JNZ xxx01 ; immediato al sistema operativo _OUT: PUSH AX MOV AL,00H ; Prima d'uscire spegne il Digit FND500 CALL Out08bit CALL RIP_cur ; Torna al DOS con la memoria liberata e con la MOV DH,23 ; chiusura di tutti i file; cede il controllo MOV DL,0 ; al processo padre (generalmente COMMAND.COM); CALL SET_cur ; il valore posto eventualmente in AL prima di POP AX ; uscire pu• essere testato in uscita con la MOV AH,4CH ; funzione 4DH o mediante la lettura della INT 21H ; variabile DOS "ERRORLEVEL" Out08Lpt ENDP ; Chiusura della Procedura "Main Program" _prog ENDS ; Chiusura del Segmento di CODICE END INIZIO ; Indirizzo dell'ultima istruzione da compilare