Aller au contenu


Photo
- - - - -

premier programme sur le 16f84


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

#1 SProduction

SProduction

    Membre

  • Membres
  • 28 messages

Posté 03 novembre 2012 - 10:59

Bonsoir à tous,

Plusieurs petites questions, comme d'habitude, car le C pour la programmation des pics n'est pas tout à fait le meme que pour les programmes "normaux" et donc je suis un peu perdu dans ces nouvelles instructions...

Pourriez-vous me donner un petit exemple de programme (en C pour pic16f84) afin que lorsque j'appui sur un bp (ra0 par ex), j’éteigne une led (rb0)

car malgré tout ce que j'ai trouvé sur internet, je ne parviens pas a avoir exactement ce que je recherche (un programme simple avec juste ce que j'ai demandé) car mon problème c'est que je ne comprend qu'avec des exemples...

Merci ;)

#2 SProduction

SProduction

    Membre

  • Membres
  • 28 messages

Posté 04 novembre 2012 - 02:55

Bon, à force de chercher un peu partout, j'ai fini par trouver:

void main() {
  
  ANSELB = 0;
  ANSELE = 0;

  TRISA=0x00;
  TRISB=0xff;

  PORTB=0x00;
  PORTA=0x00;

  while (1) 
  {
    
    if (PORTB.F7==1) 
       {PORTB.F1=1;}
    else
       {PORTB.F1=0;};
       
  }
}

Mais est-ce juste? y a-t-il du superflux? y a-t-il certaines choses manquantes? certains éléments devraient-ils etre tournés autrement? (comme par exemple le " if (PORTB.F7==1) " ne faudrait-il pas l'écrire ainsi " if (Button(&PORTB,7,1,1)) ").

J'aimerai au moins PARTIR SUR DE BONNES BASES donc si vous pouviez m'aider, ca serait sympa ;)

merci!

#3 seb03000

seb03000

    @pump_upp - best crypto pumps on telegram !

  • Membres
  • PipPipPipPipPip
  • 1 193 messages
  • Location:https://t.me/pump_upp

Posté 04 novembre 2012 - 03:19

Salut j'ai chercher sur le net , pas facile.

Tu cherche a allumé et éteindre une LED grâce a un bouton poussoir , j'ai trouvais un exemple ( un peux ) similaire au tiens.

Exemple:

void main(void) 
{
PORTB = 0;  // Initialisation des pattes du microcontrôleur
TRISB = 0b11110000;

for (;<img src='http://www.robot-maker.com/forum/public/style_emoticons/<#EMO_DIR#>/wink.gif' class='bbc_emoticon' alt=';)' /> {   //La suite du programma s'effectue en bougle
RB0 = RA0;
RB1 = RA1;
RB2 = RA4;
RB3 = RB5;
}}


Bon je n'est jamais travailler en pics , mais cette exemple pourrai t'être utile , si je trouve des tuto pour cela je modifirè ma page pour les rajoutés.

Édité :

ici
ou
ici

#4 SProduction

SProduction

    Membre

  • Membres
  • 28 messages

Posté 04 novembre 2012 - 05:42

Et toujours des questions:

- à quoi sert le "void" entre parenthèses après le "void main" ?
- Quel serait le code pour faire la meme chose (éteindre un led lorsqu'on appui sur un BP) mais en assembleur? Car lorsque je le convertis avec MikroC, j'obtiens ce code (mais j'y comprend rien, quelqu'un pourrait-il me l'expliquer? n'y a-t-il pas d'éléments superflux?):



_main:

;TEST ASSEMBLEUR.c,1 ::                 void main() {
;TEST ASSEMBLEUR.c,3 ::                 ANSELB = 0;
        CLRF        ANSELB+0 
;TEST ASSEMBLEUR.c,4 ::                 ANSELE = 0;
        CLRF        ANSELE+0 
;TEST ASSEMBLEUR.c,6 ::                 TRISA=0x00;
        CLRF        TRISA+0 
;TEST ASSEMBLEUR.c,7 ::                 TRISB=0xff;
        MOVLW       255
        MOVWF       TRISB+0 
;TEST ASSEMBLEUR.c,9 ::                 PORTB=0x00;
        CLRF        PORTB+0 
;TEST ASSEMBLEUR.c,10 ::                 PORTA=0x00;
        CLRF        PORTA+0 
;TEST ASSEMBLEUR.c,12 ::                 while (1)
L_main0:
;TEST ASSEMBLEUR.c,15 ::                 if (PORTB.F7==1)
        BTFSS       PORTB+0, 7 
        GOTO        L_main2
;TEST ASSEMBLEUR.c,16 ::                 {PORTB.F1=1;}
        BSF         PORTB+0, 1 
        GOTO        L_main3
L_main2:
;TEST ASSEMBLEUR.c,18 ::                 {PORTB.F1=0;};
        BCF         PORTB+0, 1 
L_main3:
;TEST ASSEMBLEUR.c,20 ::                 }
        GOTO        L_main0
;TEST ASSEMBLEUR.c,21 ::                 }
L_end_main:
        GOTO        $+0
; end of _main



Merci

#5 Francky

Francky

    Membre chevronné

  • Membres
  • PipPipPipPip
  • 967 messages
  • Gender:Male

Posté 04 novembre 2012 - 06:59

Quel serait le code pour faire la meme chose (éteindre un led lorsqu'on appui sur un BP) mais en assembleur?

Il me semble que cet exemple est traité dans le cours de Bigonoff sur les 16f84a.

Pour l'explication des instructions, je te renvoie encore au cours de Bigonoff (j'ai pas envie de raconter de conneries XDDD).

#6 Mic*

Mic*

    Habitué

  • Membres
  • PipPip
  • 232 messages
  • Gender:Male
  • Location:Sarthe

Posté 04 novembre 2012 - 11:51

Bonjour,

en MicroC == est un test ( nepas confondre avec d'autres langages C)

if (PORTB.F7==1) veut dire si le bit 7 du port B est égal à 1 (donc au plus par le pôussoir et une résistance de protection)
{PORTB.F1=1;} alors le bit 1 du port B est égal à 1
else
{PORTB.F1=0;}; sinon le le bit 1 est égal à 0

F0 à F7 permet de sélectionner les bits d'un port individuellement

le mieux est de chercher le manuel de référence de MicroC car on écrit les programme différement de certain C)







Bon, à force de chercher un peu partout, j'ai fini par trouver:

void main() {
  
  ANSELB = 0;
  ANSELE = 0;

  TRISA=0x00;
  TRISB=0xff;

  PORTB=0x00;
  PORTA=0x00;

  while (1) 
  {
    
    if (PORTB.F7==1) 
       {PORTB.F1=1;}
    else
       {PORTB.F1=0;};
       
  }
}

Mais est-ce juste? y a-t-il du superflux? y a-t-il certaines choses manquantes? certains éléments devraient-ils etre tournés autrement? (comme par exemple le " if (PORTB.F7==1) " ne faudrait-il pas l'écrire ainsi " if (Button(&PORTB,7,1,1)) ").

J'aimerai au moins PARTIR SUR DE BONNES BASES donc si vous pouviez m'aider, ca serait sympa ;)

merci!






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

0 members, 0 guests, 0 anonymous users