MPLAP und C18

OP #909159
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
#909265
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
OP #909423
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
#909471
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:
1
if (bit_test(Testen, 4) == 0x10)

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

Gruß
Christian
OP #909494
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
OP #909505
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
#919534
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
OP #921892
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
OP #922056
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

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren