cs_willymix
Messages postés4Date d'inscriptionmercredi 27 février 2008StatutMembreDernière intervention31 mai 2008
-
31 mai 2008 à 19:05
Kevin.Ory
Messages postés840Date d'inscriptionmercredi 22 octobre 2003StatutMembreDernière intervention 7 janvier 2009
-
31 mai 2008 à 19:13
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;
Kevin.Ory
Messages postés840Date d'inscriptionmercredi 22 octobre 2003StatutMembreDernière intervention 7 janvier 200911 31 mai 2008 à 19:13
Resalut,
Tout ce code pour mesurer un temps entre 2 moments?
Je suis pas d'humeur pour comprendre ton code en ce moment, mais il sera beaucoup plus simple d'utiliser les interrupts et un timer.
1. Tu lance le timer et tu met PORTB.O à 1
2. Dès que tu recoit un signal sur une entré (interrupt), tu lis la valeur de ton timer.
3. Tu envois l'info au PC
J'ai pas compris comment tu envois les info au PC, par le port série?
J'ajoute que je ne comprend pas ce que cette question fait dans la section Visual Basic 6...