Bonjour LP_2 et à tous, En fait , il n'y a pas de modele pré-défini... car depend trop de l'application, et de ce que l'on veut suivre.. L'idée de base est d'utiliser un outil , disponible, et le moins invasif possible pour ne pas perturber l'application. Il faut bien sur avoir un UART dispo sur le PIC , [b]mais ce n'est pas indispensable[/b] une simple sortie PIC peut servir d'UART SOFT, d'autant qu'on a besoin ici que de la sortie TX transmit vers Terminal et pas de traitement d'interruption non plus ! exemple voir[b] UART3.zip [/b] : rajout d'un UART software sur un PIC SANS UART Hardware remarque : sur un 18F26K22 on peut avoir ainsi 3 UART UART1 Hardware UART2 Hardware UART3 Software à noter aussi que l'UART3 pourrait être AUSSI utilisé en RX interrupt .. (PIN RX sur RB0 !) L'ideal est bien sur, un UART Hardware disponible . Auquel cas, il faut quand même l'initialiser au départ ex: 19200,8,N,1 ( ou PIC18F .. 115200,8,N,1) Une simple écriture dans le registre de transmission UART est suffisante necessite 2 instructions ( 2x0.0625µS at FOSC=64MHz) Le hardware du PIC se chargeant de l'envoi des 10 bits ( start,8datas,1 stop) ..en 89µS at 115200 TXREG1=data; ou U1TXB=data; (18F27K42) suivant le PIC utilisé * [url=http://paulfjujo.free.fr/_RS232/RS232.htm]Au niveau hardware[/url] : u n cordon prolific USB/TTL ou autre adaptateur FT232 CHG340 ... entre PIC et terminal PC * Terminal PC ..mes favoris YAT terminal, ou Realterm Terminal. .. (ou VBray 2014 sur Win XP ) Ensuite , il faut se faire une panoplie de petits outils pour afficher un contenu de registre, ou data en decimal, en hexa, en binaire Outils de taille la plus reduite possible , pour ne pas trop perturber le déroulement de l'application.. exemple, programme décomposé en Etapes ou en phases: suivre l'évolution de la progression du programme si le programme comporte une dizaine d'étape (dans une boucle sans fin) il suffit d'envoyer TXREG1=Etape+48; // pour afficher le numéro de l'etape en cours sur un terminal ------------------------------------- exemple de traçage interruptions (18F27K42) (enlever le commentaire // pour l'activer!) -------------------------------------- [code=php] if (( TMR0IE_bit) && (TMR0IF_bit)) { // pour debugger // U1TXB=Count0+48; // 0123456789 // pour 100mS TMR0H = 0x3C; //15536; TMR0L = 0xB0; Count0++; if (Count0 >9) { LED_Verte = ~LED_Verte; Flag_Timer0=1; } PIR3.TMR0IF= 0; } // RB0 interrupt if ((INT0IE_bit) && (INT0IF_bit)) { // U1TXB=Sec+48; // pour debugging sur UART1 Flag_RB0=1 ; INT0IF_bit=0; //c0=PORTB; } [/code] ---------------------------------------------------------- pour afficher le contenu d'un registre 8 bits en binaire ou etoiles en etoile : utile pour une fonte de caracteres ! -------------------------------------------------------- [code=php]void Decompile_Byte(unsigned char un) { unsigned char masque; masque = 0x80; while (masque > 0u ) { if ((un & masque)>0) UART1_Write('*'); // UART1_Write(49u); // '1' else UART1_Write(' '); // UART1_Write(48u); // '0' masque =masque >>1; } } [/code] ----------------------------------------------- affichage d'une valeur decimale 16 bits ------------------------------------------------ [code=php]void Int2Asc(unsigned int value, char *T) { T[0] = value/1000+48; //Add 48 to get the ASCII character T[1] = ( value/100)%10+48; T[2] = (value/10)%10 +48; T[3] = ( value %10) +48; T[4]=0; // terminateur de string } [/code] ---------------------------------------------- Test du deroulement d'un timer ------------------------------------------ [code=php]CPrint(" Timer1 init 100mS \r\n"); Init_Timer1(); CPrint("Test Timer1 arme pour 30 x 100msec\r\n"); Arme_Timer1(30); CPrint(" Arme \r\n"); do { while(Flag_Timer1==0); k=Count_0_1sec; cx=(char)(k % 10) +48; PrintChar(cx); Flag_Timer1=0; } while(Drapeaux.Tmr1_Elapsed==0); Drapeaux.Tmr1_Elapsed=0; T1CONbits.TMR1ON=0; CPrint("\r\n Stop\r\n"); CRLF1();[/code] exemple de traçage sur terminal: Test Timer1 arme pour 30 x 100msec Arme 1234567890123456789012345678901 Stop -------------------------------------------------------- Imprime un bloc de donnée n Hexadecimal situé à l'adresse *BB et de longueur N sortie formatée 16 bytes par ligne ------------------------------------------------------------ [code=php]void Imprime_Asc_Hex( unsigned char * BB , unsigned int N) { unsigned int i,j,k,m,l; unsigned char Tampon[8]; k=0; m=N>>4; if (N<16) { // for (i=0;i0) { UART1_Write(' '); for (j=0;j