Bonjour à tous,
Je travaille en ce moment sur un PIC16F877 et j'utilise la liaison série. Suivant l'état des broches du port B, un automate gère les octets à envoyer sur la liaison série. Voici un morceau du code :
La variable stop est gérée dans la routine d'interruption. Celle ci est à 1 quand une interruption survient, sinon elle reste à zéro.case 0x80 : lcd_clear();
lprintf(" MODE ");
lcd_gotoxy(0,1);
lprintf(" ALARME ");
if (stop==1)
{
delay_s(4);
txreg = 0x03;
while((txsta&0x02)==0); delay_ms(1);
txreg = 0x0D; stop=0;
}
read=portb;
break;
Le problème se situe au niveau du délai delay_s(4). Il est sensé fair un délai de 4 secondes mais il ne le fait pas. L'instruction suivante txreg=0x03 s'exécute tout de suite après. La simulation respecte ce délai mais pas dans la réalité.
Je pensais à une erreur de timing du PIC. Celui-ci est cadencé à 4MHz avec oscillateur à quartz externe. Pensez vous que c'est suffisant? Cependant la liaison série marche bien à 9600bds sans problème et avec précision.
Je ne pense pas que le problème vienne du codage mais dans la config du PIC. N'hésitez pas à me poser des questions.
Je vous remercie.
-----