Forum: Mikrocontroller und Digitale Elektronik PIC Neuling und kann keine ports schalten


von Michael Thom (Gast)


Lesenswert?

Moin an Alle!

Ich habe ein PIC 16f877 auf ein PICDEM 2 PLUS DEMO Board. Mit dem 
Progrannieren habe ich jetzt eine Anfangsschwierigkeit. Denn in meinen 
kleinem C - Programm habe ich die "#include <16f877.h>" eingebunden. 
Beim  compileren geht noch alles gut. Doch habe ich nicht mein Ergebnis 
bekommen.

Mein Programm:

#include <16f877>

int main()
{
PORTD = 0xFF;

return 0;
}

Nach meiner Logik müsste an den einzelnen PIN's jeweils 5 V anliegen, 
doch das tut es nicht!!! Warum? Habe ich einen gravierenden Schritt 
vergessen!?

Grüße

Taz

von Atlas (Gast)


Lesenswert?

Hallo,

PortD ist nach dem Start als Input geschaltet.
IM TRISD Register das Port zuvor auf Output umschalten.

MfG

von Michael Thom (Gast)


Lesenswert?

Hey!

Und wie schalte ich denn ein PORTD (zum Beispiel) als Ausgang?

MfG

von Atlas (Gast)


Lesenswert?

In Assembler geht das so:

BSF  STATUS,RP0
MOVLW  B'00000000'
MOVWF  TRISD    ;RD ports output
BCF  STATUS,RP0

Wie das in C aussieht musst Du ausprobieren.

von Michael Thom (Gast)


Lesenswert?

Hey,

also wird wird TRISD der Port D mit b00000000 belegt und die PIN's als 
Ausgang geschaltet. Dann sollte es in C eigendlich so aussehen:

...
TRISD = 0x00;
...

MfG

Taz

von Alex Bürgel (Gast)


Lesenswert?

Genau:

1. TRISD = 0x00; //alle Pins des D-Ports sind Outputs (0)
2. PORTD = 0xFF; //alle Output-Pins sind aktiviert
3. while(1);     //damit der µC etwas zu tun hat.

von Michael Thom (Gast)


Lesenswert?

Hi,

Klappt irgendwie noch nicht? Habe die Headerdatei pic1687x.h genommen. 
Da die anderen 16f877.h sich beim compilieren nicht öffen liesen laut 
output in MPLAB.
Mein CODE:

#include <pic1687x.h>

int main(void)
{
TRISD = 0x00;
PORTD = 0x00;

while(1)
{}
return 0;
}

MfG

von Michael Thom (Gast)


Lesenswert?

Hi,

habe ich vielleicht eine wichtige Zeile ausgelassen?

Vielleicht könnte mir jemand sein erstes Test-Programm schicken wo ein 
Pin oder Port getestet wurde die läuft auf einem 16f877. Würde dann die 
C - Datei abgleichen und somit meinen Fehler vielleicht finden.

MfG

Taz

von HildeK (Gast)


Lesenswert?

Ich habe zwar kein Ahnung vom PIC, aber:
oben hast du
           PORTD = 0xFF;
geschrieben.
Nachdem man dir sagte, dass der Pin noch auf Output muss, hast du
           TRISD = 0x00;
           PORTD = 0x00 ;
daraus gemacht und wunderst dich, dass die Pins auf LOW sind ...

von Michael Thom (Gast)


Lesenswert?

Moin!

Es lag nicht an den Port! Ich wusste, dass ich sie damit auf Low setze. 
So wollte ich es haben. Das Problem war die "#include" Anweisung. Hat 
sich also erledigt.

Danke an Alle die mir geholfen haben.

MfG

Taz

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.