Bonjour,
J'ai configuré mon UART et créer une fonction réception et transmission mais le routage de ma carte n'est pas encore fait pour pouvoir tester cette fonction.
Je voudrais donc savoir si mon programme est juste ou du moins qu'il n'y ait pas d'erreur grossière.
Merci.
Code://////////////////////////////////////////////////////////////////////////////////////// // // lib_UART.h /////////////////////////////////////////////////////////////////////////////////////// /////////////////////////////////////////////////////////////////////////////////////// // Déclaration des E/S pour communication I2C (Entrées au départ) #define TX PORTF.5 // Signal SDA #define RX PORTF.4 // Signal SCL // A configurer en entrées à l'initialisation /////////////////////////////////////////////////////////////////////////////////////// /////////////////////////////////////////////////////////////////////////////////////// // Prototypes des fonctions pour gestion UART void U2_init(void); void U2_ecrire(char i2c_octet); unsigned char U2_lire(void); //////////////////////////////////////////////////////////////////////////////////////// //////////////////////////////////////////////////////////////////////////////////////// // Utilisation Horloge (4 MHz) //////// /////////////////////////////////////////////////////////////////////////////////////////// ////////////////////////////////////////////////////////////////////////// void U2_init(void) { U2BRG = 25; // fonctionnement 9600 bauds pour horloge interne de 4 MHz U2MODE=0x2000; U2STA=0x0000; U2TXREG = 0x00; U2RXREG = 0x00; U2MODE=0xA000; // active UART IEC1bits.U2TXIE=1; // active int IEC1bits.U2RXIE=1; IEC1bits.U2TXIE=1; // priorité de l'int IEC1bits.U2RXIE=1; } ////////////////////////////////////////////////////////////////////////// void U2_ecrire(char U2_octet) { U2TXREG=U2_octet; // Envoie octet vers dans registre de transmission while (U2STAbits.UTXBF==0); // Attente fin transmission U2STAbits.UTXEN=1; // active la transmission } ////////////////////////////////////////////////////////////////////////// unsigned char U2_lire(void) // ack=0: Acknowledge; ack=1: No Acknowledge { unsigned char octetlu; while(IFS1bits.U2RXIF==0) // attente int signalant reception IFS1bits.U2RXIF=0; // mise à 0 du flag if(U2STAbits.OERR==1) // controle d'erreur { afftext("ERROR"); } else { octetlu = U2RXREG; // récupere octet dans le registre de reception } return(octetlu); }
-----