- MultiPlus Wechselrichter Insel und Nulleinspeisung Conrad         
Seite 3 von 53 ErsteErste 1234513 ... LetzteLetzte
Ergebnis 21 bis 30 von 524

Thema: Tutorial für alle Assembler-Anfänger _

  1. #21
    Erfahrener Benutzer Roboter-Spezialist
    Registriert seit
    29.07.2005
    Ort
    Berlin
    Alter
    39
    Beiträge
    289
    Anzeige

    Powerstation Test
    Hui, das ist aber nett

    Erstmal zum oberen Code. Was soll das hier genau bedeuten?
    Code:
    .org 0x000
       rjmp reset
    Man bräuchte doch nicht wirklich eine Funktion "reset:" oder?
    Vor allem, wieso springt der dann eigentlich irgendwann in "loop:" rein? steht ja nirgends oben was von "rjmp loop".

    Und was genau ist der Unterschied zwischen equ und def?

    Sorry, für die dummen Fragen, aber bin ja neu im Gebiet

    Den zweiten Code schau ich mir an, wenn ich den ersten perfekt behersche

    Gruß
    Thomas

    So, nun erstmal was essen

  2. #22
    Erfahrener Benutzer Robotik Einstein
    Registriert seit
    08.05.2005
    Ort
    Issum
    Alter
    52
    Beiträge
    2.236
    Sorry, für die dummen Fragen, aber bin ja neu im Gebiet Zwinkern
    Es gibt keine dummen Fragen, das kennst Du ja.

    Ich lege Dir wirklich den oben genannten Link von mir ans Herz, es ist besser als 1000
    Bücher !
    Ich glaube , es wäre doch besser, wenn ich den erste Code auch komentiert hätte
    Also ich versuche Dir das in ein paar Worten zu erklären.
    Ich hoffe, daß es mir gelingt


    Erstmal zum oberen Code. Was soll das hier genau bedeuten?
    Code: [View More of this Code] [View Even More of this Code] [View Less of this Code] [Select All of this Code]

    .org 0x000
    rjmp reset

    Man bräuchte doch nicht wirklich eine Funktion "reset:" oder?
    In diesem einfachem Beispiel hast Du vollkommen recht das muß hier nicht sein.
    Aber sobald Du mit Interrupts anfängst, kommst Du nicht drumherum.

    .org 0x000
    rjmp reset
    soll soviel heißen daß in Flashspeicher(da wo das Programm gespeichert ist)
    an der 0x000 Stelle den Befehl rjmp reset schreiben soll.
    Und nachdem Du Deinen AVR einschaltest, fängt er immer an der adresse 0x000
    an zu laufen.
    Mithin springt er sofort zum label reset.
    Und im reset kommen alle Anfangsfeierligkeiten rein, Register umbenennen, irgendwelche
    Werte zuweisen, Timer UART, TWI usw einrichten, und und und.



    Vor allem, wieso springt der dann eigentlich irgendwann in "loop:" rein? steht ja nirgends oben was von "rjmp loop".
    Der springt garnicht in den loop rein, sondern gleitet ganz sanft darein,
    warum auch nicht? nachdem er die letzte Zeile im reset abgearbeitet hat,
    geht er einfach in die nächste Zeile über, die halt loop heißt,
    loop: ist auch keine Funktion oder sowas, es ist einfach nur ein Label um diese Speicherzelle später besser zu erreichen.

    Anmerkung: Du darfst nicht in Kategorien von C oder Bascom denken, es gibt keine
    Funktionen der Art wie in Hochsprachen beim Assembler!
    Der µC fängt bei der Adresse 0x00 an und geht Speicherzelle für Speicherzelle nach unten,(wenn er kein jmp oder call findet) ich hoffe das ist jetzt klar.

    Und was genau ist der Unterschied zwischen equ und def?
    das ist einfach erklärt: def brauchst Du um Register unzubenennen, es ist wohl einfacher zu schreiben : meinregister als : R16 zum Beispiel
    Da sagst Du dem Assembler : überall wo ich meinregister stehen hab, mein ich eigentlich R16

    equ braucht man um irgendwelche Werte zuzuweisen z.B.

    .equ LED1 = PD4
    Jetzt fragst Du Dich, wo da PD4 ein Wert ist, was?
    wenn Du Dir die "m8def.inc" anschaust, findest Du irgendwo folgende Zeile:
    .equ PD4 = 4
    mithin heißt es auch LED1 = 4

    und wozu das ganze ?
    Es ist wieder einfacher zu schreiben sbic PORTD,LED1 als sbic 0x12,4 oder ?
    zu 0x12 Suche in "m8def.inc" nach PORTD dort steht
    .equ PORTD = $12 ($12 oder 0x12 bedeutet daß es eine hexzahl ist)
    .equ meinezeit = 10000
    heißt wiederrum überall wo meinezeitsteht meine ich eigentlich 10000

    verstanden ?

    So, soviel zu meinem minitutorial für Assembler
    Jetzt gehe ich essen


    P.S. Sollte ich irgendwas geschrieben haben, was nicht so ganz stimmt, oder besser ausgedrückt werden könnte, möge mich hier jemand korigieren.

    Aber wie gesagt, der link von mir, soll Deine Assemblerbibel werden!

    Gruß Sebastian

  3. #23
    Erfahrener Benutzer Roboter-Spezialist
    Registriert seit
    29.07.2005
    Ort
    Berlin
    Alter
    39
    Beiträge
    289
    Erstmal nenn großes Dankeschön an dich, dassde dir so viel Mühe mit mir gibst
    Die Seite ist echt gut. Ich merk auch schon, dass ich mich mehr mit Interrupts beschäftigen muss, ne?
    Das mit PORTD und so, also dass die in der include-Datei definiert sind, weiß ich schon, versteh aber leider nicht wirklich den Sinn, von PD4. Spricht PD4 den 4 Pin von PortD an, oder ist PD4 nur sone Art "integer" mit der Zahl 4?
    Nach der Zeile "PORTD, LED1", wobei ja LED1 = PD4 = 4 ist, würde ich auf das zweite tippen. Also das PD4 nur den Wert "4" wiedergibt, oder?

    So, nun werd ich den Code mal abtippen (davon lern ich am meisten) und dann veränder ich immer mal wieder was, damit ich seh, was sich verändert

  4. #24
    Erfahrener Benutzer Robotik Einstein
    Registriert seit
    08.05.2005
    Ort
    Issum
    Alter
    52
    Beiträge
    2.236
    Du mußt Dir vor den Augen halten, daß ein Port sozusagen ein Byte darstellt
    Ein Byte -> 8 Bits bei PortD kann man das ganz gut sehen. Man zählt immer von
    rechts nach links und man Fängt immer bei null an:

    PortD -> 0 0 0 0 0 0 0 0
    in Pin augedrückt PB7 PB6 PB5 PB4 PB3 PB2 PB1 PB0
    damit ergeben sich 7 6 5 4 3 2 1 0
    in zwier Potenz 128 64 32 16 8 4 2 1

    mithin heißt ein Ausdruck wie sbi PORTD,PD4
    setze am PORTD das Bit 4 mit dem Ergebnis 00010000

    Bedenke daß man immer bei null anfangen muß.

    Wie Du siehst ist es für Dich einfacher dem assembler zu sagen, daß Du PD4 setzen willst, als erstmal anfangen zu zählen, um welchen bit es sich handelt.

    Gruß Sebastian

    P.S. Na ja, früher oder später kommst Du um die interrupts nicht rum, aber
    glaube mir, sie sind einfacher, als Du denkst.
    Hauptsache Du begreifst erstmal, wie der Programmablauf funktioniert und was die
    Ganzen Ports und Pins zu sagen haben

  5. #25
    Erfahrener Benutzer Roboter-Spezialist
    Registriert seit
    29.07.2005
    Ort
    Berlin
    Alter
    39
    Beiträge
    289
    Jo, das mit den Ports und Pins hab ich denk ich so weit drauf (wenn man das so nennen darf *g*)
    Ich lasse grad den ersten Code debuggen und gehe jeden Schritt einzeln durch, klingt mir alles logisch, aber ob ich selbst drauf gekommen wäre?...

    Eine Frage aber noch zu der Zeile:
    sbr status, (1<<sperre)

    Also was die Zeile macht, ist mir klar, in das Register status (r17) wird eine 1 an Bit 7 gesetzte --> 10000000
    Aber das "(1<<sperre) ist mir nicht ganz klar. Die 1 wäre hier bei sbr logisch, da man eine 1 setzte, aber bei cbr kommt ja auch die 1 im Befehl vor.
    Wie gesagt, die Wirkung der Befehle versteh ich, aber man will ja auch wissen, wieso man das genau so schreiben muss

    Gruß
    Thomas

  6. #26
    Erfahrener Benutzer Robotik Einstein
    Registriert seit
    08.05.2005
    Ort
    Issum
    Alter
    52
    Beiträge
    2.236
    Ich habe mir schon gedacht, daß da so eine Frage kommt,
    da ich jetzt noch eine rauche, bevor ich haja geh kurz eine Antwort.

    also dieses Konstrukt 1<<sperre (schaue mal bei .equ sperre = 7) bedeutet nichts
    anderes als 1<<7
    das heißt schreibe in Register status eine 1 womit der Zustand von status
    so aussieht : 00000001
    und dieses <<7 heißt und verschiebe es um 7 (.equ sperre = 7) Stellen nach links.
    Jetzt ist aus 00000001 10000000 geworden klar ?
    sbr sperre,(1<<status) -> sbr sperre,b10000000 oder 128 oder 0x80 je nach Zahlensystem

    dieses 1 bedeutet nicht einschalten sondern ein bit
    Du hast sicher ein cbr status,(0<<sperre) erwartet, oder ?
    Das wäre falsch, weil cbr möchte wissen welchen bit es löschen soll deswegen auch
    (1<<sperre) klar ?

    Solche Konstrukte wirst Du noch sehr oft sehen, aber man gewöhnt sich daran,
    es ist wieder da um Dir das Leben einfacher zu machen, schau, es kann mir im endeffekt wurst sein, ob sperre = 7 oder 5 oder 3 is,t das wird einfach einmal am Anfang festgelegt
    und beim Progen brauch ich mir kein Kopf darum machen welche wertigkeit es hat, klar?

    Was ich persönlich blöd finde, daß ich bein sbr und cbr den wert k255 setzen muß also
    (1<<sperre) aber bei cbi und sbi ein sbi PORTD,sperre also b7 reicht , genauso beim Vergleichen ein b7 also ohne (1<<blabla),
    mit der Zeit gewöhnt man sich dran und nimmt es einfach so hin, aber da hatte ich anfangs auch Fehler gemacht.

    Am besten druckst Du Dir die Befehlstabelle von www.avr-asm-tutorial.net aus,
    dann hast Du alle Befehle immer zur Hand, kannst Sie überall mitnehmen,
    ich hab die besten Einfälle aufm Klo

    Ich hoffe, Du bist wieder ein Stück weitergekommen.

    Gruß Sebastian

  7. #27
    Erfahrener Benutzer Roboter-Spezialist
    Registriert seit
    29.07.2005
    Ort
    Berlin
    Alter
    39
    Beiträge
    289
    Oh ja, nun hab ich das auch verstanden

    Aber ich glaub, du hast in deinen Kommentaren Fehler drinne.
    Beispielsweise hier: sbi PORTD,LED ;Schalte LED aus
    Er "setzte" das Bit doch, also auf 1. Da schaltet sich die LED doch dann auch ein.
    Denn bei 0b00000001 leuchtet ja auch die LED an Bit 0.
    Hoffe, das ist so richtig

    So, nun geh ich auch inne Heia

    Nacht
    Thomas

  8. #28
    Erfahrener Benutzer Robotik Einstein
    Registriert seit
    08.05.2005
    Ort
    Issum
    Alter
    52
    Beiträge
    2.236
    Aber ich glaub, du hast in deinen Kommentaren Fehler drinne.
    Ich freue mich, daß Du die Code auch Debuggen tust.
    So versteht man auch, was da abgeht.

    Ne Du, es ist kein Fehler, Meine Dioden habe ich gegen VCC geschaltet, d.h. wenn Pin Low ist, leuchten sie.
    Es wird meistens so verschaltet.

    Gruß Sebastia

  9. #29
    Erfahrener Benutzer Roboter-Spezialist
    Registriert seit
    29.07.2005
    Ort
    Berlin
    Alter
    39
    Beiträge
    289
    Hmm...kommt nun vlt. ein bißchen doof, aber was ist genau gegen VCC? gegen die normale Schaltrichtung?
    Dann sind meine also nicht gegen VCC geschaltet, denn wenn bei mir ne 1 ist (also high) dann leuchtet die LED.

    Ggruß
    Thomas

  10. #30
    Erfahrener Benutzer Robotik Einstein
    Registriert seit
    01.11.2003
    Ort
    Freiburg im Breisgau
    Alter
    35
    Beiträge
    2.624
    Huuuiiii, hallo Thomas und Sebastian!
    Da kommt der Moderator mal wieder zu spät! ;o)
    Danke für die Mühe, die Du, Sebastian, Dir gibst!
    Ich denke, dass dieser Thread sehr hilfreich für Anfänger ist und deswegen markiere ich ihn mir mal! ;o)

    @ Thomas:
    Wenn der Sebastian mal nicht da ist, dann kannst Du mich auch gerne ansprechen! *assemblernachwuchs muss gefördert werden ;o)*

Seite 3 von 53 ErsteErste 1234513 ... LetzteLetzte

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •  

LiFePO4 Speicher Test