Bonjour,
Je viens vers vous car d'une part je débute dans l' univers des pics, et que ça fait un moment que je me heurte à un problème sur la programmation en Mikroc d' un pic 12F675. En effet j' utilise un bouton poussoir pour passer successivement à l' état haut puis bas 3 pins d' un pic 12f675 et cela fonctionne très bien. Par contre dès que je veux faire un mode "case 4" utilisant les 3 pins style chenillard ça fonctionne 1 fois et la boucle s' arrête. Voila j' espère que mon explication n' est pas trop confuse. ci joint mon code réalisé avec MPLABX IDE v 2.2.
Merci beaucoup pour votre aide.
#include <stdio.h>
#include <stdlib.h>
#include <xc.h>
#pragma config FOSC = INTRCIO // Oscillator Selection bits (INTOSC oscillator: I/O function on GP4/OSC2/CLKOUT pin, I/O function on GP5/OSC1/CLKIN)
#pragma config WDTE = OFF // Watchdog Timer Enable bit (WDT enabled)
#pragma config PWRTE = OFF // Power-Up Timer Enable bit (PWRT disabled)
#pragma config MCLRE = OFF // GP3/MCLR pin function select (GP3/MCLR pin function is MCLR)
#pragma config BOREN = ON // Brown-out Detect Enable bit (BOD enabled)
#pragma config CP = OFF // Code Protection bit (Program Memory code protection is disabled)
#pragma config CPD = OFF // Data Code Protection bit (Data memory code protection is disabled)
#define _XTAL_FREQ 4000000
//Variable
int Compteur;
void main()
{
//Initialisation
OPTION_REG = 0b000000;
CMCON = 0b000111;
TRISIO = 0b000010;
ANSELbits.ANS0 = 0;
ANSELbits.ANS1 = 0;
ANSELbits.ANS2 = 0;
ANSELbits.ANS3 = 0;
GPIO = 0;
Compteur = 0;
GPIO = 0b000000;
while (1)
{
if (GPIO1)
{
BoucleBP:
;
if (GPIO1)
{
goto BoucleBP;
}
Compteur = Compteur + 1;
}
switch (Compteur)
{
case 0:
GPIO = 0b000000;
{
break;
}
case 1:
{
GPIO = 0b000001;
break;
}
case 2:
{
GPIO = 0b000100;
break;
}
case 3:
{
GPIO = 0b010000;
break;
}
case 4:
{
GPIO = 0b000000;
__delay_ms(250);
GPIO = 0b000001;
__delay_ms(250);
GPIO = 0b000100;
__delay_ms(250);
GPIO = 0b010000;
__delay_ms(250);
break;
}
case 5:
{
GPIO = 0b000000;
Compteur = 0;
break;
}
}
}
}
-----