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
premier programme sur le 16f84
Débuté par SProduction, nov. 03 2012 10:59
5 réponses à ce sujet
#1
Posté 03 novembre 2012 - 10:59
#2
Posté 04 novembre 2012 - 02:55
Bon, à force de chercher un peu partout, j'ai fini par trouver:
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!
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
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:
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
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
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?):
Merci
- à 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
Posté 04 novembre 2012 - 06:59
Il me semble que cet exemple est traité dans le cours de Bigonoff sur les 16f84a.Quel serait le code pour faire la meme chose (éteindre un led lorsqu'on appui sur un BP) mais en assembleur?
Pour l'explication des instructions, je te renvoie encore au cours de Bigonoff (j'ai pas envie de raconter de conneries XDDD).
#6
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)
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