Visualizza messaggio singolo
Vecchio 25 ottobre 10, 21:40   #63 (permalink)  Top
ElNonino
User
 
L'avatar di ElNonino
 
Data registr.: 06-05-2007
Residenza: Tre Ville (Preore)
Messaggi: 3.604
Invia un messaggio via MSN a ElNonino
Un altro possibile metodo per controllare a bit (byte) una porta od una variabile con il C18 Microchip (funziona in genere con qualsiasi micro)

Codice:
//define C18 p18f2320.h

//---------------------------------------

extern volatile near unsigned char PORTB;
extern volatile near union
{
  struct
 {
    unsigned RB0:1;
    unsigned RB1:1;
    unsigned RB2:1;
    unsigned RB3:1;
    unsigned RB4:1;
    unsigned RB5:1;
    unsigned RB6:1;
    unsigned RB7:1;
  };

  struct
  {
    unsigned AN4:1;
    unsigned AN5:1;
    unsigned :1;
    unsigned CCP1:1;
    unsigned AN6:1;
    unsigned PGM:1;
    unsigned PGC:1;
    unsigned PGD:1;
  };

  struct
  {
    unsigned INT0:1;
    unsigned INT1:1;
    unsigned INT2:1;
    unsigned :1;
    unsigned KBI0:1;
    unsigned KBI1:1;
    unsigned KBI2:1;
    unsigned KBI3:1;
  };

  struct
  {
    unsigned :1;
    unsigned CK:1;
    unsigned P1B:1;
    unsigned P1A:1;
    unsigned DT:1;
    unsigned :1;
    unsigned P1C:1;
    unsigned P1D:1;
  };

  struct
  {
    unsigned :4;
    unsigned RX:1;
    unsigned :1;
    unsigned T1OSO:1;
    unsigned T1OSI:1;
  };

  struct
  {
    unsigned :6;
    unsigned T13CKI:1;
  };

} PORTBbits;

//------------------------------------------------------------

// Define personalizzato

#define OUTEVA 	PORTBbits.RB0   // Uscita   Comando Iniettore A
#define OUTEVB 	PORTBbits.RB1   // Uscita   Comando Iniettore B
#define OUTEVC	PORTBbits.RB2	// Uscita   Comando Iniettore C
#define OUTEVD 	PORTBbits.RB3   // Uscita   Comando Iniettore D
//------------------------------------------------------------


// Program sample

void SetEvOn(void)
{
  switch (InjRot)
  {
    case 0:  if(InjReg.BONEVA) OUTEVA = 1;
                if(InjReg.BONEVB) OUTEVB = 1;
                if(InjReg.BONEVC) OUTEVC = 1;
                if(InjReg.BONEVD) OUTEVD = 1;
                break;

    omissis -------------						
								

}

//------------------------------------------------------------
Con alcuni PIC inoltre se si vuole invertire lo stato di una uscita è meglio leggere il registro LATCHx e scrivere in PORTx

__________________
Peace & Love
Fate le cose nel modo più semplice possibile, ma senza semplificare. (A. Einstein)
ElNonino non è collegato   Rispondi citando