Rs232 et port //

Soyez le premier à donner votre avis sur cette source.

Vue 10 365 fois - Téléchargée 745 fois

Description

simple programme qui permet d'envoyer des characteres codes en ASCII via le port RS232 et //

pour plus d'info:
TIKAOUI.HICHAM@gmail.com

Source / Exemple :


#include <stdio.h>
#include <conio.h>
#include <dos.h>
#include <math.h>
int t[9];
void deb(char c)  // covertisseur  dcimale-binaire
{
 int i=8;
  float f=c;
  while(i!=0)
  {
    if (f/2-floor(f/2)==0)
    {
      t[i]=0;
       }
    else
     {
      t[i]=1;
       }
       f=floor(f/2);
       i--;
    }
     for(i=1;i<=8;i++)
      printf("  %d",t[i]);
}

void init() // dessin de l'interface
{
   textbackground(0);
   window(4,6,23,8);
   clrscr();
   window(26,6,38,8);
   clrscr();
   window(22,15,50,17);
   clrscr();
   window(22,30,50,33);
   clrscr();
   window(22,20,50,25);
   clrscr();
   window(22,20,50,25);
   clrscr();
   window(29,40,78,42);
   clrscr();
}
void configuS(char c) // configuration des ports S&#8218;ries
 {
  /* outportb(0x3f8+3,0x80);
   outportb(0x3f8,0x00);
   outportb(0x3f9,0xff);
   outportb(0x3f8+3,0x03);
   outportb(0x3f8,c);*/

   asm{
	mov dx,3fbh
	mov ax,8h
	 out  dx,ax;
	mov dx,03f8h;
	mov ax,0
	 out dx,ax;
	mov dx,03f9h
	mov ax,0ffh
	 out dx,ax;
	mov dx,03fbh;
	mov ax,03h;
	 out dx,ax;
	mov dx,03f8h;

	}
   _AX=c;
       asm{
	   out dx,ax;
	 }

  }
void configuP(char c) // configuration des ports parallŠles
 {
  /* outportb(0x37A,0x04);
   outportb(0x378,c);*/
  asm{
      mov ax,04h
      mov dx,37ah
      out dx,ax
     }

   _AX=c;

   asm{ mov dx,378h;
	out dx,ax;
      }
     }
void signS() /* Fonction reserv&#8218;es aux ports s&#8218;ries  il permet  de synchronser
                  la transmission avec la clin sur l'ecran*/
             // en effet g essayer d'abaisser la vitess de transmission jusqa 1 bit par secende 
             // pour rendre le transmission visibile "des fins pedagogique"
             
             //Alors pour visualiser la transmission il faut executer le program sur in P III  800Mhz

{

   delay(100);
    for(int i=0;i<8;i++)
     {

	textbackground(7);
	clrscr();
	delay(264);
	textbackground(6);
	clrscr();
	gotoxy(2,3);
	cprintf("Transmission en cours..... ");
	textbackground(3);
	window(22,30,50,33);
	clrscr();
	gotoxy(14,3);
	cprintf("%d",t[8-i]);
	window(22,20,50,25);
	delay(264);

      }

}

main() //le programme principale
 { char c;
  clrscr();
  debut:
   init();
   textcolor(0);
   _setcursortype(_SOLIDCURSOR);
   textbackground(11);
   window(4,6,23,8);
   clrscr();
   gotoxy(1,3);
   cprintf(" Veuillerz dtaper un caractŠre ");
   textbackground(7);
   window(26,6,38,8);
   clrscr();
    gotoxy(6,2);
   cscanf("%c",&c);
   textbackground(7);
   window(22,15,50,17);
   _setcursortype(_NOCURSOR);
   clrscr();
   gotoxy(1,2);
   deb(c);
   textbackground(6);
   window(22,20,50,25);
   clrscr();
   gotoxy(2,2);
   int b;
   char s;
   cprintf("Tapez: 'S'----> Port S&#8218;rie \n");
   cprintf("       'P'----> Port ParallŠle ");
   error:
   s=getch();
   if (s=='s')
   {
    configuS(c);
    signS();

     }
     else if(s=='p')
      {
       configuP(c);
       }
       else
       {
	goto error;
       }

     textbackground(4);
     clrscr();
     gotoxy(1,3);
     cprintf("Transmission Termin&#8218;e \t avec succ&#8218;e!!!!");
     textbackground(7);
     window(29,40,78,42);
     clrscr();
     gotoxy(1,2);
     cprintf("Tapez 'Q' pour Quitter et 'ENTRER' pour continuer ");
     revenir:
     c=getch();
     if (c==13)
	goto debut;
     if (c!='q')
     goto revenir;

 }

Conclusion :


envoi des caratcteres via rs232

Codes Sources

A voir également

Ajouter un commentaire Commentaires
Messages postés
1910
Date d'inscription
vendredi 18 juin 2004
Statut
Modérateur
Dernière intervention
14 novembre 2014
13
Ayant longtemps travaillé sur MS-DOS, Windows 3.x, 9x et Me, j'avais des codes comme le tien qui ont cessé de fonctionner sur NT/2000/XP. Pareil pour certains logiciels. Ce problème est d'ailleurs très connu. En fait, un système d'exploitation multitâche moderne ne doit jamais laisser une application accéder directement à un port matériel. Imagine deux applications qui accèdent en même temps à une imprimante branchée sur le port parallèle. Conséquence: conflit d'accès au port. C'est pour cette raison qu'on doit passer par un pilote sous les systèmes NT/2000/XP. Ce pilote organise l'accès au port voulu pour les applications qui le demandent. On peut utiliser les APIs de Windows ou certaines librairies comme la fameuse inpout32.dll. Cette dernière installe justement un pilote fonctionnant en kernel mode pour gérer l'accès aux ports.
DosBox est un émulateur conçu pour permettre de faire tourner les vieux programmes MS-DOS sur les systèmes récents. Il n'est pas du tout fait pour encourager les programmeurs à continuer à utiliser les vieilles techniques pour les faire tourner sur les systèmes modernes. Essaie plutôt de voir toutes les belles choses que ces systèmes récents nous offrent en tant que programmeurs.
Tu peux mettre un zip contenant le projet complet avec un exécutable en démo. Tout le monde pourra ainsi tester.
Messages postés
8
Date d'inscription
mercredi 23 mars 2011
Statut
Membre
Dernière intervention
29 mars 2011

Bonsoir,
chui pas daccord avec toi ce code a bien marcher sur 2000/XP j l'ai pas executer sur vista et seven ...mais j pense kil marchera si on lexecute avec dos-box

merci.
Messages postés
1910
Date d'inscription
vendredi 18 juin 2004
Statut
Modérateur
Dernière intervention
14 novembre 2014
13
Salut,
Ce genre de code ne peut marcher que sur MS-DOS, Windows 3.x, 9x et Me. Sur Windows NT/2000/XP/Vista/Seven l'accès direct aux ports est interdit car il faudra passer par un pilote.
Messages postés
8
Date d'inscription
mercredi 23 mars 2011
Statut
Membre
Dernière intervention
29 mars 2011

Pour executer ce code il faut utiliser soit Turbo C ou Dev C++

Hicham

Merci,
Messages postés
2
Date d'inscription
jeudi 14 mai 2009
Statut
Membre
Dernière intervention
30 mars 2011

Bonjours je suis sous windows XP sur vb6 et j'aimerai savoire avec quoi tu complile se code car avec vb6 se n'est visiblement pas possible.
Merci de ta réponse !!!

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.