Forum: Mikrocontroller und Digitale Elektronik Byte aus Einzelbits zusammenstellen / wie debuggen? (PIC18 und XC8)


von Stefan (Gast)


Lesenswert?

Hallo,

ich mache gerade die ersten Schritte in C (XC8 für PICs) und habe mal 
zwei Fragen.

1: wie baue ich denn am elegantesten ein Byte aus mehreren Bits 
zusammen? Ich mache es erstmal so:
1
#define bus0 PORTAbits.RA0
2
#define bus1 PORTAbits.RA1
3
#define bus2 PORTAbits.RA2
4
#define bus3 PORTAbits.RA3
5
#define bus4 PORTAbits.RA4
6
#define bus5 PORTCbits.RC4
7
#define bus6 PORTCbits.RC5
8
#define readBus bus6<<5 & bus5<<4 & bus4<<3 & bus3<<2 & bus1<<1 & bus0
9
char busStatus;
10
busStatus = readBus;

Ich bin mir aber nicht ganz sicher, ob das so geht bzw. ob es nicht eine 
bessere Lösung dafür gibt.

2. Wie kann ich denn am besten testen, ob mein obiger Code funktioniert 
wie er soll? Compilieren und brennen ist ja relativ umständlich, weil 
ich dann erst irgendeine Möglichkeit schaffen muss das Ergebnis 
anzuzeigen.

VG
Stefan

von Peter II (Gast)


Lesenswert?

kannst du nicht gleich
1
char busStatus = PORTC;

schreiben?

von Stefan (Gast)


Lesenswert?

Das wäre natürlich am schönsten, aber leider sind die Einzelbits auf 
PortA und PortC verteilt.

von Stefan (Gast)


Lesenswert?

kleine Korrektur:
ich meinte natürlich
1
#define readBus bus6<<5 | bus5<<4 | bus4<<3 | bus3<<2 | bus1<<1 | bus0
evtl. noch mit Klammern um die << Ausdrücke..

von Pandur S. (jetztnicht)


Lesenswert?

Die Entwicklungsumgebung, hier das MPLab hat doch einen Simulator...

: Bearbeitet durch User
von Stefan (Gast)


Lesenswert?

ja, den Simulator habe ich auch gerade entdeckt. Ich kann jetzt schonmal 
durch den Code durchsteppen.
Aber kann ich auf irgendwie während des debuggens angeben, dass ein 
Input Pin jetzt als High gelesen wird?

von Pandur S. (jetztnicht)


Lesenswert?

Ja, bei den IO kann man die Pins setzen

von Stefan (Gast)


Lesenswert?

Also ich mache es so:
Window-->Simulator-->Stimulus
Dort setze ich im Tab "Asynchronous" bei Pin "RA0" ein und bei Action 
"Set High"

Dann starte lass ich den Code bis zu einem Breakpoint laufen und drücke 
dann den grünen Run-Button im Stimulus Fenster ("Apply synchronous 
stimulus")

Im Fenster SFR steht PortA aber immer noch auf 0x00. RA0 wurde also 
offenbar nicht gesetzt.

Was läuft denn da falsch?

von Stefan (Gast)


Lesenswert?

Habs geklärt.
Der Fehler war, dass ich Binärzahlen ohne 0b am Anfang geschrieben habe. 
So wurde TRISA nicht wie gewollt beschrieben.
Jetzt funktioniert das debuggen und ich kann mir leichter selbst helfen 
:-)

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
Noch kein Account? Hier anmelden.