CODINGCLASSEURS WEKA ★ Comment exploiter toutes les ressources et augmenter les performances de votre AMSTRAD CPC ★

8/5.2.3 - La RS-232 AmstradCoding Classeurs Weka

8/5.2.3 - La RS-232 Amstrad

L'interface RS-232 Amstrad se présente sous la forme d'un boîtier se connectant sur la prise d'extension 2 x 25 contacts de votre Amstrad CPC 464, 664 ou 6128. Il est possible d'adjoindre l'extension lecteur de disquette DDI-1 sur un raccord prévu à cet effet. Vous pouvez, de plus, ajouter d'autres extensions, le BUS étant disponible. L'alimentation de l'interface est réalisée par un boîtier supplémentaire.

Vous disposez en sortie d'un connecteur DB-25 sur lequel sont disponibles les signaux apparaissant aux broches 2 (TD), 3 (RDI, 4 (RTS), 5 (CTSt, 7 (GNDI, 8 (DCD), 20 (DTR), 22 (RI) ( voir Partie 8, chap. 5.2.1 ). Les autres broches ne sont pas utilisables.
Dans l'interface se trouve un logiciel en ROM qui vous permet de programmer et d'utiliser la RS-232 sous le langage Basic grâce aux instructions RSX.

Ce logiciel est placé sous le numéro de ROM 6 dont vous pouvez lister toutes les commandes grâce à l'instruction nouvelle : |ROMCAT,6 .

Si vous possédez une autre extension munie d'un logiciel en ROM, vous pouvez aussi accéder à la liste de ses commandes en tapant |ROMCAT,n° de l'extension.

Si vous ne connaissez pas le numéro de votre extension, tapez tout simplement |ROMCAT et vous obtiendrez le nom de toutes vos extensions connectées.

On s'aperçoit, sur cette copie d'écran, que la ROM CPM est la ROM n° 7, la ROM V-DOS (si vous la possédez) est la ROM n° 1...

Si vous désirez ne plus utiliser vos ROMs durant une session de travail, vous pouvez déconnecter toutes vos ROMs (HORS TENSION !), soit taper l'instruction |ROMOFF. Attention, à cet instant vous perdez toutes les instructions précédemment installées en RSX

– mais vous récupérez de la mémoire vive (RAM). Seule une réinitialisation de votre Amstrad réinstallera les ROMs.

I - Les fonctions de base

Cette fonction permet d'initialiser l'interface RS-232, c'est-à-dire lui fournir tous les paramètres pour l'utiliser dans une configuration donnée.
La syntaxe est la suivante :

|SETSIO, vitesse émission, vitesse réception, contrôle, nombre de bits, parité, nombre de bits d'arrêt

