|
 |
Procedure Seriali |
RxD_Int - Dato pronto 1/2
[212 di 403] |
- Gestione della
Ricezione Dati con la Tecnica dell'Interruzione |
|
7.2
Procedura RxD_Int,
complementare a
RxD_WR
per
Dato ricevuto pronto [1 di
2] |
 | La procedura RxD_Int
ha il compito di
gestire
i dati
ricevuti dalla linea,
assumendoli (se ci sono) dal
Buffer Circolare di
Ricezione e passandoli in uscita al
dal
programma principale del progetto di
gestione sotto interrupt, del quale è
indispensabile parte integrante. |
 | Spetterà poi a quest'ultimo il
compito di decidere cosa farne: probabilmente li metterà a video e/o li
memorizzerà da qualche parte, magari in un file. |
 |
Poichè queste operazioni non sono necessarie se il Buffer è trovato
vuoto, la
procedura provvede per prima cosa a verificare questa evenienza, avvisando di
ciò il programma principale chiamante ponendo AH=01H: |
 | Se invece il
Buffer Circolare di
Ricezione non è vuoto, la procedura
RxD_Int assume in
AL il byte corrente (puntato da [RxDBufRD]), lasciandolo
anche
AH=00, per avvisare
che il dato assunto è attendibile. |
 | Naturalmente il puntatore in lettura [TxDBufRD] viene incrementato e se
viene a coincidere con la fine fisica del Buffer esso viene reinizializzato a
0000H per garantire la
circolarità. |
 | Se per qualche ragione la procedura
RxD_Int non è stato
in grado di "scaricare" (leggere
) i bytes dal Buffer i 2 puntatori possono coincidere indicando che
il Buffer è pieno:
in questo caso il carattere appena
ricevuto dalla linea viene
perduto (non essendoci per esso
più spazio). |
 | In effetti questo può succedere se i dati arrivano con
rilevante velocità; come sottolineato nel paragrafo precedente, il rischio si
evita facilmente disponendo di un
Buffer Circolare di
Ricezione
relativamente grande. |
 | Nei nostri progetti applicativi, RxD5Com1
(per la
COM1) e RxD5Com2
(per la
COM2) è
stata usata una misura di 1024 bytes:
|
 | Se il sottoservizio
RxD_WR di
ServInt0C
fa a meno del
Buffer Circolare di
Ricezione, come nei progetti RxD6Com1
(per la
COM1) e RxD6Com2
(per la
COM2),
questa procedura accessoria non è necessaria. |
©
2001-2010 - Studio Tecnico
ing. Giorgio OBER
Tutti i diritti sono riservati
|