Hallo, Bin Neuling bei der Programmierung von Microchip PIC's mit MPLAP 7.60 und C18 Compiler. . Ich suche eine Option/Schalter, die mir die Zeilen auf dem Bildschirm nach dem starten des Programms wieder anzeigt. Also dort, wo ich das Programm beendet habe. . Besteht eine Möglichkeit, in MPLAP einen anderen Editor einzubinden? Gruß Siegfried
Hallo, du hast die Option den letzten "workspace" zu speichern, so dass dieser nach dem Programmneustart wieder geöffnet wird. Ob dieser sich die Editor-Zeilen merkt kann ich nicht beantworten. Mir persönlich gefällt der Mplab-Editor nicht - ich verwende MPLAB nur zum Kompilieren und flashen/debuggen. Gruß Christian
Hallo, Firma: UltraEdit (Win) privat: geany (Win+Linux), programmer's notepad (Win) Editoren sind Geschmackssache. Der eine arbeitet lieber mit X, der andere mit Y... darüber kann man streiten :) Einfach ausprobieren. Gruß Christian
Hallo, Danke für die Info. Habe aber ein Problem mit einem Bit testen. Folgende Zeile #define bit_set(var,bitnr) ((var) |= 1 << (bitnr)) #define bit_clear(var,bitnr) ((var) &= ~(1 << (bitnr))) #define bit_test(var,bitnr) ((var) & (1 << (bitnr))) unsigned char Testen; unsigned char Count_1; OE_1, SPI1_EN,LED_RUN und LED_DATA sind IO Pin zugeordnet. .. Testen = 0xF0; if (bit_test(Testen, 4) == 1) { OE_1 = 1; Count_1++; } if (bit_test(Testen, 5) == 1) { SPI1_EN = 1; Count_1++; } if (bit_test(Testen, 6) == 1) { LED_RUN = 1; Count_1++; } if (bit_test(Testen, 7) == 1) { LED_DATA = 1; Count_1++; } Versuche verzweifelt ein Bit zu testen. Dieses funktioniert nicht. Testen habe ich 0xF0 zugewiesen, und somit müßten die Bit 4 bis 7 eine 1 haben. Habe warscheinlich meinen schlechten Tag oder soll es mit dem Free C18 zu tun haben? Setzen und löschen funktionieren. Es werden die Zeilen zwischen den { .. } nicht ausgeführt Gruß Siegfried
Hallo, ich vermute, dass dein Problem folgendes ist: mit "bit_test(Testen, 4)" verundest du die Variable 'Testen' mit 0b00010000; als positives Ergebis würdest du 0b00010000 bzw. 0x10 erhalten; da der Compiler bei der if-Abfrage die '1' auf den anderen Typ castet (nämlich auf den von 'Testen') vergleichst du 0x10 mit 1, also 0b00000001 / 0x01 -> das Ergebnis ist FALSE; also entweder:
1 | if (bit_test(Testen, 4) == 0x10) |
oder
1 | if ( (bit_test(Testen, 4) >>4) == 1) |
Gruß Christian
oder du machst es ganz anders:
1 | #define TEST_BIT &
|
2 | #define BIT_0 0b00000001
|
3 | #define BIT_1 0b00000010
|
4 | //..etc
|
5 | |
6 | |
7 | if (Testen TEST_BIT BIT_0) |
8 | { ...} |
sollte funktionieren. Gruß, schönes Woe Christian
Hallo Christian, Danke für die schnelle Infos. Habe auf die schnelle ein neues Projekt erstellt. Folgende Zeilen mit verschiedene Varianten: Jetzt funktioniert es(es wieder). Weiß der Teufel, was ich zerschossen habe, obwohl der Compiler nicht meckert. Ist vieleicht zu heiß? void myTest(void) { myCount = 0; Testen = 0b00001000; if ((Testen & 0b00001000) >= 1) {myCount++; } if (Testen & (1 << 3)) {myCount++;} if (bit_test(Testen, 3)) {myCount++;} if (Testen TEST_BIT BIT_3) {myCount++;} } nutze deine letzte Variante. Werde noch sehen, das ich setzen und lösche dem anpassen kann. Gruß und schönes Wochenende Siegfried
Hallo Christian, Habe weiter // #define TEST_BIT & #define BIT_0 0b00000001 #define BIT_1 0b00000010 #... // #define SET_BIT |= #define BIT_0 0b00000001 #define BIT_1 0b00000010 ... // #define DEL_BIT &= ~ #define BIT_0 0b00000001 #define BIT_1 0b00000010 ... Testen SET_BIT BIT_4; Testen DEL_BIT BIT_4; Code funktioniert. mit dem mehrfachem deklarieren von BIT_0, ist das so in Ordnung. Gruß Siegfried
Hallo, die Variante if (Testen TEST_BIT BIT_3) {myCount++;} } testet ein Bit auf eine '1' Habe versucht diese umzustellen auf if (Testen TEST_BIT !BIT_3) {myCount++;} } um ein Bit auf eine '0' zu testen. leider funktioniert mein Code nicht. Gruß Siegfried
so funktioniert das nicht... Der '!' Operator macht eine logische Negierung, KEINE bitweise. what about
1 | if ( !(Testen TEST_BIT BIT_3) ) |
? oder:
1 | if ( (~Testen) TEST_BIT BIT_3) ) |
sollte auch funktionieren. Gruß Christian
Hallo, wie kann ich in der Simulation (am PC) einem Input Pin einen Wert zuweisen? Gruß Siegfried
hallo Christian, Danke für deine Infos. funtioniert. Besteht die Möglichkeit, den Editor von MPLAP mit dem UltraEdit auszutauschen? Gruß Siegfried
Siegfried Saueressig wrote: > Danke für deine Infos. funtioniert. Bitteschön. > Besteht die Möglichkeit, den Editor von MPLAP mit dem UltraEdit > auszutauschen? Ist mir nicht bekannt. Kann es mir auch nur schwer vorstellen, dass es vorgesehen/möglich ist. Gruß Christian
Hallo guten morgen, // #define TEST_BIT & #define BIT_0 0b00000001 #define BIT_1 0b00000010 #... if (Testen TEST_BIT BIT_0) Besteht die Möglichkeit, das "BIT_0" ein Zeiger ist. z.B. for (x=0; x<=7; x++) { if (Testen TEST_BIT x) { ... Code } } Diese überlegung würde mir Codezeilen sparen, da ich dann keine switch(x) Anweisung benötigen . Gruß Siegfried
Hallo, Habe folgendes eingebunden. // BitVariable[0] = 0b00000001; BitVariable[1] = 0b00000010; BitVariable[2] = 0b00000100; BitVariable[3] = 0b00001000; BitVariable[4] = 0b00010000; BitVariable[5] = 0b00100000; BitVariable[6] = 0b01000000; BitVariable[7] = 0b10000000; // BitVariable sind als Char deklariert. ... if ((PortPinOutput[Count_1]) TEST_BIT BitVariable[Count_2]) { ... } Soweit ich das in Debugger überprüft habe, funtioniert es. ist diese IF Zeile richtig, oder habe ich gemurkst.? Gruß Siegfried
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.