* Vitesse d'émission : c'est la vitesse (en baudsï à laquelle seront émises les données. Les valeurs peuvent être : 50, 75, 110,150, 200, 300, 600, 1 200, 1 800, 2 000, 2 400, 3 600, 4 800, 9 600, 19 200. La valeur par défaut étant 9 600.

* Vitesse de réception : de même que la vitesse d'émission mais pour la réception des données.

* Contrôle : ce paramètre, lorsqu'il est non nul, permet de valider le contrôle du protocole d'échange par les lignes CTS, DTR et DCD. Si vous donnez à ce paramètre la valeur 0, le protocole d'échange matériel est dévalidé, ce qui peut être utile lorsque vous n'utilisez pas les lignes de contrôle de la RS-232.

* Nombre de bits : c'est le nombre de bits par caractère qu'il faut transmettre, ce nombre peut être compris entre 5 et 8.

* Parité : si vous désirez que la RS-232 génère un bit de parité à chaque mot émis, afin de vérifier la validité du caractère lors de la réception, il faudra fixer ce paramètre à 2 pour une parité impaire, à 1 pour une parité paire. La valeur 0 impose a l'interface de ne pas générer de bit de parité, ni de vérifier la validité du caractère. La parité est liée au nombre de bits mis à 1 dans un même octet. Si ce nombre est toujours pair, on dira que la parité est toujours paire (even en anglais) une parité impaire consiste en un nombre impair de bits à 1 (odd en anglais), aucune parité particulière (none en anglais) correspondra à des nombres indifféremment pairs ou impairs.

Lorsqu'on déclare un échange en parité paire par exemple, le système comptera les bits à T de chaque octet et mettra le huitième à 1 ou à zéro de façon à ce que le nombre total soit toujours pair. Le récepteur recevra alors des octets à parité paire uniquement. La perte d'un seul bit dans la transmission rendra l'octet impair et donc générera une erreur à la réception. Selon le protocole, soit cet octet sera ignoré ou le récepteur demandera sa réémission.

* Nombre de bits d'arrêt : vous pouvez spécifier ici le nombre de bits d'arrêt à la fin du caractère transmis :

0  = un bit d'arrêt
1  = un bit et demi
2  = deux bits d'arrêt

Exemple :

Il est possible d'échanger des données avec un minitel, par l'intermédiaire de sa prise péri-informatique et d'une RS-232 (voir Partie 8, chap. 5.2.4.2).

Voici l'instruction d'initialisation de l'interface RS-232 afin de coordonner les vitesses de transfert et d'adapter les formats des caractères :

|SETSIO, 1200, 1200, 0, 7, 1, 0

– vitesses d'émission et de réception de 1 200 bauds
–  pas de gestion matérielle du protocole
–   7 bits par caractère
–   parité paire
–   1 bit de stop

|SETTIMEOUT

Cette fonction vous permet de modifier le temps après lequel une
commande sera abandonnée en cas de non-réussite.

Syntaxe :    |SETTIMEOUT,temps

La valeur du temps sera donnée en millisecondes.
Par exemple l'instruction |SETTIMEOUT,20000 imposera un temps d'attente de 20 secondes avant d'abandonner une tentative de communication.

|SIO
Cette commande vous permet de connaître l'état actuel de l'interface RS-232.

Syntaxe :    |SIO,@a%

Il vous faudra tout d'abord définir la variable a% (par l'instruction a% = 0 par exemple).
Après exécution, la variable a% contiendra un entier codé sur 16 bits dont chacun aura la signification suivante :

bit 15       toujours égal à 0.
bit 14       indique une erreur de synchronisation lorsqu'il est égal à 1, sinon 0.
bit 13       indique qu'il y a eu surcharge lors de la réception donc des caractères perdus lorsqu'il est à 1.
bit 12       indique une erreur de parité sur le caractère reçu lorsqu'il est à 1.
bit 11        toujours égal à 0.
bit 10        toujours égal à 0.
bit 9          toujours égal à 0.
bit 8          indique, lorsqu'il est à 1, que le dernier caractère est envoyé.
bit 7          indique, par un 1, qu'une coupure a été reçue.
bit 6          toujours égal à 0.
bit 5          état de la ligne CTS (0 si prêt à émettre).
bit 4          état de la ligne RI (1 si détection de sonnerie).
bit 3          état de la ligne DCD.
bit 2          indique, lorsqu'il est à 1, que le registre d'émission est vide.
bit 1          toujours égal à 0.
bit 0          indique lorsqu'il est à 1 qu'une donnée reçue est disponible.

Exemple :

attente de la réception d'une donnée

10       a% = 0
20       WHILE (a% AND 1) <   > 1
30       ùSIO,@a%
30       WEND
40       REM une donnée est reçue lorsque l'on
50       REM sort de la boucle
60       REM il faut maintenant la lire

|INCHAR

Cette instruction permet de lire un caractère reçu par la RS-232.

La syntaxe est la suivante :    |INCHAR,@r%,a

La variable r% devra préalablement avoir été définie par l'instruction r% = 0, par exemple, car c'est son adresse qui est utilisée par le sous-programme de traitement de l'instruction ; de même que pour la variable a.

Après exécution, la variable r% contiendra :

0 :       si un caractère était présent.
256 :       si aucun caractère n'a été spécifié.
512 :       s'il y a eu arrêt avant qu'un caractère ne soit lu.
768 :       si une coupure en ligne a été détectée.
1024 :       si un caractère a été lu, mais une erreur de synchronisation s'est produite (le caractère n'est pas valable).
1280 :       si un caractère a été lu mais il y a eu saturation de caractères à la réception (on a perdu des caractères).
1536 :       si un caractère a été lu, mais avec une erreur sur la parité.

Afin de récupérer le caractère reçu, on pourra lire sa valeur ASCII dans une variable (x par exemple), en exécutant la ligne de programme
suivante :

x = peek(a)

Si cette valeur est un caractère affichable, l'instruction x$ = str$(x) vous la rendra.

