Par Superna
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(+)).
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 :
0Ah L/E
permet de voir si un octet a été transmit
00h L
Note: L’utilisation de ces 2 ports dans la communication est superflue et peuvent être remplacés par l’unique P45h.
activation du port de communication serie
03h L = E
00h L/E
note sur l’écriture:
Bit de poids fort : Mode
Bits de poids faible : Vitesse
Note: Si la valeur contient les bits 5 et 6 allumés, la calculatrice pourra alors envoyer et recevoir en même temps.
Valeur normale 41h
La combinaison 00h rends la communication incoherente.
La combinaison 41h permet une reception et envoi correct.
Le P46h stocke le prochain octet à envoyer
??h E
permet de spécifier le type de vitesse à utiliser.
??h E
[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 :
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
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.
;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
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 :
;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
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.
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.