www.mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik PIC BRA vs GOTO


Autor: Kijan (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hi leutz
Ich wollte mein Programm von einem 18F auf ein 16F portieren (aus 
Kosten- und Platzgründen).
Jetzt bin ich grad beim Überprüfen des Befehlssatzes.
Ich hab in meinem Programm BRA benutzt. Dieses hat der 16F aber nicht.
GOTO scheint das gleiche zu machen. Es soll irgendwie BRA ein relativer 
Sprung und GOTO ein absoluter Sprung sein. Und BRA hat ein Wort und GOTO 
2.

Aber was heißt das für mich? Ich hab den Unterschied nicht ganz 
verstanden.
Währe schön wenn mich jemand aufklären könnte.

MFG
Kijan

Autor: A. K. (prx)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Das ROM der PIC16 ist banked. PIC18 nicht. D.h. PIC18 kann mit GOTO/CALL 
überall hin springen, PIC16 nicht. Dort muss für Sprünge zwischen den 
Banks vor dem Sprung die Ziel-Bank in Form irgendwelcher Statusbits 
definiert werden.

http://www.sprut.de/electronic/pic/grund/adress.htm#call

Das hat sehr interessante Konsequenzen für die Organisation des Codes, 
d.h. die Verteilung der Funktionen auf die Banks (Pages) muss sorgfältig 
geplant werden.

Wem Zeit Geld ist, der steigt nicht von PIC18 auf PIC16 um, es sei denn 
es geht um grosse Stückzahlen.

Autor: Kijan (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hi
Danke für deine Antwort.
In dem Beispiel steht was von ORG und ne Adresse.
Ich hab bei meinen Sprüngen momentan kein ORG. Müsst ich jetzt zu jeder 
Marke so einen ORG befehl packen? Um dann somit zu sagen wo sie liegen?

Autor: A. K. (prx)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ich denke, du solltest mal PIC16 Assembler von Grund auf lernen, bevor 
dur die Portierung durchführst. Komplett frei von jeder Kenntnis sowohl 
der PIC16 als auch der PIC18 ist das ziemlich aussichtslos.

Die PICs sind so konstruiert, dass man mit endlichem Aufwand vom Kleinen 
zum Grossen migrieren kann. Umgekehrt wird hart.

Autor: Kijan (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ganz ohne Kenntnisse bin ich ja nicht. Also zumindest was 18F angeht. 
Habe das Programm ja selber geschrieben. Nur wollte ich es halt auf den 
16F portieren da der eigentlich ausreicht.
Klar werd ich mich da noch mal reinknien müssen in den 16F.
Ich wollt ja erst mal nur wissen warum es halt 2 Befehle für einen 
Sprung gibt. Warum hat der 18F eigentlich GOTO und dazu noch BRA.

Autor: Peter Dannegger (peda)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
A. K. schrieb:
> Die PICs sind so konstruiert, dass man mit endlichem Aufwand vom Kleinen
> zum Grossen migrieren kann. Umgekehrt wird hart.

Ja, das ist ein großer Nachteil, daß die PICs so große Unterschiede im 
Befehlssatz haben.

Bei den AVRs haben dagegen alle vom 6-Pinner bis 100-Pinner den gleichen 
Befehlssatz (außer dem MUL-Befehl bei >= 28-Pinnern).


Peter

Autor: A. K. (prx)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Kijan schrieb:

> Warum hat der 18F eigentlich GOTO und dazu noch BRA.

Platzersparnis. BRA ist kürzer, dafür ist die Reichweite geringer.

Autor: A. K. (prx)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Kijan schrieb:

> In dem Beispiel steht was von ORG und ne Adresse.

Das ORG steht dort im Beispiel nur als Indikator für den Wert einer 
Zieladresse ausserhalb der aktuellen Page/Bank.

Autor: Kijan (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
A. K. schrieb:
> Kijan schrieb:
>
>
>
>> In dem Beispiel steht was von ORG und ne Adresse.
>
>
>
> Das ORG steht dort im Beispiel nur als Indikator für den Wert einer
>
> Zieladresse ausserhalb der aktuellen Page/Bank.

Also wenn ich das richtig verstehe muss ich halt immer die richtige Bank 
ansprechen zu der ich hinspringen will.
Wenn aber dieser ORG Befehl eine Adresse außerhalb der aktuellen Bank 
angiebt, muss ich dann immer noch die richtige Bank ansprechen?

Autor: A. K. (prx)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Im Sprut-Link steht es doch haarklein drin was man tun muss. Man muss 
wissen, ob das Sprungziel in der aktuellen Bank oder einer anderen Bank 
liegt. Befindet es sich in einer anderen Bank, dann muss man vor dem 
Sprung (GOTO/CALL) die PCLATH Bits entsprechend setzen.

Noch detaillierter gibt's das nur noch bei PIC Spezialisten - ich selbst 
bin keiner, ich habe nur einen ungefähren Überblick über deren 
Arbeitsweise. Bei fernando-heitor.de gibt es mehr davon als hier.

Autor: Peter Dannegger (peda)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ich würde das PCLATH immer setzen, dann ist der Code verschieblich.
Ansonsten, Du fügst irgendwo was ein und es kracht.


Peter

Autor: Master Snowman (snowman)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
nur mal eine zwischenfrage: hast du auch mal den blick zu den PIC24er 
gewagt? die gibt's auch ganz schön klein und sind oft preislich 
attraktiver als die 18er, jedoch 3.3V ..ist nur so eine idee ;-)

Autor: Stephan_ (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Warum willst Du den von PIC18 zu PIC16 wechseln? Platzgründe: die 18er 
gibt es auch mit 18 und 20 PINs und teuer sind die kleinen 18er auch 
nicht. Dafür viel mächtiger und einfacher zu programmieren. Die Arbeit 
die Du ins Umprogrammieren steckst kostet Dich einige Zeit!

Autor: Kijan (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Master Snowman schrieb:
> nur mal eine zwischenfrage: hast du auch mal den blick zu den PIC24er
>
> gewagt? die gibt's auch ganz schön klein und sind oft preislich
>
> attraktiver als die 18er, jedoch 3.3V ..ist nur so eine idee ;-)

Naja die Hardware ist im Moment auf 5V ausgelegt daher würd ich gern 
dabei bleiben :)

Stephan_ schrieb:
> Warum willst Du den von PIC18 zu PIC16 wechseln? Platzgründe: die 18er
>
> gibt es auch mit 18 und 20 PINs und teuer sind die kleinen 18er auch
>
> nicht. Dafür viel mächtiger und einfacher zu programmieren. Die Arbeit
>
> die Du ins Umprogrammieren steckst kostet Dich einige Zeit!

Der Hauptgrund ist, dass ich in meiner Prüfung wahrscheinlich mit dem 
16F84 konfontriert werde, und somit währe dass dann schon mal als erste 
Schritte dahingehend zu sehen.

Autor: Kijan (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ich habs mir noch einmal überlegt.
Das mit den kleineren 18F hab ich nicht gewusst...
Ich werd es wohl mal mit dem 18F320 probieren.
Mal schauen in wie weit ich da was ändern muss.

Autor: PIC (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ich würde auf deiner stelle mit C anfangen. Nur vorteile ;-)
Compiler wie Hi-Tech PIC10/12/16 sind da die richtigen, aber die STD 
version vervenden, die PRO haben vielzuviele BUGs, Wenn du aber erstmal 
lernen willst, dann würde ich dir MikroC Pro vorschlagen.
Später kannst du dir aussuchen :
Hitech,
C18/C30
oder MikroC

Autor: Master Snowman (snowman)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
@Kijan: wenn du platz sparen willst und ein exakter takt nicht so 
wichtig ist, nimm einen der nach dem 'PIC18F' vier stellen hat z.b. 
PIC18F1320, die haben meist/immer(?) einen internen 8MHz-oszillator.
hier eine übersicht:
http://www.microchip.com/ParamChartSearch/chart.as...

Autor: Jens (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
@ Kijan (Gast)

Mit GOTO kannst du die Sprungweite von BRA auf jeden Fall abdecken. 
Allerdings würde ich nicht mehr downgraden wollen. Es sind zuviele Ecken 
und Kanten zu umschiffen. Register sind anders belegt und werden anders 
angesteuert (Stichwort Banking), etc.

Ansonsten viel Erfolg beim downgraden. Das "viel Spaß" verkneife ich mir 
mal, denn Spaß macht es bestimmt keinen.

Autor: stepp64 (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Und dann noch auf den 16F84 den Großvater der PICs. Der bietet so 
ziemlich gar nichts und es wird wohl sehr schwer werden ein 18F Programm 
auf diesen zu portieren. Du wirst ja bei den 16F nicht nur mit dem 
Pageing konfrontiert sondern auch noch mit dem Banking. Weiterhin fehlen 
dir ca. 40 Befehle, da die 16F nur ca. 35 Befehle kennen und die 18F 
knapp 80. Du hast weniger Timer zur Verfügung, Speicher (sowohl RAM als 
auch Flash) sind ebenfalls wesentlich weniger. Und es gibt Fallen, 
welche bei den 18F beseitigt wurden (z.Bsp. die Portfalle). Also das 
sind schon einige Nachteile.

Wenn du aber üben willst, dann würde ich mir den 16F84 nehmen und damit 
ein paar kleinere Programme schreiben.

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.