Befehl erklären

Balkan_Devil

Mitglied
Hallo

Im Zuge meiner Diplomarbeit schreibe ich ein Pogramm in C. Ich habe ein Beispielprogramm erhalten, jedoch versteh ich nicht alle Zeilen.
Ich hoffe es kann mir jemand weiterhelfen.

P0=P0|0x07;
P0=P0&((counter&0x07)+0xF8);
P2--;

Danke im Voraus.

Lg
 
Hi,
diese Operationen sind Bitoperationen.

& bedeutet Bitweises UND

Also zb wenn du hast 1110&0101 wäre das Ergebnis 0100.
Natürlich nur binär. Hier wird das auf variablen angewendet.

| bedeutet ODER, also: 1110|0100 wäre 1110

Gruß
 
Hallo,

was genau verstehst du denn an diesen Zeilen nicht? & bzw. | stehen für eine binäre Und- bzw. Oder-Verknüpfung. Mit 0x wird eine Ganzzahlkonstante in Hexadezimalschreibweise eingeleitet. Ein nachgestelltes -- ist ein Post-Dekrement. Gibt es denn in der Bibliothek deiner Hochschule kein Buch über C, wo man so etwas nachschlagen könnte? Alternativ gibt es natürlich auch entsprechende Online-Ressourcen.

Grüße,
Matthias
 
Ich nehme an, P0 und P2 sind int, und du kannst Zahlen ins Binärsystem umrechnen (und zurück)?

Zeile 1: P0 wird ein neuer Wert zugewiesen, und zwar zum selber ausrechnen:
-Rechne P0 ins Binärsystem
-Die letzten drei Stellen werden 1, egal was sie zuerst waren
zB 0->111, 110->111, 10101000->10101111
-Zurückrechnen

oder ohne Binärsystem
1) Dividier die Zahl durch 8, es wird nur der Rest von der Division gebraucht
2) Subtrahier den Rest von der Originalzahl und zähl 7 dazu

Dritte Zeile: Ist das gleiche wie P2=P2-1,
also die Zahl in P2 wird einfach um eins runtergezählt
33->32, 64->63, -2 -> -3 usw

Zweite...da fällt mir partout nicht ein, wie ich das ohne den &-Operator erklären soll :(

Gruß
 
Zuletzt bearbeitet:
Danke für die schnelle Antwort

Jetzt ist es viel verständlicher, doch für was steht das P0 ? Ist das eine Variable ? Wieso wird in diese nix reingeschrieben ?
 
Steht nirgends sowas wie
int P0;
oder
char P0;
DWORD P0;
oder so irgendwas im Code?

Eigentlich müsste es eine Variable sein.
Welchen Wert die hat, hängt halt vom restlichen Code ab.

PS: Schließ mich Jennesta an, zeig mal die ganze Funktion
 
Zuletzt bearbeitet:
Da ich den Rest des Codes nicht kenne, kann ich dir das nicht sagen ;) Sowieso generell nichts über den Sinn des Programms ;)
 
Steht eben nirgends int P0..

Deswegen auch die Frage
Ich stell mal den ganzen Code rein ;)

#include <ADUC831.H>
#include "LCD_DOGM_SPI.h"
#include <stdio.h>

unsigned char counter;
idata char buffer[17];
void ser_ini(void)
{
/* Set up UART Baudrate = 9600 ADUC831 ; 11,059MHz*/
// T3CON = 0x085; T3FD = 0x08; SCON = 0x052;
/* Set up UART Baudrate = 9600 ADUC842 ; 2,097MHz CLKFRQ*/
// T3CON = 0x083; T3FD = 0x2D; SCON = 0x052;
/* Set up UART Baudrate = 9600 ADUC841 ; 11,059MHz*/
T3CON = 0x086; T3FD = 0x08; SCON = 0x052;
}
main()
{

init_lcd();
blank_lcd();
ser_ini();

while(1)
{
print_lcd(3,1," Hallo 3AKELI ");
sprintf(buffer,"%3d",(unsigned int)counter);
print_lcd(2,10,buffer);
print_lcd(1,1,"** ADUC841 **");
print_lcd(3,16," ");
waitms(1000);
P0=P0|0x07;
P0=P0&((counter&0x07)+0xF8);
P2--;
counter++;
printf("Hier bin ich\n");
} // wait forever
}
 
Was steht denn in den 2 Dateien?
ADUC831.H
LCD_DOGM_SPI.h
Da sollte es drinnen sein

@Jennesta: Hehe :-)
 
Zuletzt bearbeitet:
Ich behaupte mal das die Deklaration udn Initialisierung von P0 dann in den header datein stattfindet.

@ Sheel irgendwie biste mir immer nen Sprung schneller ;)
 
Zurück