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
Wie sind 90026742 und LATCbits.LATC0=status_register[0] definiert? Gruss Robert
Bei sowas wie status_register[0]=LATDbits.LATD2; würden viele über logische Operatoren nachdenken. Gruss Robert
Versuch mal beim Lesen den PORT zu nehmen und nicht LAT. LAT ist ansich nur zum Ausgang über ein Latch setzen. Dich interessiert beim lesen aber nicht das Latch sondern der Portpin.
alex le. schrieb: > status_register[0] ist ein integer (int) Ist nicht gerade effektiv, ein Bit als 16Bit-Wert zu speichern (1500% Verschwendung). Peter
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:)
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
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
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.