Hallo liebe Leute. ich habe folgendes Problem. Ich habe einen ACTEL FPGA indem ein 8051 implementiert ist. Diesem möchte ich nun über Keil in C Programmieren. Eine Eigenart ist, dass die IO's je 8 Inputs haben und gleichzeitig 8 outputs. Wenn ich nun auf auf die Variable (hinter der sich meine IOs verstecken) beschreibe, schreibe ich die ausgänge... falls ich aber lese, lese ich von den eingängen. Wenn ich nun aber den Befehl hier verwenden möchte um ein bit der ausgänge zu setzten: myinout |= (1<< BIT5); dann ist das ja gleichbedeutend mit myinout = myinout | (1<<BIT5); Das heisst ja in Worten " LESE myinout aus... und ver"oder"e es mit einem bit wo alles 0 ist ausser das 5te bit und SCHREIBE es zurück" LESE deswegen grossgeschrieben weil, wenn ich von der variable lese die eingänge eingelesen werden. Ich möchte doch aber den zustand der Ausgänge wissen. Oder weiss das mein Kompiler dass er dabei nicht aus dem register liest, sondern sich den zustand her nimmt. Ich weiss... es ist etwas speziell, aber ich hoffe das irgend ein C profi mir eine Antwort geben kann. Vielen Dank fürs lesen.
Braten wrote: > Oder weiss das mein Kompiler dass er dabei nicht aus dem register liest, > sondern sich den zustand her nimmt. > > Ich weiss... es ist etwas speziell, aber ich hoffe das irgend ein C > profi mir eine Antwort geben kann. Ne, das hat nichts mit Compiler oder C zu tun, das ist in der 8051 Architektur festgelegt. Es gibt Read-Modify-Write Instruktionen und die lesen immer das Ausgangslatch, nicht die Eingänge. Steht aber in jedem 8051 Datenblatt drin. Peter
hey Danke Peter, Also kann ich solche Konstrukte dennoch verwenden :-) des finde ich gut, danke für die schnelle Antwort
Hm, zu früh gefreut. Geht leider doch nicht. Habe jetzt im 8051 Datenblatt von ACTEL geschaut. Mit dem Befehl ORL kann man Bitweise ver"oder"n. Wenn es sich um einen Ausgang handelt werden die Ausgangslatches eingelesen. Also genau das was ich brauche. also wollte ich das nun mit inline assembler versuchen, brauche aber wohl etwas nachhilfe in assembler soweit bin ich: #pragma ASM ORL Variable, #00001000b #pragma ENDASM daraufhin bekomme ich diese fehlermeldung error A48: DATA-ADDRESS EXPECTED Also möchte der ORL befehl wohl keine Variable von mir, sondern die Adresse der Variable. Wenn ich die adresse der Varialbe (wo sich die IO dahinter verbergen) angebe, meckert wer weil die Adresse der memory map 16Bit ist. Vielen Dank für die Nachhilfe... und einen schönen sonnigen Nachmittag
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.