willymix
Messages postés1Date d'inscriptionsamedi 31 mai 2008StatutMembreDernière intervention31 mai 2008
-
31 mai 2008 à 19:26
raphael -
31 mai 2008 à 23:07
salut a tous
je suis etudiant en electronique et j'ai un projet de fin d'etude a realiser mais je rencontre quelques difficultés .
l'objectif: metre port B4 a 0 pendant 16ms et mesurer la duree pendant laquelle port B0 reste a 1 et envoyer le resultat vers le pc. tout foctionne bien mais on ne recoi le temps pendant le quel port B0 reste a 1. voici ci dessous le code sourece si quelqu'un peu m'aider . merci
/* seriF84.c getchar putchar initserial for 16F84A */
/* Serial output is at PORTB.O */
/* Serial input is at PORTB. 1 */
char getchar( void );/* fonction de réception */
void delay_ms( uns16 millisec); /*temporisation*/
void putchar( char d_out ); /*fonction d'envoi*/
void geNumber(char valeur); /*fonction pour envoyer la mesure de la broche OUT*/
void main( void ) /* initialise */
{
unsigned char i=0 ,d_out, tp =0,x;
unsigned int centaine = 0 , nbr/*,comp,compl*/;
TRISB.4 = 0 ; /*configurer le port RB4 en sortie pour l'impulsion de la pompe*/
TRISB.0 = 1 ; /*configurer le port RBO en entrée pour mesurer le temps qui vient de la broche OUT*/
TRISA.1 = 1; /*configurer le port RAI en entrée pour la réception*/
TRISA.0 = 0; /*configurer le port RAO en sortie pour l'émission*/
PORTB.4 = 1; /*on prédéfinit préalablement RB4 al*/
PORTA.0 = 1 ; /*on prédéfinit aussi RAO al*/
do
{
i = getchar();
if(i == 0X01)
{
PORTB.4 = 0 ; /*on met RB4 à l'état bas*/
delay_ms(16); /*on laisse cet état bas pendant 16ms*/
PORTB.4 = 1 ; /*on remet RB4 à son état d'initialisation*/
nbr=15 ; /*nombre de compensation*/
while ( PORTB.0 == 1 ) /*On attend le signal OUT*/
{
delay_ms(1); /*delay de 1ms*/
nbr++;
if (nbr==100)
nbr=0;
centaine++;
}
}
tp= centaine/10;
x =tp+ 48;
putchar(x);
tp=tp*10;
tp= centaine-tp;
x =tp+ 48;
putchar(x);
tp= nbr/10;
x =tp+ 48;
putchar(x);
tp=tp*10;
tp= nbr-tp;
x =tp+ 48;
putchar(x);
putchar(127);
centaine=0;