|OUTCHAR

Cette instruction permet d'envoyer un caractère à la RS232. Celle-ci
attend que son buffer d'émission soit vide avant de le transmettre.

Syntaxe :    |OUTCHAR,@r%,caractère(ou variable)

Après exécution, r% contient :
0 :       si le caractère a bien été envoyé.
256 :       si aucun caractère n'a été spécifié.
512 :       s'il y a eu arrêt avant que le caractère n'ait pu être envoyé.

II - Les fonctions de transferts de chaînes de caractères

|SETBLOCKEND

Il est possible de spécifier le caractère indiquant la fin de la chaîne à trans-
mettre en exécutant l'instruction : |SETBLOCKEND,caractere

|INBLOCK

Cette instruction permet de recevoir une chaîne de caractère qui s'achè-
vera par un arrêt sur la ligne, le caractère de fin de chaîne spécifié précédemment ou lorsque la variable chaîne a été remplie (255 caractères maximum).

Syntaxe :    |INBLOCK,@r%,a$

Après exécution r% contient :

0             ;  :       si la chaîne a été remplie.
n             ;  :       si n caractères ont été reçus en plus de la fin de chaîne.
256           ;:       si aucune chaîne n'a été reçue.
512 + n      :       si le caractère n + 1 n'a pas été reçu et que l'on attendait
plus de n caractères.
768 + n           ; si une coupure de ligne a été reçue au n» caractère.
1024 + n :       si une erreur de synchronisation a été reçue avec une erreur de synchronisation.
1280 + n :       si le ne caractère a été lu avec saturation du buffer de réception.
1536 + n :       si le ne caractère est entaché d'une erreur de parité.
La chaîne a$ contiendra la chaîne de caractères reçue.

|OUTBLOCK

Cette instruction permet d'envoyer une chaîne de caractères via la
RS-232.

Syntaxe :

|OUTBLOCK,@r%,a$ (ou "chaîne de caractère")

Après exécution r% contient :

0                     ; la chaîne a bien été envoyée.
256               ;  aucune chaîne n'a été spécifiée ou la chaîne était vide.
256+ n           ; arrêt avant la fin d'émission de la chaîne, il reste les n caractères de la chaîne à envoyer.

III  - Transferts de fichiers

Deux types d'instruction permettent le transfert de fichiers par la RS-232.
Si vous utilisez une liaison minimale (vous ne connectez que les liaisons RX, TX et la Masse), alors vous utiliserez les instructions |SETFILEEND ; |INFILE ; |OUTFILE.

Si vous usez d'une liaison complète en connectant RTS, CTS, DTR, DSR et DCD en plus de RX, TX et la Masse, vous pouvez alors travailler avec des instructions plus « intelligentes » qui contrôlent le déroulement matériel du transfert (IBLOW ; et ISUCK).

|SETFILEEND

Cette instruction spécifie le caractère de fin du fichier.
Le caractère par défaut est CONTROL Z (appui simultané sur la touche CTRL et sur la touche Z).

Syntaxe :
|SETFILEEND,caractère

|INFILE

Cette instruction permet de recevoir un fichier ASCII et l'enregistre sur le support par défaut (cassette ou disquette).

Syntaxe :    MNFILE,nom du fichier

Le transfert s'achève lorsque le caractère de fin de fichier est lu. Les éventuels messages d'erreurs sont affichés à l'écran.

|OUTFILE

Cette instruction envoie un fichier stocké sur disquette ou cassette via la RS-232.

Syntaxe :    |OUTFILE,nom du fichier

Les messages d'erreurs sont affichés à l'écran

|BLOW

Cette instruction a la même fonction que l'instruction IOUTFILE mais permet un transfert contrôlé.

Syntaxe :    |BLOW,nom du fichier

Un seul message d'erreur peut être envoyé à l'écran : TRANSFERT ABORTED ( = transfert interrompu), si une erreur fatale se produit.

|SUCK

Cette instruction fonctionne de la même façon que INFILE mais contrôle le déroulement matériel.

Syntaxe :
|SUCK,nom du fichier

IV  - Instruction spécifique de ligne

|BREAKSEND

Cette instruction permet d'envoyer un « Break » sur la ligne durant un temps déterminé. Le break n'est envoyé que lorsque le buffer d'émission est vide (break = arrêt, interruption).

