[C] Gestion d'une liaison rs 232

Gestion d'une liaison rs 232 [C] - C - Programmation

Marsh Posté le 16-04-2004 à 13:48:38    

Bonjour a tous
 
Voila j'ai un tp a preparer pour la rentrée, le but de celui ci etant de transmettre dans un premier temps un caractere par la lisaison com2 du pc. Je vais structurer mon programme en 2 parties: une partie initialisation de la liaison et une seconde emission du caractere.
 
En fait c'est surtout dans la partie init que je bloque, je ne sais pas a quelle adresse les registres DLM ET DLL permettant de diviser la frequence se trouvent (apres avoir mis a 1 le bit b7 de LCR qui nous permet d'avoir acces au diviseur de frequence) :pfff:  
 
J'ai fait quelques recherches sur different forum, et a chaque fois l'initialisation se presente sous cette forme:
 

Code :
  1. void init_rs1 (void)
  2. {
  3.    union REGS regs;
  4.    regs.h.ah = 0;
  5.    regs.x.dx = 0;               /* 0 : COM1 et 1 : COM2 */
  6.    regs.h.al = 0x1e;            /* mettre la config (vitesse, parite...); (1E) = (0001 1110) */
  7.    int86 (0x14, &regs, &regs);
  8. }


 
Mais je ne comprends pas du tout ce que cela signifie  :( , si qq un pouvait m'expliquer se serai super.
 
Mes questions sont surement ridicules, mais je debute tout juste en language C... Merci de votre lecture et merci d'avance pour votre aide.

Reply

Marsh Posté le 16-04-2004 à 13:48:38   

Reply

Marsh Posté le 16-04-2004 à 14:12:03    

Houla ! mais ça c'est sous dos, on remplit des registres et on appele l'interruption 0x14 qui doit être celle de la ligne série.  
Actuellement sous windows il ne faut pas faire ça, il faut utiliser l'API windows, cherche un peu il y a eu des topics récents sur le sujet.

Reply

Marsh Posté le 16-04-2004 à 14:17:22    

oui en effet apres des recherches plus approfondies c'est ce que j'ai remarqué, mais je prefererai passer directement par les adresses des differnets registres pour les mettre a jour (comme par exemple les fonction inportb et outportb)
 
D'ailleurs est ce que ces deux fonctions peuvent etre utilisées pour un envoie par liaison serie (la derniere fois je m'en suis servi pour une liaison // )

Reply

Marsh Posté le 16-04-2004 à 15:43:23    

oui, mais c'est très fortement déconseillé sous windaube !

Reply

Marsh Posté le 16-04-2004 à 20:22:06    

C'est pour du pur DOS sur une machine DOS ?
 
pour dx : 0 : port COM1, 1 : port COM2, etc.
pour al :
Bits 0-1  : largeur de données 10 : 7 bits, 11 : 8 bits
Bit 2 : nombre de bits stop 0 : 1 bit stop, 1 : 2 bits stop
Bits 3-4 : contrôle de parité : 00 : aucun, 01 impaire, 11 paire
Bits 5-7 : vitesse de transmission. 000 : 110 "bauds"; 001 : 150; 010 : 300; 011 : 600; 100 : 1200; 101 : 2400; 110 : 4800; 111 : 9600.

Reply

Marsh Posté le 17-04-2004 à 19:29:42    

voila ce que j'ai ecris, pensez vous que cela fonctionnera ?
 

Code :
  1. void configuration(int adport, int vitesse ,char caractere)
  2. {
  3. char DLAB_ON=0x80;   // Masque permettant d activer DLAB
  4. char DLAB_OFF=0x7F;   // Masque permettant de desactiver DLAB
  5. int ad_THR-DLL,ad_LCR,ad_DLM;    // adresses des differents registres pour la config de la
  6.      // communication serie
  7. int coeff;    // Coefficient diviseur a envoyer sur DLL
  8. ad_THR_DLL=adport;   // Adresse registre DLL (diviseur de frequence)
  9.      //  - Tampons emission/reception = adresse de
  10.      // base com2
  11. ad_LCR=adport+3;
  12. ad_DLM=adport+1;
  13. coeff=frequence/(vitesse*16);  // Calcul du coeff diviseur
  14. outportb(ad_LCR,(commande|DLAB_ON)); // envoie de la config dans le registre LCR
  15.      // DLAB est active pour atteindre le diviseur de frequence
  16. outportb(ad_THR_DLL,coeff);  // selection de la vitesse de transmission
  17. outportb(ad_DLM,0);   // idem
  18. outportb(ad_LCR,(commande&DLAB_OFF)); // Desactivation de DLAB pour preparer la transmission
  19. }

Reply

Marsh Posté le 19-04-2004 à 14:49:22    

personne por dire si ca parait correct ???

Reply

Marsh Posté le 19-04-2004 à 14:58:24    

Citation :

voila ce que j'ai ecris, pensez vous que cela fonctionnera ?


As tu au moins compilé ? => ad_THR-DLL
Tu bosses sous quel Windows ?
Essaye un truc à base de fopen( "COM1", "w+" ), + fwrite...
C'est à ma connaissance le code le plus facilement portable.
Mais faut voir, si c'est un TP, je suppose qu'il faut faire comment le prof a dit... katil dit ?

Reply

Marsh Posté le 19-04-2004 à 21:19:03    

Oui j'ai compilé, mais il me trouve 10 erreurs la dedans a chaque fois il me marque une erreur sur mes commentaires, apres avoir corriger le ad_THR_DLL :( (j'utilise turbo c)
Chez moi je suis sou xp, mais en tp sur win98
fopen et fwrite quelles sont ses fonctions je ne les ai jamais vues avant ...  
Et nos consignes sont, uiliser le langage c pour faire cette transmission.
 
