Vous ne trouvez pas de réponse à votre problème ? Alors posez la question dans le forum. Souvenez-vous qu'il n'y a jamais de question bête, mais rester dans l'ignorance parce que l'on n'ose pas poser une question, ça c'est une erreur !

Sujet : pb sur liaison rs232 [ Archives / c, c++ et asm ] (6co)

mercredi 21 avril 2004 à 20:34:27 | pb sur liaison rs232

6co

Bonjour à tous !
En quelques mots la situation :
je suis stagiaire, l'un de mes projets est d' "espionner" les échanges entre un automate et un pc(console graphique) sur port com. Je travaille sous dev-cpp mais j'ai dû utiliser des instructions assembleur (AT&T, désolé) afin d'aboutir à un résultat...
Tout semblait bien fonctionnait sauf que l'execution de mon programme est considérée par les machines comme une défaillance des échanges.

Quelqu'un aurait-il ne serait-ce qu'une vague idée du problème ???

Merci d'avance

jeudi 22 avril 2004 à 17:00:51 | Re : pb sur liaison rs232

patatalo

Membre Club Administrateur CodeS-SourceS
salut,

c sur quel OS ?
peux-tu envoyer ton source ?
j'ai déjà travaillé sur un hooker de port com ( sous windows ) donc je pourrais peut etre t'aider.

@++

vendredi 23 avril 2004 à 14:45:34 | Re : pb sur liaison rs232

6co

salut et merci d'avoir répondu patatalo !

voici ma source, c'est pas grand chose, pour l'instant un simple essai.

#include <iostream>
#include <stdlib.h>
#include <conio.c>
#include <windows.h>

using namespace std;
unsigned int adr=0x3F8; // adresse du port com1
unsigned char ret_char; // caractère lu sur le port
unsigned char ctrl_char; // mémoire du caractère précédent
int main(void)
{
int touche; // touche pressée par l'utilisateur
while (touche!=27)
{
// instructions assembleur
#pragma inline
asm("movl _adr, %edx");
asm("in %dx, %al");
asm("movb %al, _ret_char");

// le caractère lu ne sera affiché que s'il est changé
if (ret_char!=ctrl_char)
{
printf("%2X\n", ret_char);
Sleep(10); // rafraichissement de la lecture
}
ctrl_char=ret_char; // passage du caractère lu en mémoire
}
return 0;
}

une précision, cependant, il m'a été impossible de capter la moindre info par une lecture plus classique en C++ du port com du type ... CreateFile("COM1",....)....
Je commence à avoir des doutes sur le port, ce pourrait être un RS485... je manque cruellement de doc sur l'installation

Encore merci...

vendredi 23 avril 2004 à 14:47:39 | Re : pb sur liaison rs232

6co

ouppps

en relisant ton message et le mien, je viens de m'appercevoir que j'avais oublié de préciser que le pc servant de console graphique tournait sous Windows98...

Voilà qui est fait ;-)

6co

vendredi 23 avril 2004 à 16:47:07 | Re : pb sur liaison rs232

patatalo

Membre Club Administrateur CodeS-SourceS

salut,

le fonctionnement du port COM n'est pas aussi simple que ça
déjà, il faut que tu règle la vitesse, le nombre de bits de données, la parité, le nombre de bits d'arret.
ensuite, si le port com est réglé pour fonctionner en mode interruption, tu dois hooker l'interruption dans la IDT.

avant de lire les données directement, je pense que tu dois pouvoir interroger le port com sur la présence de caracteres mais je me rappelle plus comment on fait, je regarderai...

la deuxieme methode que je peux te proposer et qui a mon avis sera beaucoup + valable sera de hooker les fonctions d'entrée/sortie du driver VCOMM.VXD.
Je vais essayer de retrouver le source de mon prog ( que de l'assembleur ) afin de faire cela et le posterai en code source.

@++

vendredi 23 avril 2004 à 17:44:59 | Re : pb sur liaison rs232

6co


excuse moi, je manque de vocabulaire, qu'entend tu par hooker ???

concernant la vitesse, le nombre de bits, la parité, les bits d'arrêt, j'avais écrit un autre code reprenant la méthode CreateFile en C++. Je ne l'ai pas sous la main mais en gros, il testé toutes les combinaisons possibles de ces tableaux de paramètres

Vitesse : de env 1400 (je crois) à env 115000
(données reprises sur une doc)
Bits donnnées : de 5 à 8
Parité (aucune, paire ,impaire)
Bit stop : aucun, 1 ou 2

Le test se stopper à la lecture de la moindre donnée. Aucun résultat.
J'attends avec impatience ton code (ou une petite explication sur l'interruption dans la IDT)...

En tout cas, mille fois merci

6co

samedi 24 avril 2004 à 12:35:50 | Re : pb sur liaison rs232

patatalo

Membre Club Administrateur CodeS-SourceS

salut,

3FD Registre d'état de la ligne (lsr)
Ce registre permet de donner des informations sur le transfert
des données,

Bit 0 DR (Data Ready)
Si ce bit est à 1 alors une donnée reçue est prête.
Remis à 0 par lecture des données ou forçage.

Bit 1 OE (Over run Error)
Un écrasement de données a eu lieu car la lecture n'a
pas été faite à temps.

