Table des matières

Par Superna

Généralités

Le port communication qu’utilise notre calculatrice est un port de type synchrone pouvant transférer de1200bps à 115200bps. Nous allons voir comment gérer cette entrée/sortie pour communiquer avec un Pc/Mac ou une autre calculatrice (Ti/Casio G25→65/G100(+)).

Les ports matériels

Ces ports matériels a ne pas confondre avec le port série correspondent avec les éléments d’entrée-sortie comme l’écran ou le port comm à travers le BIOS. Pour ne pas confondre je nommerais un port matériel avec PXXh avec XX, le numéro du port en hexadécimal.

Notation :

P0Ah : Contrôle du port série et du clavier

valeur par défaut

0Ah L/E

Rôle des bits

P0Eh : Témoin de Contrôle du port série

Rôle du port

permet de voir si un octet a été transmit

Valeur par défaut

00h L

Rôle des bits

Note: L’utilisation de ces 2 ports dans la communication est superflue et peuvent être remplacés par l’unique P45h.

P11h : Met en route le port comm

Rôle du port

activation du port de communication serie

Valeur par défaut

03h L = E

Rôle des bits

P44h : Gestion du port comm

Rôle du port

Valeur par défaut

00h L/E

Rôle des bits

En écriture

note sur l’écriture:

Bit de poids fort : Mode

Bits de poids faible : Vitesse

En lecture

Note: Si la valeur contient les bits 5 et 6 allumés, la calculatrice pourra alors envoyer et recevoir en même temps.

P45h : état du port comm et contrôle valeur a transférer

Rôle du port

Rôle des bits

En lecture

En écriture

Valeur normale 41h

La combinaison 00h rends la communication incoherente.

La combinaison 41h permet une reception et envoi correct.

P46h : Buffer d’envoi

Rôle du port

Le P46h stocke le prochain octet à envoyer

Valeur par défaut :

??h E

P47h : Met en route le port comm

Rôle du port

permet de spécifier le type de vitesse à utiliser.

Valeur par défaut

??h E

Rôle des bits

[image]

Pour initialiser la vitesse voulue, il faut mettre la valeur en Vert dans P47h. Ensuite mettre en bits de poids faible da la valeur a mettre dans P44h la valeur en Violet.

Ex : Pour communiquer à 14400bps on mettra au choix une des solutions suivantes :

Initialisation

L’initialisation primaire consiste à mettre du courant dans le port communication. Le P11h gère en effet le courant dans ce port. Donc avant toute communication, il faut activer les bits 5 et 6 du P11h pour que le port soit à 4.92V DC. Un problème mineur se pose : le P11h se remet à sa valeur pas défaut dès que la calculatrice s’éteint et se rallume, donc il faut surveiller le P11h soit désactiver l’interruption du clavier : L’Int 9. A la fin de communication, il faut donc éteindre les 2 bits 5 et 6 pour éteindre le port

Procédure d’envois de donnée

Etapes

Pour l’envoi, on configurera le port de telle sorte que la calculatrice envoie automatiquement le dernier octet mis dans le P46h.

Donc avant l’initialisation, il faudra mettre le premier octet à envoyer dans P46h pour éviter l’envoi d’un octet non voulu.

Donc, on va utiliser les spécifications des ports pour cette initialisation :

remarque :

La communication en elle-même se trouve entre 6 et 7.

Notez que cette routine fonctionne avec toutes les vitesses.

Si vous ne désirez pas que cet octet soit envoyé, il est possible d’exécuter la partie 1 après la partie 6 Lors de l’initialisation.

Exemple

;Assembleur 286
;Méthode d’envoi d’un octet 13h à 38400 bps
.partie1:
in al,11h         ;prends la valeur de P11h
or al,60h         ;active les bits 5 et 6
out 11h,al        ;remet en P11h
.partie2:
mov al,0h
out 44h,al        ;met 0 dans P44h
.partie3:
mov al,41h        ;comm correcte
out 45h,al
mov al,21h        ;vitesse principale
out 47h,al        ;met dans P47h
.partie4:
mov al,13h
out 46h,al
.partie5:
mov al,7C         ;communication a 38400bps
out 44h,al
.partie6:
in al,45h         ;prends P45h
and al,1          ;ne prends que le bit 0 (1= 00 000 001b)
cmp al,1          ;compare avec 1
jne .partie6      ;si pas 1, re verifie 
.partie7: 
;on continue
.partie8: 
mov al,0h
out 44h,al        ;met 0 dans P44h
.partie9 :
in al,11h         ;prends la valeur de P11h
and al,9Fh        ;désactive les bits 5 et 6
out 11h,al        ;remet en P11h
;End

