Quand je suis bloqué je fais ça ; on met ton programme à poil, c'est à dire qu'on va retirer tout ce qui ne sert pas à comprendre "où est le problème" et ajouter les choses une part une, mais vraiment une par une sinon tu ne vas jamais trouver ce qui ne va pas.
Pas de fonction, pas de gestion d'interrupteur et on allume qu'une seule LED avec un masque et rien d'autre. Une programme minimal. Si le bit vaut 1 alors
Ci dessous, à compiler par tes soins, un programme qui regarde qu'elle est la valeur du bit 0 de donne. Si le bit n°0 vaut 1 alors RB1 clignote sinon il ne clignote pas. La LED devrait clignoter car donnee vaut 0b00000001
Est ce que ce truc minimaliste fonctionne ?
Code C : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26 #include <stdio.h> void main() { unsigned char donnee = 0b00000001; TRISA = 0b00000010; //port A en sortie sauf RA1 PORTA = 0b11001000 ; //mettre les sorties à zéro sauf RA6, RA7,RA3 TRISB = 0b00000001; //port B en sortie sauf RB_0 PORTB = 0 ; //mettre les sorties à zéro pcon.OSCF = 1; //configure le bit 3 du registre pcon pour 4 Mhz CMCON = 0b00000111; //désactiver les comparateurs sur RA0 while(1) { if(donnee & 0x01 == 1) { RB1_bit = 1 ; delay_ms(250); RB1_bit = 0 ; } else { RB1_bit = 0 ; } } }
ps : tiens c'est bizarre delay_ms a un 'd' minuscule tandis que dans le code qui ne marche pas c'est un 'D' majuscule. Ça aussi, élimine le doute, si ça clignote tu essayes delay avec et sans majuscule histoire qu'on ne se pose plus la question plus tard. Soit c'est pareil, soit un des deux ne marche pas.
Partager