Forum: Mikrocontroller und Digitale Elektronik PIC18F2550/PIC16F877 Port-Adressen in C?


Announcement: there is an English version of this forum on EmbDev.net. Posts you create there will be displayed on Mikrocontroller.net and EmbDev.net.
von Synthron (Gast)


Lesenswert?

Hallo allerseits,

ich ich von meinem Ausbilder eine Unmenge an PIC18F2550 und PIC16F877 
bekommen und würde die gerne in C programmieren. Jetzt hab ich die 
Frage, wo ich die Adressen für die Ports herbekomme. Ich hab schon 
gegoogelt und seitenweise Datenblätter durchforstet, aber nix 
brauchbares gefunden. Kann ich in meinem C-Programm einfach schreiben 
RD7 oder RA3, oder muss ich den Hex-Wert vom Port angeben, welche ich 
nicht finden konnte?

danke schonmal für die Hilfe

lg

Synthron

PS: als Programmierumgebung benutz ich aus Gewohnheit Notepad++ und 
Ride6

von Dominic A. (neo123)


Lesenswert?

Also unter Ride6 finde ich nur irgendwelche Schuhe. Ich würde dir MPLAB 
X und den XC8 Compiler empfehlen. Ist beides kostenlos.
Die Ports kann man folgendermassen adressieren:
1
LATBbits.LATB5

von Synthron (Gast)


Lesenswert?

ah cool, danke.
Und die anderen wären zum Beispiel
LATAbits.LATA4
?

von stefan (Gast)


Lesenswert?

LatA.4 sollte auch gehen.

von Volker S. (vloki)


Lesenswert?

Synthron schrieb:
> Und die anderen wären zum Beispiel LATAbits.LATA4?
Mehr oder weniger alle Bits können so adressiert werden.
Wenn der XC8 installiert ist, dann mal im Verzeichnis 
../xc8/v3.xy/include/ den entsprechenden Header öffnen. Der wird (über 
tausend Ecken) über #include <xc.h> eingebunden und da sind dann alle 
Register und Bits deklariert.


stefan schrieb:
> LatA.4 sollte auch gehen.
Hab ich noch nie gesehen. Welcher Compiler?

: Bearbeitet durch User
von stefan (Gast)


Lesenswert?

Z.b. MikroC Compiler

von Bernd K. (movin)


Lesenswert?

Synthron schrieb:
> Ich hab schon
> gegoogelt und seitenweise Datenblätter durchforstet, aber nix
> brauchbares gefunden.

http://pic-projekte.de/wordpress/?p=133#Speziell_fur_PIC

bitte sehr...

eigentlich hilft die ganze Seite zum Einstieg. Allerdings gibt es auch 
hier im Forum links bei den Artikeln ausreichend Beispielcode.

mfg

: Bearbeitet durch User
von Synthron (Gast)


Lesenswert?

Danke schonmal alle für die Hilfe,

ich hab neulich bei nem Kumpel gesehen, dass er seine Ports als ganzen 
Port ansteuert mit
sbit at P2
kann man so auch ansteuern und wenn ja, ist das Compilerabhängig?

von Stefan (Gast)


Lesenswert?

Vielleicht hat er dem Port einen Namen gegeben.
Oder war eine andere µC Familie.

von Volker S. (vloki)


Lesenswert?


von Synthron (Gast)


Lesenswert?

Moin moin,
ich hab jetzt mal angefangen ein Testprogramm für den PIC16F876 zu 
schreiben und die Ausgabe an einem Pin funktioniert einwandfrei. 
Allerdings hab ich jetzt schon Probleme mit dem Lesen eines Ports. Weder 
über LATABits.RA2 noch über RA2 direkt funktionierts. folgend mal der 
Quellcode auf Pastebin. Da relativer Anfänger im Programmieren bin, nehm 
ich auch gerne konstruktive Kritik entgegen ;)

http://pastebin.com/qZWUjEyx

von Synthron (Gast)


Lesenswert?

btw: Programmierumgebung MPLAB X IDE mit XC8-Compiler, Programmiergerät: 
selbstgebautes PICKit2

