#!/usr/local/bin/php entrees_sorties_logiques
// arlotto 2006 c18 sur 18F4520 carte PICDEM2+
// démonstration  c18 entrées / sorties logiques
// Pour pouvoir utiliser les broches RB4 à RB0 en
// E/S logiques il est pratique de mettre PBADEN sur OFF
// Avec PBADEN = ON RB4:RB0 peuvent être utilisées comme
// entrées analogiques supplémentaires (AN8 à AN12) 
#include <p18cxxx.h> 
 
// configuration
#pragma config OSC = HS
#pragma config WDT = OFF
#pragma config LVP = OFF
#pragma config PBADEN = OFF  // Si PBADEN = ON RB4:RB0 sont analogiques au reset ! 
 
// une manière pratique de redéfinir les bits
// en fonction de leur utilisation sur la carte
#define S2 PORTAbits.RA4
#define S3 PORTBbits.RB0
#define LED2 PORTBbits.RB2
#define TRIS_LED2 TRISBbits.TRISB2
#define LED1 PORTBbits.RB1
#define TRIS_LED1 TRISBbits.TRISB1
#define LED3 PORTBbits.RB3
 
void main(void)
{
int cpt=0;
char etat=0;
PORTBbits.RB3 = 0 ;
TRISBbits.TRISB3 = 0 ;  // RB3 en sortie
LED2=0;
TRIS_LED2=0;
LED1=0;
TRIS_LED1=0;
for (;;)
{
  // un simple interrupteur
  if(S2==0)
  {
     LED2=1;
  }
  else
  {
    LED2=0;
  }
 // comptage des appuies sur S3
  switch (etat)
  {
    case 0 : if(PORTBbits.RB0==0)
             {
                LED3=1;
                cpt++;
                etat=1;
             }
            break;
   case 1 : if(PORTBbits.RB0==1)
            {
              LED3=0;
              etat=0;
            }
           break;
  }
  // allumage de LED1 après 4 appuis
  if(cpt>=4)
  {
    LED1=1;
    cpt=0;
  }
 
 }
}