Programmation RS232

Fermé
Bonjour a tous,

Je suis stage, et je dispose d'une carte pic demo board avec un pic16F877. Je dois mettre au point un petit programme bidon montrant que la carte fonctionne correctement pour cela j'ai réalisé un petit programme en C qui met en œuvre mes 2 boutons poussoir les 3 leds et l'écran LCD. Mais je dois aussi faire une liaison RS232, et je ne sais pas du tout comment mit prendre! J'ai trouver le registre TXSTA dans la doc technique qui devrait me permette d'envoyer un message mais je ne sais pas comment écrire le code, il faudrait par exemple que j'envoie le texte que je met sur l'écran LCD actuellement c'est juste "WELCOME". Je programme avec MPLAB. S'il vous plaie aidé moi !
Merci MILIE
Configuration: Windows XP
Firefox 2.0.0.14

13 réponses

  1. Salut. Es tu allé voir sur le site de microchip ?
    0
    1. Non, je ne sais même pas se que je pourai y trouver!! je ne suis vraiment pas experte en programmation!
      Ce site devrait pouvoir m'aider?
      0
  2. re bonjour,
    j'ai regardé sur le site mais je suis dsl je vois pas en quoi cela peut m'aider.
    SVP aidé moi il faut que se soit fait pour vendredi. Comment je fait pour déclarer le registre du moins pour le mettre actif? Comment je fait pour lui dir de prendre tel ou tel donnée? est-ce au moins le bon registre TXSTA pour envoyer?
    Merci de m'aider.
    0
    1. J'en avait deja trouvé en assembleur, mais deja que le langage C met difficile là c'est pas la peine !!
      Merci quand même pour ton aide mais je ne peut pas inclure ce programme au mien il faut que je sache quand même l'expliquer !
      Je vais essayer de me débrouiller et si j'y arrive je posterai mon programme sur le forum, comme sa ce sera résolu.
      Mais si quelqu'un a une idée je prend !
      Milie
      0
      1. je pense que tu les a deja, mais bon...

        datasheet: http://ww1.microchip.com/downloads/en/DeviceDoc/39582b.pdf
        chapitre 9 ....
        0
        1. qu'st-ce que sa veut dir?? est-ce que c'est quelques chose que je dois venir lire pour savoir s'il est occupé ou c'est moi qui doit imposer se mode :

          bit 4 CREN: Continuous Receive Enable bit

          Synchronous mode:
          1 = Enables continuous receive until enable bit CREN is cleared (CREN overrides SREN)
          0 = Disables continuous receive
          0
      2. oui je l'avais deja mais merci quand même
        0
        1. BAUD c est le nombre d etats possibles a la seconde, deririere un modem... sur une ligne telephonique. il y a souvent une confusion avec les bits par seconde. dans ton cas, le signal est binaire, donc bits envoyés un par un, donc BAUD=bps.

          http://fr.wikipedia.org/wiki/Baud_(mesure)

          je pense pas que la page 98 s applique a toi: c est de la communication serie i2C, pas rs232

          j ai trouvé ce site: j espere que tu trouvera qqch...
          n hesite pas a regarder des codes pour d autres pic ! ca se ressemble ces bébètes...
          http://bepelectronique.free.fr/index.php?option=com_weblinks&catid=76&Itemid=23

          bon courrage

          petite question, tu fais quoi comme etude pour te retrouver a programmer ca en stage sans y avoir vu avant ? BTS IRIS ?
          0
          1. Merci pour tous ces liens, pour l'instant voila ce que j'ai réussi à faire :

            void RS_init (void){
            //initialisation poour la liaison série RS232

            // pour le registre TXSTA : transmit status and control registrer
            CSRC=1; //clock source
            TX9=0; //8bits transmit
            SYNC=1; //usart synchronous mode
            BRGH=1; //high speed
            TX9D=0; //envoi 8bits sans parité

            //pour le registre RCSTA : RECEIVE STATUS AND CONTROL REGISTER
            SPEN=1;

            // pour le registre SPBRG :BAUD RATES FOR ASYNCHRONOUS MODE
            SPBRG=129;
            }

            void RS (void){
            TXEN=1; //transmit enable bit
            while(TRMT==0); //Transmit shift register status bit (empty)
            TXREG='1'; //envoi du chiffre 1
            Delay_ms(10);
            }

            J'en été toute contente malheureusement sa ne marche pas !

            Et pour répondre à ta petite question je suis en IUT GEII et peut être bien que l'on a deja du faire quelque chose dans le genre malheureusement... ce n'été pas mon dada et je m'en mort les doigts maintenan !

            MILIE
            0
            1. Bon voila où j'en suis :
              void LCD_1 (void){
              i=0;
              tab1[0]='W';
              tab1[1]='E';
              tab1[2]='L';
              tab1[3]='C';
              tab1[4]='O';
              tab1[5]='M';
              tab1[6]='E'; // rentre dans la table 1 le mot 'WELCOME'

              for (i=0; i<7; i++){ //boucle permetant d'écrire le mot 'WELCOME' sur le LCD
              PORTD.6=1;
              PORTD.5=0;
              PORTB=tab1[i];
              PORTD.4=1;
              PORTD.4=0;
              Delay_ms(10);
              a=(PORTD && 0b10000000);
              while ( a == 0b10000000); // masque avec la fonction
              //Read Busy Flag and Address Counter pour savoir s'il écrit tjrs
              }
              }

              void RS_transmit (void){
              SREN=0; //stop receive
              TXEN=1; //transmit enable bit
              i=0;
              for (i=0; i<7; i++){ //boucle permetant d'envoyer WELCOME avec RS232
              while(TRMT==0);//Transmit shift register status bit (empty)
              TXREG=tab1[i]; //envoi WELCOME du tableau1
              Delay_ms(10);
              }
              }

              void Bp1 (void){
              // Bouton poussoir 1
              while (PORTD.0==1);
              LCD_init();
              PORTC.0=0; // allume la led rouge: INDC
              PORTD.2=0; // eteind la led bicolor vert
              PORTD.3=1; // allume la led bicolor en rouge
              Delay_ms(5);
              LCD_1();
              RS_transmit();
              }

              void RS_receive (void){
              TXEN=0; //stop transmit
              SREN=1; //receive enable bit
              k=0;
              for (k=0; k<7; k++){ //boucle permetant de lire les données envoyé par rs232
              while(CREN==1); //Continuous Receive Enable bit
              tab2[k]=RCREG; //read and save data in tab2
              Delay_ms(10);
              }
              }

              void LCD_2 (void){

              k=0;
              for (k=0; k<7; k++){ //boucle permetant d'écrire le mot 'WELCOME' sur le LCD
              PORTD.6=1;
              PORTD.5=0;
              PORTB=tab2[k];
              PORTD.4=1;
              PORTD.4=0;
              Delay_ms(10);
              a=(PORTD && 0b10000000);
              while ( a == 0b10000000); // masque avec la fonction
              //Read Busy Flag and Address Counter pour savoir s'il écrit tjrs
              }

              }

              void Bp2 (void){
              // Bouton poussoir 2
              RS_receive();
              while (PORTD.1==1);
              PORTC.0=1; // eteind la led rouge: INDC
              PORTD.2=1; //allume la led bicolor en vert
              PORTD.3=0; // eteind le led bicolor rouge
              LCD_init();
              Delay_ms(10);
              LCD_2(); //affiche les données recus

              }

              void RS_init (void){
              //initialisation poour la liaison série RS232

              // pour le registre TXSTA : transmit status and control registrer
              CSRC=1; //clock source
              TX9=0; //8bits transmit
              SYNC=1; //usart synchronous mode
              BRGH=1; //high speed
              TX9D=0; //envoi 8bits sans parité

              //pour le registre RCSTA : RECEIVE STATUS AND CONTROL REGISTER
              SPEN=1; //serial port enable bit
              RX9=0; // 8bits receive

              // pour le registre SPBRG :BAUD RATES FOR ASYNCHRONOUS MODE
              SPBRG=129;
              }

              au final j'affiche correctement sur l'écran LCD mes leds et Bouton poussoir fonctionne mais ma liaison RS232 ne marche pas du tout que se soit pour envoyer ou recevoir.
              S'il vous plai que quelqu'un m'aide !!!
              merci MILIE
              0
              1. s'lut emilie, travaille aussi sur mplab(pic 16f876) et mon programme porte sur le projet de commande d'un pont roulant. concernant le port serie, je suis entrain de l'etudier pour connaitre le fonctionnement. donc nous devons travailler ensemble pour nous en sortir car j'aimerais aussi programmer mon projet en langage c++ mais je ne sais pas comment incorporer le programme dans mplab.
                a bientôt
                0
                1. salut Emilli ..
                  moi aussi j ai un probleme avec le RS232 je doit commander avec l 'assembleur . je doit realiser une carte à base de pic 16f77. je cherche de l'aide comment le programmer . s il tu plais envoit ton programme en assembleur sur mon email
                  0