Bonsoir,
je débute avec les PIC en C sur la Low Pin Count Démo Board de MicroChip et j'ai une question, voici mon code :
Ceci a pour effet d'allumer la LED DS1 de la carte de démo.Code:void main(void) { // Les ports C sont des sorties TRISC=0; // On met les pins C à 0 PORTC=0b00000000; // on met C0 à 1 PORTC.0=1; }
Maintenant, si j'appuie sur le bouton poussoir de la carte, la LED s'éteind.
Alors que si je fais la même chose avec le code en ASM fournit par microchip :
La LED DS1 s'allume, et lorsque j'appuie sur le bouton poussoir rien de ne passe ( ce qui parait plus normal ).Code:#include <p16F690.inc> __config (_INTRC_OSC_NOCLKOUT & _WDT_OFF & _PWRTE_OFF & _MCLRE_OFF & _CP_OFF & _BOR_OFF & _IESO_OFF & _FCMEN_OFF) org 0 Start: bsf STATUS,RP0 ; select Register Page 1 bcf TRISC,0 ; make IO Pin C0 an output bcf STATUS,RP0 ; back to Register Page 0 bsf PORTC,0 ; turn on LED C0 (DS1) goto $ ; wait here end
Voici mes bits de config, j'ai essayé de deviner comment les régler à partir du code asm mais bon...
J'utilise le compilateur CC5 intégré à MPLAB en suivant les instructions de http://hhollard.club.fr/prog_pic_c.htmCode:Oscillator : Internal RC No Clock Watchdog Timer : Off Power Up Timer : Off Master Clean Enable : External Code Protect : Off Data EE Read Protect : Off Brown Out Detect : BOD Enabled, SBOREN Disabled Internal External Switch Over Mode : Disabled Monitor Clock Fail-Safe
Le bouton poussoir est relié au PORTA.2.
Le schéma de la carte :
Le schéma du boutton poussoir :
Autre question : pour temporiser et faire clignoter de facon visible une LED, je met un
Lorsque X est autour de 100, ça marche, mais lorsque X commence à dépasser 500 le for n'est jamais passé, et la LED reste allumée ( ou éteinte selon le code ). En ajoutant plusieursCode:for(i=0; i<X; i++) ;
J'arrive à faire clignoter la LED de façon visible, mais comme la version de CC5 me limite au niveau de la quantité de code c'est pas super comme méthode. Une idée de pourquoi je peux pas mettre la valeur de X voulue?Code:for(i=0; i<100; i++) ; for(i=0; i<100; i++) ; for(i=0; i<100; i++) ; for(i=0; i<100; i++) ;
Dernière question : un livre ou un site avec un bon cours sur les PIC en C, ça existe?
Merci d'avance !
-----