von Volker S. (vloki)


Lesenswert?

Schreiben LATAbits.LATA2

Lesen.  PORTAbits.PORTA2

: Bearbeitet durch User
von Stefan (Gast)


Lesenswert?

Scahu mal ins Datenblatt und schau mal
ob die Ports auf Digital gesetzt werden müßen.
Weis jetzt nicht wo die beim anschalten jetzt
liegen.

von Volker S. (vloki)


Lesenswert?

Volker S. schrieb:
> Schreiben LATAbits.LATA2

Sorry, der PIC16 hat vermutlich gar kein LATch.

Stefan schrieb:
> Scahu mal ins Datenblatt
Eigentlich immer die schnellste Methode ;-)

von Stefan (Gast)


Lesenswert?

Ja müßen umgeschaltet werden. Gerade selber gefunden.
Dafür ist das ADCON1 Register zuständig.

von Synthron (Gast)


Lesenswert?

alles klar, und wie genau schalt ich die dann auf Digital?

von Synthron (Gast)


Lesenswert?

fubktioniert das auf diese Weise?

; ADC einschalten
    BSF      ADCON0, 1        ; ADON=0

von Stefan (Gast)


Lesenswert?

Im ADCON1 Register das entsprechende Bit setzen.
Z.B. ADCON1.xxxx = 1
Sollte gehen.
Für xxx das entsprechende Register setzen.

von Stefan (Gast)


Lesenswert?

Das ist keine C Sprache.

von Synthron (Gast)


Lesenswert?

ja, das hab ich nach posten auch gemerkt, dass es Assembler ist...
hier hab ich was gefunden:

ADCON1 = 0b00001111;//configuring all analog port to digital

sollte so eig auch funktionieren, oder?

von Stefan (Gast)


Lesenswert?

Ja wie du den Wet schreibst ist dir überlassen.
Ob Binär, Hexadezimal oder Dezimal.
Hauptsache du weist welche Register du gesetzt hast. Nach meiner Methode
siehst du direkt welches Register gesetzt wurde.
Aber kann man machen wie man will.

von Christian M. (Gast)


Lesenswert?

Synthron schrieb:
> Unmenge an PIC18F2550 und PIC16F877 bekommen

Hallo Synthron,

würdest Du welche gegen Geld abgeben?

Gruss Chregu

von Synthron (Gast)


Lesenswert?

alles klar, vielen Dank!
ich hab jetzt mal versucht, das Datenblatt zu verstehen und hab 
rausgefunden, dass über ADCON1 = 0x06 alle Analogpins digital geschalten 
werden. jetzt funktionierts auch wie geplant.

von Synthron (Gast)


Lesenswert?

Hallo chregu,

auch wenns privat für mich relativ viele sind (Unmenge war etwas 
übertrieben, aber es sind dennoch reichlich. Momentan noch unbenutzt 34 
877er und 45 2550er), allerdings ging diese Abgabe mit der Bedingung 
mit, dass ich sie nicht verkaufen darf, da diese noch offiziell über 
meine Firma laufen. Außerdem hab ich noch einige größere Projekte mit 
den PICs vor, weshalb ich noch nicht weiß, wie viele davon am Ende übrig 
bleiben. Unter anderem geplant sind noch eine Gewächhaussteuerung, weil 
mein AVR bei den Umgebungen versagt, da sind PICs etwas stabiler was 
Feuchtigkeit anbelangt (hab ich so schon getestet), sowie Binäruhren, 
Quadkopter, diverse kleine Automatisierungen und eine Lichtorgel für 
mein 3D-Drucker etc pepe.
nach meiner Kalkulation bleiben nach all dem noch knapp 8-10 je Sorte 
über, aber wer weiß was mir noch spontan alles einfällt ;)

Also zusammengefasst: aus moralischen und privaten Gründen muss ich 
leider nein sagen.

von Christian M. (Gast)


Lesenswert?

OK, kein Problem! Danke für die Antwort!

Gruss Chregu

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]
  • [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.