Indirizzi I/O della porta parallela:
LPT 1 da 378h a 37Fh
LPT 2 da 278h a 27Fh
LPT 3 da 3BCh a 3B0h
Nel caso, per esempio della LPT1 si avrà:
|
378 |
D7 |
D6 |
D5 |
D4 |
D3 |
D2 |
D1 |
D0 |
|
379 |
Busy |
ACK |
Pap.end |
Sel-in |
Error |
X |
X |
X |
|
37A |
X |
X |
X |
X |
Select |
Init |
Auto-fd |
Strobe |
|
37B |
||||||||
|
37C |
||||||||
|
37D |
||||||||
|
37E |
||||||||
|
37F |

Sorgente in assembly
title Antifurto ;Titolo del programma
.model small ;Modello di utilizzo della memoria
portao = 378h ;Indirizzo uscita porta parallela
portai = 379h ;Indirizzo ingresso porta parallela
BSala = 08h ;Bit Sensore Sala
BCucina = 10h ;Bit Sensore Cucina
BIngresso = 20h ;Bit Sensore Ingresso
BAbilit = 40h ;Bit abilitazione impianto
.stack ;Occupazione del segmento di stack
.data ;Segmento dati qui si definiscono le variabili utilizzate
StImpInser db "Impianto inserito",10,13,'$'
StImpDisin db "Impianto disinserito",10,13,'$'
StAllSala db "Allarme sala",10,13,7,'$'
StAllCucina db "Allarme cucina",10,13,7,'$'
StAllIngr db "Allarme ingresso",10,13,7,'$'
Sportai db 0
.code ;Segmento codice: da quindi si scrive il programma
.startup ;Modulo di inizializzazione prima dello start del programma
;-----------------Blocco eseguito da dinserito----------------------------
;------------------------------------------------------------------------
CicloDisin:
mov dx,portai
LNoCamb:
call SubContrUscita ;Controllo se bisogna uscire
in al,dx
cmp al,Sportai ;Controllo se ci sono dei cambiamenti sugli ingressi
je LNoCamb
mov Sportai,al
;-----------------Controllo se inserito-------------------------------
ContImpIns:
mov ah,al
and ah,BAbilit
jnz CicloDisin
mov dx,offset StImpInser
call ScriviMess
;-----------------Blocco eseguito da inserito----------------------------
;------------------------------------------------------------------------
CicloInser:
mov dx,portai
LNoCamb1:
call SubContrUscita
in al,dx
cmp al,Sportai
je LNoCamb1
mov Sportai,al
;-----------------Controllo se disinserito-------------------------------
ContImpDis:
mov ah,al
and ah,BAbilit
jz ContSala
mov dx,offset StImpDisin
call ScriviMess
jmp CicloDisin
;-----------------Controllo allarme sala---------------------------------
ContSala:
mov ah,al
and ah,BSala
jz VisAllSala
jmp ContAllCucina
VisAllSala:
mov dx,offset StAllSala
call ScriviMess
;-----------------Controllo allarme cucina--------------------------------
ContAllCucina:
mov ah,al
and ah,BCucina
jz VisAllCucina
jmp ContAllIngr
VisAllCucina:
mov dx,offset StAllCucina
call ScriviMess
;-----------------Controllo allarme ingresso-------------------------------
ContAllIngr:
mov ah,al
and ah,BIngresso
jz VisAllIngr
jmp ContrUscita
VisAllIngr:
mov dx,offset StAllIngr
call ScriviMess
ContrUscita:
call SubContrUscita;
jmp CicloInser
;################### Subroutines ########################################
;------------------Sub uscita con tasto premuto---------------------------
SubContrUscita:
mov ah,0bh
int 21h
cmp al,0FFH
jne ritorna
.exit ;Modulo di chiusura del programma
ritorna:
ret
;-----------------Subroutine scrittura messaggi-----------------
ScriviMess:
push ax
mov ah,9
int 21h
pop ax
ret
end