merci pour ta reponse en tout cas

Reply

Marsh Posté le 20-04-2004 à 09:43:23    

En C les commentaires c'est /*...*/, pas //...fin de ligne (la dernière norme corrige ça je crois, mais TurboC est un peu vieux).

Reply

Marsh Posté le 20-04-2004 à 09:43:23   

Reply

Marsh Posté le 20-04-2004 à 12:27:22    

ah oki, boulettes :( merci

Reply

Marsh Posté le 28-04-2004 à 09:15:23    

hello tout le monde
 
Voila, je suis en stage de fin de DUT genie electrique. Mon truc est la programmation microcontroleur et mon projet est la discution d'un micro avec un agenda electronique. Pour le simuler, j'ai besoin d'utilisé un PC via RS232. mais moi, j'y connais rien... Mes petits betes sont bien diferante. Alors vos explications sont des fois un peu du charabia! Je ne suis meme pas sur d'avoir les bonnes librerie. Si quelqu'un avait la gentillesse de faire une explication du fonctionnement et des manipes et instruction version tres simple voir neuneu, ca serait po mal.
 
Merci beaucoup, vous m'enlevrez un chere brotelle...
 
PS: mettre aussi, si possible, les site ou je peux trouver des infos

Reply

Marsh Posté le 28-04-2004 à 10:07:31    

Commence par créer un topic.
Précises ce que c'est ton agenda électronique.
Tes profs t'ont donné aucune piste ?

Reply

Marsh Posté le 28-04-2004 à 16:04:55    

l'agenda electronique est un PALM et sinon question aide, j'ai pas grand chose... comme c'est un stage de fin d'etude, je dois un peu me debrouiller par moi meme. En fait, il me faut pouvoir envoyer un octet (un ordre) receptionner bcp (environs 20000*7 en une fois) (la reponse).
je tourne actuellement a 9600bauds, 1bit stop, 1bit start, 8bits de données, pas de pariter. Si je receptionne mes données dans un tableau par exemple, je me demerderais tjrs a les ranger de facon lisible.
Apres, comme c po du tt mon domain... c quoi un topic! Mon truc c'est la programmation super bas niveau... vous me donnez micro tt seul (sans OS ou autre)et je vous en fais ce que vous voulez. Merci bcp

Reply

Marsh Posté le 28-04-2004 à 16:58:56    

BTS ISIS (II) rorbacher.. haguenau? [:cupra]

Reply

Marsh Posté le 28-04-2004 à 17:31:02    

Citation :

l'agenda electronique est un PALM


...tu fais un programme sur Palm et sur PC ou tu dois interroger un programme qui est pas à toi sur Palm ?

Citation :

je dois un peu me debrouiller par moi meme


Ouai, ils doivent qd même s'assurer de la faisabilité.

Citation :

Apres, comme c po du tt mon domain... c quoi un topic!


topic = sujet.
Le topic actuel c'est "Gestion d'une liaison rs 232".
Et là on post...
Créés-en un nouveau.

Citation :

Mon truc c'est la programmation super bas niveau... vous me donnez micro tt seul (sans OS ou autre)et je vous en fais ce que vous voulez.


Je vois ça...

Reply

Marsh Posté le 28-04-2004 à 22:32:47    

tham a écrit :

hello tout le monde
 
Voila, je suis en stage de fin de DUT genie electrique. Mon truc est la programmation microcontroleur et mon projet est la discution d'un micro avec un agenda electronique. Pour le simuler, j'ai besoin d'utilisé un PC via RS232. mais moi, j'y connais rien... Mes petits betes sont bien diferante. Alors vos explications sont des fois un peu du charabia! Je ne suis meme pas sur d'avoir les bonnes librerie. Si quelqu'un avait la gentillesse de faire une explication du fonctionnement et des manipes et instruction version tres simple voir neuneu, ca serait po mal.
 
Merci beaucoup, vous m'enlevrez un chere brotelle...
 
PS: mettre aussi, si possible, les site ou je peux trouver des infos


 
Une seule solution : le topic GEII [:xp1700]
 
http://forum.hardware.fr/hardwaref [...] 7655-1.htm
 
EDIT : si tu développe sous Windows avec Visual C++ : http://www.codeguru.com/Cpp/I-N/ne [...] php/c5425/
 
Si c'est avec VB c'est encore plus simple [:joce]


Message édité par printf le 28-04-2004 à 22:36:59
Reply

Marsh Posté le 29-04-2004 à 09:02:04    

je sors de GEII et mon sujet est inclu la communication RS232 entre un palm et un microcontroleur du type µPSD. Comme ca, je suis claire avec tout le monde. Je veux juste pouvoir simuler l'un avec un pc pour mettre au point l'autre sans utiliser l'hyperterminal qui est assez sommaire qu'en même.
merci d'un petit peu d'aide! Si, c trop hard, je me demerderais tt seul sans pc.

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed