Aller au contenu


Photo
- - - - -

programme mikroC


  • Veuillez vous connecter pour répondre
6 réponses à ce sujet

#1 clemto

clemto

    Nouveau membre

  • Membres
  • 4 messages

Posté 21 mars 2011 - 08:07

Bonjour a tous,

je suis nouveaux sur le site donc, et amateur en électronique, donc on vas y allé doucement.. :D

j'ai fait un code sur mikroC qui malheureusement après mille et une essai ne marche pas ...!
j'aimerai que l'on m'aide en me disant si le programme est faux et si oui m'aider a le résoudre.
(simulation sous ISI) pic16F88



void main()
{

ADCON1 = 0x80; // Configure les entrée analogique et Vref du port A
TRISA = 0xFF; // PORTA is input
TRISB = 0x00; // PORTB is outputs
PORTA.F1 = 0; // PORTA.F1 toujours à 0
PORTB.F4 = 1; // PORTB.F4 toujours à 1


do {
temp_res = ADC_Read(0); // Get 10-bit results of AD conversion

PORTB = temp_res>>6; // Envoi des 4 bits de poid le plus fort sur portB
} while(1);

while(1)
{

if(PORTA.F1 = 1) // Si PORT.RA1 passe a 1
{
PORTB.F4 = 0; // Alors PORT.RB4 passe a 0
Delay_ms(2000); // pendant 100ms
}

else
{
PORTB.F4 = 1; // sinon PORT.RB4 reste a 1 => detect_tir à 1
}
}
} [/code]

A l'aide!!! :colere:

#2 miky-mike

miky-mike

    Pilier du forum

  • Membres
  • PipPipPipPipPip
  • 1 232 messages
  • Gender:Male
  • Location:Belgique

Posté 21 mars 2011 - 08:27

Bonjour clemto

N'oublie pas de te présenté dans la section adéquate.

Sinon pour ton programme, que fait il pour ne pas fonctionner ? (dit nous le code d'erreur, ou ce qu'il fait ou autre).

Personnellement je ne fait pas de mikroC mais dans ton code il y a deux boucles infinie ce qui n'est pas bon, en effet quand le programme rentrera dans la première

{
temp_res = ADC_Read(0); // Get 10-bit results of AD conversion
PORTB = temp_res>>6; // Envoi des 4 bits de poid le plus fort sur portB
} while(1); [/code]

Et la le programme va bouclé à l'infini sans y sortir car il n'y a pas de condition de sortie (la condition de sortie est toujours a 1 donc a vrai)

#3 clemto

clemto

    Nouveau membre

  • Membres
  • 4 messages

Posté 21 mars 2011 - 09:30

merci de ta réponse miky mike,

justement il n'y a pas de code d'erreur.. =S la compilation se fait correctement.
c'est lors de la simulation sous ISI que sa ne marche pas, si tu a un conseille pour évité cette boucle infini et prendre en compte l'autre avec, je suis preneur.

désolé pour le message sur se forum j'ai vu après qu'il y avais un espace pour se sujet.. =/ (je découvre le site lol)

#4 miky-mike

miky-mike

    Pilier du forum

  • Membres
  • PipPipPipPipPip
  • 1 232 messages
  • Gender:Male
  • Location:Belgique

Posté 21 mars 2011 - 09:55

Que veux tu que le programma face ?

L'idée est de tout intégré dans la grosse boucle infinie

while(1)
{
}



#5 clemto

clemto

    Nouveau membre

  • Membres
  • 4 messages

Posté 21 mars 2011 - 10:19

okey,

j'ai tous mis dans la boucle sof que ma led sur le PORTB RB4 clignote toujours.

enfaite je doit faire un conversion CAN (qui marche correctement dans le programme), convertir se code en code gray, puis laisser la LED allumer (etat haut) et lorsque j'appuie sur le bouton poussoir brancher au PORTA RA1 la LED s'éteint pendant 100ms (dans le programme 2s pour la voir s'éteindre en simulation)

#6 modeste

modeste

    Nouveau membre

  • Membres
  • 7 messages

Posté 23 avril 2011 - 04:11

bonsoir clemto
je pense bien que l'erreur se situe au niveau de ta boucle infinie au tout debut car comment veux tu que le code qui vient apres la premiere boucle qui est une boucle infinie soit executer! impossible!

exactement c'est normal que le compilateur puisse compiler sans probleme puisque c'est n'est pas une erreur pour le compilateur, je te signale que le compilateur te renvoie une erreur si est seulement si cette derniere est une erreur de syntaxe alors que dans ton prog. c'est une erreur de conception et qui apparait sous isis car isis execute ton comme ce qui devait se passer en realité (arrivé dans ton do ..while(1) c'est le reste du code ne sera meme pas executer .


se que je sugere c'est d'essayer :
1- elimine la premiere boucle et les deux lignes qu'y sont tu les place dans la boucle while ce qui fait que tu aura une seule boucle infinie car tu doit avoir maintenant: while(1) {tes deux lignes et puis la suite du prog.}

#7 clemto

clemto

    Nouveau membre

  • Membres
  • 4 messages

Posté 27 avril 2011 - 10:18

merci pour ta réponse Modeste,

je l'ai fait mais le souci c'est que mon convertisseur ( première boucle ) ne fonctionne plus lors de la simulation.
je me demander si je mettais un condition de sorti (que je ne sait pas mettre) si sa pourrais fonctionner?




0 utilisateur(s) li(sen)t ce sujet

0 members, 0 guests, 0 anonymous users