Syntaxe :

|BREAKSEND,@r%,temps de coupure

La variable r% contiendra, suite à l'exécution

0      si la coupure a bien été envoyée.
512   si le break n'a pas pu être envoyé, la ligne d'émission n'ayant pu être libérée.
Le temps de coupure est exprimé en millisecondes et ne pourra être compris qu'entre 0 et 65535.

V  - Fin de transmission

|CLOSESIO

Cette commande provoque la fermeture de la liaison RS232 et dévatide les signaux de contrôle de déroulement matériel RTS et DTR. Elle n'est exécutée que lorsque le buffer d'émission est vide.

Syntaxe :
|CLOSESIO,@r%

La variable r% contient après exécution :
0      si la RS232 est bien déconnectée.
512   si tout n'a pas été envoyé durant le temps d'attente spécifié.

VI  - Utilisation d'une imprimante série

La plupart des imprimantes sont des imprimantes « parallèles » ou « Centronics », communiquant avec l'ordinateur selon la norme CENTRONICS (voir Partie 8, chap. 3.2). Mais d'autres types de transmission peuvent être utilisés pour les imprimantes ou les tables traçantes, en particulier la transmission RS232.

Quatre commandes internes à la ROM de la RS-232 Amstrad permettent la gestion de dialogue avec une imprimante série.

|SERIAL

Cette commande frappée, toute donnée envoyée au port d'imprimante
Centronics est détournée vers l'interface RS-232C. Celle-ci sera donc considérée comme état le canal #8.

Par défaut, la RS-232C utilise le protocole XON/XOFF ainsi que le contrôle de déroulement matériel pour l'échange des données.

|NOXON

Cette commande annule le contrôle de déroulement logiciel XON/XOFF.
Tous les caractères reçus seront donc ignorés par la RS232C (Voir Partie 8, chap. 5.2).

|XON

Cette instruction rétablit le protocole XON/XOFF précédemment annulé.

|PARALLEL

Afin de ramener le canal #8 sur le port imprimante Centronics, il suffira de frapper PARALLEL.

VII  - Emulation de terminal

Votre Amstrad peut se comporter comme un terminal informatique, si vous le connectez par exemple à un ordinateur « maître ».

|TERMINAL

Ordonne à l'Amstrad de se comporter comme un terminal informatique.
Le clavier est directement connecté sur la ligne d'émission de données et l'écran sur la ligne de réception de données. C'est l'ordinateur maître qui devra renvoyer le caractère frappé pour affichage, car, comme le minitel en mode connecté, il n'y a pas d'écho local.
Pour reprendre la main il suffira de frapper sur ou.

|HALFDUPLEX

Permet de connecter localement le clavier à l'écran si l'ordinateur maître ne renvoit pas les caractères frappés.

|FULLDUPLEX
Ramène à l'état antérieur, sans écho local.

|CTRLDISPLAY
Cette commande permet d'afficher les codes de fonction reçus au lieu d'y obéir.

|CTRLACTION
Ramène le terminal en état d'exécuter les codes de fonction reçus.

VIII  - Le Vidéotex anglo-saxon

Si votre facture téléphonique ne vous effraie pas, vous pouvez vous connecter sur le réseau télématique anglais.

Les commandes, toutes spécifiques aux serveurs anglais, ont la syntaxe suivante :

|PRESTEL,(caractere)
|SAVEPRESTEL,nom du fichier
|LOADPRESTEL,nom du fichier
|CURSOR,no de colonne,no de ligne
|REFRESH,no de ligne

Page précédente : 8/5.2.2 - Le code ASCII

CPCrulez[Content Management System] v8.7-desktop/cache
Page créée en 091 millisecondes et consultée 813 fois

L'Amstrad CPC est une machine 8 bits à base d'un Z80 à 4MHz. Le premier de la gamme fut le CPC 464 en 1984, équipé d'un lecteur de cassettes intégré il se plaçait en concurrent  du Commodore C64 beaucoup plus compliqué à utiliser et plus cher. Ce fut un réel succès et sorti cette même années le CPC 664 équipé d'un lecteur de disquettes trois pouces intégré. Sa vie fut de courte durée puisqu'en 1985 il fut remplacé par le CPC 6128 qui était plus compact, plus soigné et surtout qui avait 128Ko de RAM au lieu de 64Ko.