Bit 2 PE (Parity Error)
Mauvaise parité à la réception.

Bit 3 FE (Framing Error)
Erreur avec les bits de stop.

Bit 4 BI (Break Interrupt)
Erreur de transmission.

Bit 5 THRE (Transmitter Holding Register Empty)
Le 8250 est prêt à accepter un nouveau caractère.

Bit 6 TSRE (Transmitter Shift Register Empty)
Ce bit ne peut être que lu.

Bit 7 Toujours à 0.

@++

samedi 24 avril 2004 à 15:55:03 | Re : pb sur liaison rs232

6co


salut,

plus concretement,
veux tu dire que je dois lire le registre 3FD, vérifier le bit DR et lire ma valeur comme avant...? parce qu'il faut bien que je la lise ma valeur sur le 3F8.

En fait, ce que j'aimerais lire, ce ne sont pas des mots définis, je voudrais juste obtenir qulques valeurs et faire l'analogie avec les mouvements de l'automate...

Ce que j'aimerais savoir, c'est si les instructions que j'utilisais risquait d'influencer les valeurs lues par un programme tierce (celui de la console)...

samedi 24 avril 2004 à 16:19:25 | Re : pb sur liaison rs232

patatalo

Membre Club Administrateur CodeS-SourceS
salut,

effectivement, je pense que tu dois lire les valeures sur le port 3F8 seulement si une donnée est indiquée présente sur le port 3FD.

de plus, si tu lis le port 3F8 tu vide le tampon en meme temps et donc, ces données ne sont plus récupérable par le logiciel de l'automate.

hook signifie crochet.
autrement dit, toi tu accede au port com mais ton logiciel pour l'automate non, il n'accede qu'a tes fonctions hook.

avant:
COM<->LOG AUTOMATE
apres:
COM<->PROG HOOK(BUFFER)<->LOG AUTOMATE

j'essaierai de te poster le code source ce soir. Il fonctionnait très bien avec un modem donc je pense que ca devrait faire la balle aussi dans ton cas.

@++

lundi 26 avril 2004 à 11:58:16 | Re : pb sur liaison rs232

patatalo

Membre Club Administrateur CodeS-SourceS

salut,

je poste le source de suite

@++


1 2

Cette discussion est classé dans : pb, rs232, liaison, échanges


Répondre à ce message

Sujets en rapport avec ce message

liaison rs232 avec pic16f84a [ par Lastar ] Bonjour à tous, voila je voudrais allumer et éteindre une led à partir du clavier d'un PC. J'ai donc pour cela mis un MAX232CPE avec le pic. Le prob communication par liaison rs232 vers LCD graphic [ par lcoumar ] Bonjours!voilà je suis débutant en asembleur, j'envoie d'un pc des chaines de caractère vers un afficheur LCD graphic(type hitachi LMG6912)via la liai liaison rs232 pr beck sc12 [ par Adri_52 ] slt je cherche une source ki me permettré de géré une liaison rs232 entre un beck sc12 é un robot en c.merci d avance.. Communication entre PC et PIC18F4220 via la liaison RS232 [ par woudi2008 ] Bonjour à tous,Voilà je débute en assembleur et en ce moment je suis en stage et je dois programmer une communication entre PC et le PIC18F4220 via la Rs232 et pic16f84 [ par bwoufy82 ] Voila je recherche un code source en C (qui sera ensuite mis dans le pic16f84)qui a pour but de recupere un caractere au pic, envoyé par mon soft ecri URGENT>>Gros pb de signe :( [ par balgrim ] Comment gerer les signe avec les registre!!! lorsque je veut par exemple faire:sub abx,eax et que ebx=0, eax=100sa me renvoie 2^32-100, soit 4 milliar pb de réalisation [ par mynus ] [MynusHello, j'ai programmé une petite application pour ma fille : en déplaçant le curseur de la souris elle fait apparaitre une image , banal quoi , Petit pb de ftp [ par vicovico ] J'ai mis en place un .bat qui permet de recuperer qques fichier d'un serveur a un autre...mais j'aimerais faire une verification pour savoir si le tra Pb assembleur très facile (pas pour moi) Merci d'avance [ par rgc50 ] Trouver parmis les 5 nombres 67, 79, 15, e3, 72 le nombre le pls élevé, on le stockera le résultat en 0100 (en assembleur 68000 (MOTOROLA)). pb avec l'instruction loop ( bla..ro de 1ere) ! [ par vinc1008881 ] bonjour tlm voila mon pb ( pour moi s'en n'est un ..) : a:mov ecx, 00000000hloop aet le pb c 'est que le b


Nos sponsors

Sondage...

CalendriCode

Décembre 2008
LMMJVSD
1234567
891011121314
15161718192021
22232425262728
293031    

Consulter la suite du CalendriCode

Téléchargements



Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel BAÏSE, Merci à Vincent pour ses précieux conseils
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés
Temps d'éxécution de la page : 0,250 sec

Google Coop CodeS-SourceS Google Coop CodeS-SourceS


Certaines images présentes sur le site (notament certains avatars) sont issues des collections IconShock, donc si vous souhaitez utiliser ces icons vous devez les acheter, ne les copiez pas et ne utilisez pas dans vos sites et applications sans les avoir commandé.