Programmation RS232

Fermé
Emilie - 21 mai 2008 à 15:21
 ramzi.bk - 24 avril 2009 à 12:24
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
A voir également:

13 réponses

j ai trouvé que du code assembleur ...

https://codes-sources.commentcamarche.net/

au pire tu peux tjs inclure du code ASM dans ton code C.... desolé de pas t aider plus
1
Salut. Es tu allé voir sur le site de microchip ?
0
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
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
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

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
je pense que tu les a deja, mais bon...

datasheet: http://ww1.microchip.com/downloads/en/DeviceDoc/39582b.pdf
chapitre 9 ....
0
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
oui je l'avais deja mais merci quand même
0
Pour le registre SPBRG, je pense que c'est pour régler l'horloge, il y a un tableau pour trouver la valeur que l'on doit lui mettre:

BAUD
RATE
(K) // qu'est-ce que c'est??

KBAUD // qu'est-ce que c'est??


FOSC = 20 MHz // pour mon cas


P98 http://ww1.microchip.com/downloads/en/DeviceDoc/39582b.pdf

merci
0
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
https://forums.futura-sciences.com/archive/index.php/

mais c est encore de l assembleur... ceci dit, tu peux tjs toruver qqcn pour t expliquer !
0
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
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
tchoubaka Messages postés 61 Date d'inscription samedi 7 février 2009 Statut Membre Dernière intervention 25 mai 2023 11
8 avril 2009 à 14:36
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
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