Quelqu'un peut m'expliquer ce qu'il ne va pas ???
j'ai construit un boitier permettant par le biais d'une prise DB9, d'enregistrer chaque donnée qui arrive dans une case mémoire . lorsque je le désire j'appui sur BP2 qui doit afficher a l'écran les données de la premiere trame, puis la 2eme ...etc... , et la il se pose DEUX problèmes... si je laisse comme suit, rien ne s'affiche à l'écran, l'interruption bloque tout, je sais que c'est l'interuption car quand je l'enleve les deux boutons fonctionne... mais si je détache le "#int_RDA()" et le reste de l'interruption (je veux dire qu'il y a quelque chose entre les deux ! ) elle ne bloque plus rien ... ! Donc est ce que je peux les laisser détachées ?
Deuxième problème en admettant que l'interruption ne bloque rien... j'envoi par le biais de l'ordi un "d" , je devrait voir à l'écran son code en décimal (voir mon printf) , mais au lieu de ca il m'afiche un "0", si je rappui un "-5" etc etc.. du caca quoi !!
Qu'est ce que j'ai fai de mal ?
Toutes les suggestions sont les bienvenues !!
Programme :
Code:#include "C:\Documents and Settings\pc\Bureau\GOUDET PROJET 2008\lcd test\test.h" #include <LCD628.C> #use rs232(baud=2400,parity=N,xmit=PIN_B2,rcv=PIN_B1,bits=8) //================================================== ================================ #define BP1 input(pin_B0) #define BP2 input(pin_B5) //======================= int x=0,y=0; int d[50]; //======================= #int_rda //reception de la liaison serie en interruption void RDA_isr() { if(RCIF) { d[x]=getc(); // enregistrer la donnée dans d[x] y=x; // égalité x++; // incrémentation } } /* definition des fonctions ================================================== ====*/ void affi_bienvenue(); //affichage mode manuel /* definitions des fonctions ================================================== ===*/ void affi_bienvenue() { printf(displays,"\f Banc Test 2008 "); printf(displays,"\n Goudet--Lourds \n"); delay_ms(2000); printf(displays,"\f Entreprise "); printf(displays,"\n Flash Elek \n"); delay_ms(2000); printf(displays,"\f Responsable "); printf(displays,"\n Jean Gougeron \n"); delay_ms(2000); printf(displays,"\f"); } //================================================== =============================== void main() { setup_timer_0(RTCC_INTERNAL|RTCC_DIV_1); // Quartz 4MHz setup_timer_1(T1_DISABLED); // pas de timer T1 setup_timer_2(T2_DISABLED,0,1);// pas de timer T2 setup_comparator(NC_NC_NC_NC); // comparateur pas utilisés setup_vref(FALSE); // pas de tension de référence (automatique avec CCS C) lcd_init(); // initialisation LCD enable_interrupts(GLOBAL); enable_interrupts(INT_RDA); while(true) { if (BP1==0) // si appui sur le bouton BP1 { affi_bienvenue(); } if (BP2==0) // si appui sur le bouton BP2 { delay_ms(1500); // plus de 1.5 secondes if (!BP2) { x=0; // on réinitialise y,x en faisant clignoter y=0; // " réinisialisation " à l'écran 3 fois printf(displays,"\freinisialisation"); printf(displays,"\n en cours... "); delay_ms(500); printf(displays,"\f"); delay_ms(500); printf(displays,"\freinisialisation"); printf(displays,"\n en cours... "); delay_ms(500); printf(displays,"\f"); delay_ms(500); printf(displays,"\freinisialisation"); printf(displays,"\n en cours... "); delay_ms(500); printf(displays,"\f"); } else // sinon { printf(displays,"\f"); // on efface l'écran printf(displays,"%d",d[y]); // on affiche le caractère dans buffer[y] y++; // puis on incrémente y } } } }
-----