converti da ascii ad alfanumerico

Transcript

converti da ascii ad alfanumerico
CONVERSIONE DAL CODICE
ASCII
Abbiamo il nostro Pensosi che è in ascolto di un messaggio da parte di un radioamatore che trasmette i suoi
messaggi in codice ASCII. Pensosi legge da un display il codice e lo converte in caratteri alfabetici
trasmettendoli sulla periferica di uscita. Quando viene trasmessa la sequenza END il programma termina
altrimenti prosegue indefinitamente
Antonio Santoro
ANALISI
Abbiamo due tabella: la prima è memorizzata in via Starza Lunga e contiene i codici
ascii mentre la seconda è memorizzata in via Cancello e contiene nello stesso ordine
i caratteri alfanumerici. La conversione avviene semplicemente facendo avanzare
contemporaneamente un puntatore alla prima tabella ed un puntatore alla seconda
tabella. Ci si ferma quando nella prima tabella si è incontrato il codice inviato. Il suo
corrispondente alfanumerico sarà automaticamente puntato dal secondo puntatore.
Per decidere se si è finito si userà un registro che funzionerà da flag: quando vale
zero vuol dire che non è ancora iniziata la sequenza END. Appena arriva la E si pone
ad 1 il flag. Se arriva una D si controlla il flag: se esso è a 2 vuol dire che la D è
l'ultima lettera della sequenza END. Se il carattere ricevuto non è E, né D né N vuol
dire che la sequenza non è iniziata o se pur iniziata non si è conclusa e quindi se
prima si erano ricevuti E o EN non si trattava della sequenza terminale, perciò il flag
va posto a 2. Infine se si riceve N e il flag è pari a 2 forse siamo alla seconda lettera
della sequenza finale e poniamo il flag a 2.
PSEUDOCODIFICA
Inizio:
D=0
Ciclo:
ascolta la radio
Se non c'è un codice salta a ciclo
A=codice
B=via starza lunga 1
C=via cancello 1
Ciclo2:
se A=(B) salta avanti
Inc B
Inc C
Salta a ciclo 2
Avanti:
A=(C)
Scrivi A sull'unità di uscita
Se A diverso da 'E' salta ad avanti2
D=1
Salta a ciclo
Avanti2:
se A diverso da 'D' salta ad avanti3
Se D diverso da 2 salta ad avanti 4
Fermati
Avanti4:
D=0
salta a ciclo
avanti3:
se A diverso da 'N' salta ad avanti5
se D diverso da 1 salta ad avanti6
D=2
Salta a ciclo
Avanti6:
D=0
Salta a ciclo
Avanti5:
D=0
Salta a ciclo
Si noti come vi siano delle ripetizioni inutili nella flow chart che può essere
semplificata portando alla nuova pseudocodifica
Inizio:
D=0
Ciclo:
ascolta la radio
Se non c'è un codice salta a ciclo
A=codice
B=via starza lunga 1
C=via cancello 1
Ciclo2:
se A=(B) salta avanti
Inc B
Inc C
Salta a ciclo 2
Avanti:
A=(C)
Scrivi A sull'unità di uscita
Se A diverso da 'E' salta ad avanti2
D=1
Salta a ciclo
Avanti2:
se A diverso da 'D' salta ad avanti3
Se D diverso da 2 salta ad avanti 5
Fermati
avanti3:
se A diverso da 'N' salta ad avanti5
se D = 1 salta ad avanti4
avanti5:
D=0
Salta a ciclo
Avanti4:
D=2
Salta a ciclo