Bonjour ,
J'aimerais savoir comment transmettre (envoyer) et recevoir une trame sur un PIC16F876 .Le but étant de demander la tension et el courant d'une éolienne , et donc ba de recevoir la tension et le courant pour ensuite effectuer les actions suivantes on/off de l'éolienne,ou si on la freine. Quelle est la syntaxe à utilisé ? Je vous montre un bout de programme pouvez m'indiquer si je suis sur la bonne voie ?
****************************** ****************************** ****************************** ********************/
/* Programme d'initialisation */
/****************************** ****************************** ****************************** *********************/
#include "pic1687x.h" // déclaration des registres internes du microcontrôleur
#include <pic.h>
#define cTimeOut 65535
#include <lcd.c>
#include <stdio.h>
#include <string.h>
#use rs232(baud=9600,xmit=PIN_C6,rc v=PIN_C7,parity=N,bits=8,ERROR S)
#define SOH 0x01
#define V 0x56 //Voltage
#define I 0x49 // Intrensité
#define D 0x46 //Demande
#define R 0x51 // Reponse
#define ETX 0x03
#define STX 0x02
char tab_message_envoyer[16],LRC_calcule = 0,adresse_carte=0;
int indice_LRC2 = 0, indice_trame = 0;DIZAINE_TENSION;UNITE_TENSIO N;DIXIEME_TENSION;DIZAINE_COUR ANT;UNITE_COURANT;DIZIEME_COUR ANT;
//déclaration tableau
table_emission[8]={0,0,0,0,0,0,0,0}
table_reception[12]={0,0,0,0,0,0,0,0,0,0,0,0,}
void init_microcontroleur(void)
{
SPBRG=25; // Communication RS232 9600 bauds Fosc=4MHz
TXSTA=0x24; // Horloge interne, 8 bits, Async, High Speed)
RCSTA=0x90;
}
//****************************** *******************
// calcul_LRC(char message[], int nb_octet)
//****************************** *******************
int calcul_LRC(char message[], int nb_octet)
{
int somme_lrc=0, j=0;
for(j=0;j<nb_octet;j++)
{
somme_lrc+=message[j]; //somme des octets
}
somme_lrc%=0xFF; //modulo 256
somme_lrc=~somme_lrc; // complément à 1
somme_lrc+=1; //complément à 2
return((int)somme_lrc);
}
****************************** ****************************** ****************************** *********************/
/* FONCTION ENVOI */
/****************************** ****************************** ****************************** *********************/
void send(int8 octet)
{
TXEN=1; // Pret en transmettre
TXREG=octet; // Stockage des données dans UTXREG 8bits
while(TXIF=1)
TXEN=0; // Transmission finie
}
****************************** ****************************** ****************************** *********************/
/* codage Emission trame */
/****************************** ****************************** ****************************** *********************/
void emission (void)
{
table_emission[0] = 0x01; //SOH
table_emission[1] = 'D'; // envoi lettre D 0x44Demande
table_emission[2]=0x31 ;//adresse carte éol
table_emission[3]=0x02;//STX
table_emission[4]='V'; //demande tension 'V' 0x46
table_emission[5]=0x49;//demande courant 'I'
table_emission[6]=0x03;//ETX
table_emission[7]=calcul lrc
table_emission[8]=0
}
// décodage de trame
void reception(void)
{
char DIZAINE_TENSION=0, UNITE_TENSION=0, DIXIEME_TENSION=0, DIZAINE_COURAN=0,UNITE_COURANT =0,DIXIEME_COURANT=0
;
table_reception[0]=0x01 ; //soh
table_reception[1]='R' ;// envoi lettre R 0x51 Reponse
table_reception[2]=0x31; // carte éol
table_reception[3]=0x02;//stx
table_reception[4]=DIZAINE_TENSION ;
table_reception[5]=UNITE_TENSION ;
table_reception[6]=DIXIEME_TENSION;
table_reception[7]=DIZAINE_COURANT;
table_reception[8]=UNITE_COURANT;
table_reception[9]=DIXIEME_COURANT;
table_reception[10]=0x03;
table_reception[11]calcul_LRC();
table_reception[12]=0
}
-----