Problem bei C Programmierung

OP #2784157
Lesenswert?

Hallo,

Ich hab da ne frage und es ware super wenn mir da jemand helfen könnte.

Also ich möchte den Zustand eines PINs in ein Array schreibn,
ich habs so mal versucht aber es funktioniert nicht.

status_register[0]=LATDbits.LATD2;

LATCbits.LATC0=status_register[0];         // zum testn obs funzt

das Programm lässt sich compilieren und ausführen abhesehen davon dass 
das array nicht beschrieben wird.

TRISD ist 0x04-daher sollte RD2 ein Eingan sein.
TRISC ist 0x00- PortC = Autput
und den PIN RD2 hab ich auf High;

(ich verwende MPLAP C18 Compiler)

danke im voraus für alle Beiträge

mgf
alex
OP #2786589
Lesenswert?

Ja aber ich mach das weil ich dann mit schleifen arbeiten kann, hier 
sollen dann die Ausgangszustände meines SPI EEPROMs hineingeschrieben 
werden, anschließend sschreib ich die ganzen Bits schon in eine 
Variable,

wenn du ne bessere Lösung hast dann wär es toll wenn du mir helfen 
könntest:)
#2786653
Lesenswert?

Verwende ein unsigned char.

unsigned char Status = 0 ;  /* initialer Zustand  */

Schreibe das bit rein

Status = PORTA.1              /* soll das bit bezeichnen */

if ( Status )    {...}        /* mach was, was gesetztes Bit anzeigt  */
else         {...}            /* mach was anderes                     */

 Gruss

Robert
#2786985
Lesenswert?

alex le. schrieb:
> Ja aber ich mach das weil ich dann mit schleifen arbeiten kann,

Schieben (<<, >>) gehen doch prima in Schleifen.

alex le. schrieb:
> hier
> sollen dann die Ausgangszustände meines SPI EEPROMs hineingeschrieben
> werden, anschließend sschreib ich die ganzen Bits schon in eine
> Variable,

Dann nimm das HW-SPI oder mach SPI in SW. Hier ein Beispiel für den AVR:
1
uint16_t shift_io16( uint16_t b )               // send / receive word
2
{
3
  uint8_t i;
4

5
  SPI_CLK_DDR = 1;                              // set as output
6
  SPI_MOSI_DDR = 1;
7

8
  for( i = 16; i; i-- ){                        // 16 bits
9
    SPI_MOSI = 0;
10
    if( b & 0x8000 )                            // high bit first
11
      SPI_MOSI = 1;
12
    b <<= 1;
13
    SPI_CLK = 1;
14
    if( SPI_MISO_PIN )
15
      b++;
16
    SPI_CLK = 0;
17
  }
18
  return b;
19
}


Peter

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren