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