mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik MPLAP und C18


Autor: Siegfried Saueressig (dieleena)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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

Autor: C. H. (_ch_)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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

Autor: Siegfried Saueressig (dieleena)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo Christian,
Welchen Editor verwendest du?
Gruß Siegfried

Autor: C. H. (_ch_)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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

Autor: Siegfried Saueressig (dieleena)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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

Autor: C. H. (_ch_)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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:
if (bit_test(Testen, 4) == 0x10)

oder
if ( (bit_test(Testen, 4) >>4) == 1)

Gruß
Christian

Autor: C. H. (_ch_)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
oder du machst es ganz anders:
#define TEST_BIT    &
#define BIT_0       0b00000001
#define BIT_1       0b00000010
//..etc


if (Testen TEST_BIT BIT_0)
{ ...}

sollte funktionieren.

Gruß, schönes Woe
Christian

Autor: Siegfried Saueressig (dieleena)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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

Autor: Siegfried Saueressig (dieleena)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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

Autor: Siegfried Saueressig (dieleena)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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

Autor: C. H. (_ch_)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
so funktioniert das nicht...
Der '!' Operator macht eine logische Negierung, KEINE bitweise.

what about
if ( !(Testen TEST_BIT BIT_3) )
?

oder:
if ( (~Testen) TEST_BIT BIT_3) )
sollte auch funktionieren.


Gruß
Christian

Autor: Siegfried Saueressig (dieleena)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo,
wie kann ich in der Simulation (am PC) einem Input Pin einen Wert 
zuweisen?
Gruß Siegfried

Autor: Siegfried Saueressig (dieleena)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
hallo Christian,
Danke für deine Infos. funtioniert.

Besteht die Möglichkeit, den Editor von MPLAP mit dem UltraEdit 
auszutauschen?
Gruß Siegfried

Autor: C. H. (_ch_)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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

Autor: Siegfried Saueressig (dieleena)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo Christian,
Danke für die schnelle Antwort.
Gruß Siegfried

Autor: Siegfried Saueressig (dieleena)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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

Autor: Siegfried Saueressig (dieleena)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.