USART 16F876 problème emission

Bonjour, me revoilà je vous écris car j’ai un problème avec mon code toute la compilation fonctionne et j’ai bien un retour sur le port COM du pc sauf que je ne reçois que la valeur 255 bien que l’envois correspond a autre choses.

J’ai fait pas mal de modifications et des recherches sur le net se qui m’a permis d’arriver a cela.

Je vous joins mon code.
J’utilise un Quartz de 4mhz et d’après le data du 16F876 le taux d’erreur et de 0,16 %.

Si vous avez déjà fait quelques essais, j’aimerais bien avoir votre avis.

[code]/* ----------------------------------------------------------------------- /
/
Fichier source modèle généré par Piklab */
#include <pic16f876.h>

/* ----------------------------------------------------------------------- /
/
Bits de configuration: adapté à votre dispositif et à vos besoins */
typedef unsigned int word;
word at 0x2007 CONFIG = 0x3F39;

void Envois(char cD); // Cette fonction envoie des données sur le port série
void Init(void); // Cette fonction Initialise les ports
void Init_USART(void); // Le port USART
void Pause(long max); // Création d’une boucle

const char Mot2 = “O”;

// static void interrupt inter() // Fonction d’interruption
// {

// }

main() //****************** debut Main ******************************
{
Init();
Init_USART(); // Initialisation port série

/* boucle principale */
while(1)	
{
	Envois(Mot2); // Envois 
	Pause(30000);
}

}// ************************ fin de main******************************

//************************ Initialisation Ports ***********************
void Init(void)
{
TRISA = 0xff;
TRISB = 0b11111000; // PORTB = RB2 à RB0 E, RS du LCD et LED en sortie
TRISC = 0b10110000; // TX, D7 à D4 du LCD-> en sortie 0xf0;
PORTB = 0;
PORTC = 0;
}
//************************ Initialisation de l’USART ******************
void Init_USART(void)
{
SPBRG = 25; // Baud Rate pour FQ= 4MHz, 9600Bds, BRGH=1
TXSTA = 0b00100100; // 8bits, TXEN, Asynchrone, High speed (BRGH)
RCSTA = 0b10010000; // SPEN, Reception continue
// initialize interruption USART;
RCIE = 1; // autorise interruption SCI en réception
RCIF = 0; // raz flag réception
PEIE =1 ; // autorise interruption des périphériques
GIE = 1; // autorise interruption globale
}

//************************ Envois donées ******************
void Envois(char cD) // Emission de donnée sur le port série
{
while(!TXIF); // si 1 registre d’émission vide, donc on sort de la boucle
TXREG=cD; // On place le caractère cD à envoyer dans le registre TXREG
while(!TRMT); // Lorsque TRMT passe à 1 TXREG recoit la donnée cD
}

//************************ Pause ******************
void Pause(long max) // Boucle de pause
{
long boucle = 0;

while (boucle < max)
{
	boucle++;
}

}
[/code]

Merci

Salut

Il vaut mieux éviter de déclarer les variables globale initialisé

const char Mot2 = “O”;

je te propose de faire

main() //****************** debut Main ******************************
{
char Mot2
Init();
Init_USART(); // Initialisation port série

Mot2 = 0XEE;

/* boucle principale */
while(1)
{
Envois(Mot2); // Envois
Pause(30000);
}

}// ************************ fin de main******************************

pour les tests évite les valeurs 00 et FF , ces valeurs sont par défaut ( ça dépend des compilo)
met une valeur plus implicite ( AA, 55,EE…)

Dans tes registre tu active des IT, qui ne sont pas utilisé. Ne vaut mieux pas les désactivé?

++

Bonjour, je n’y reviens pas en effet les variables que je déclare avant le main ne son pas pris en compte dans mon programme le pire c’est le le compilateur ne me le dit même pas donc comme je n’avais pas d’erreur je n’ai pas chercher a cet endroit et maintenant que tu me le dis c’est tout a fait normal, car si je n’envoie rien c’est normal que rien ne part.

Pour les IT c’est parce qu’au début il y avait des interruptions quand le pic reçoit des informations à traité, mais comme j’avais une erreur j’ai supprimé du code pour cibler l’erreur.

P.S c’est que je n’ai pas de debugeur comme avant sous MPLAB, car le changement de Win a GNU/Linux n’a pas était de tout repos quand même.

Mais maintenant je suis depuis plusieurs mois 100% GNU/Linux j’ai tout abandonné car rien de plus énervant que de changer constamant d’un OS a l’autre et je m’adapte pour le reste.

En tout cas merci je viens d’en apprendre une bonne aujourd’hui merci pour ce coup de main.

Intro to Programming PIC Microcontrollers in Linux
Programming PIC’s in Linux using C with SDCC

Ha oui! c’est de mieux en mieux merci.

On me l’avait déjà dit, mais j’avais oublié, car cela était au début de ma transition.

Encore merci.