Procédure de reception de donnée

Etapes

La réception est un peu plus compliquée car on a un buffer d’un octet donc les valeurs s’empilent et il faut aller vite.

En observant les ports matériels, on s’aperçoit que l’on peut gérer l’arrivée d’un octet par le P0Eh ou bien par le P45h.

Mais nous allons vérifier une arrivée avec P45h car il nous indique aussi s’il y a des erreurs et une double vérification prendrait plus de temps car il faudrait vérifier P0Eh, vérifier P45h et prendre l’octet. On peut faire plus simple en prenant la valeur de P45h, vérifier le bit 1, si à 1, vérifié sur la même valeur déjà stockée les bits d’erreurs et prendre l’octet, certes plus complexe mais plus rapide.

Donc je vais vous décrire la façon comment attendre l’arrivée d’un octet avec la gestion des erreurs :

Exemple

;Assembleur 286
;Méthode de réception d’un octet a 34800bps
.partie1:
in al,11h            ;prends la valeur de P11h
or al,60h            ;active les bits 5 et 6
out 11h,al           ;remet en P11h
.partie2:
mov al,0h
out 44h,al           ;met 0 dans P44h
.partie3: 
mov al,21h           ;vitesse principale
out 47h,al           ;met dans P47h 
.partie4:
mov al,41h           ;comm correcte
out 45h,al 
mov al,3C            ;réception à 38400bps
out 44h,al
.partie5:
in al,45h            ;prends P45h
.partie6:
mov ah,al            ;copie de sauvegarde
and al,2             ;prends le bit 1
cmp al,2             ;vérifie sa valeur
jne .partie6         ;si 0, re vérification
mov al,ah            ;reprise de la sauvegarde
and al,18h           ;prends les bits 4 et 5
cmp al,0             ;si aucun activé continuer
je noerror
in al,44h            ;vide le buffer
jmp .partie5         ;revérifie
noerror:
.partie7:
in al,44h            ;prends la valeur reçue
.partie8: 
   ;pas besoin d’analyse
.partie9:
mov al,0h
out 44h,al           ;met 0 dans P44h
.partie10:
in al,11h            ;prends la valeur de P11h
and al,9Fh           ;désactive les bits 5 et 6
out 11h,al           ;remet en P11h
;End

Et le reste de la calculatrice

Cette nouvelle méthode permet en outre de permettre encore l’utilisation de toutes les autres fonctions de la calculatrice notamment le clavier. Mais pour la réception, la vérification d’arrivée doit être rapide et constant donc il n’est pas conseillé de s’absenter pour écrire plusieurs pixels ou vérifier le clavier. Il est même préférable de placer la routine de vérification dans une interruption du Timer 1Ch qui est appelée sur Pc environ 18,2fois par secondes et sur la calculatrice environ 50 fois par secondes, ce qui permet de vérifier un vitesse jusqu’a 390000bps, ce qui est largement suffisant pour vérifier même la vitesse 115000bps. Il est surtout préférable de vérifier le clavier avec les méthodes de touches multiples pour ne pas attendre et d’afficher un pixel le plus rapidement possible et si possible pixel par pixel pour laisser l’interruption se lancer. Aussi, il semble que l’envoi soit trop rapide donc il est conseillé de mettre entre chaque octet envoyé une ou deux instructions assembleur HLT pour faire plus fluide.

Note sur la méthode

Les méthodes précédentes sont faciles d’accès car on peut envoyer ou recevoir quand on veut après l’initialisation, c’est à dire que si vous envoyer un octet, après la partie 7 de l’envoi, vous pourrez de suite continuer après la partie 5 de réception. Pour changer de mode de réception il n’est pas nécessaire de reconfigurer.