- LiFePO4 Speicher Test         
Seite 44 von 53 ErsteErste ... 344243444546 ... LetzteLetzte
Ergebnis 431 bis 440 von 524

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

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

    E-Bike
    Ahjo, vergleichen mit (tonleiter * 2) geht das so alleine erstmal nicht, wahrscheinlich auch logisch.
    Stell Dir mal vor wir hätten so ein 2 Bytes gespann:
    High 11000111 Low 00000000
    was passiert , wenn ich jetzt sbiw benutze ?
    wie sehen die Bytes aus ?
    Das ist ja eben mein Problem. Florian konnte mir das leider nicht erklären.

    Also wenn jetzt sbiw benutzt wird..hmm...kommt drauf an, wo der Z-Zeiger grad ist, oder? Der liest doch immer 2 Bits aus, ne? Hmm..sorry, keine Ahnung, ich kapiers nicht.

  2. #432
    Erfahrener Benutzer Robotik Einstein
    Registriert seit
    08.05.2005
    Ort
    Issum
    Alter
    53
    Beiträge
    2.236
    Warum soll er 2 Bytes rauslesen?

    Pass auf

    daten:
    .db 10,20,30,40,50,60

    ldi ZH,HIGH(daten * 2 )
    ldi ZL,LOW(daten * 2 )
    Der Z Zeiger zeigt auf den ersten Byte bei daten,
    wenn ich jetzt lpm mache erhalte ich eine 10 in den R0
    adiw ZL,1 , der Zeiger zeigt auf die 20
    nochmal adiw ZL,1 der Zeiger zeigt auf die 30
    jetzt mal adiw ZL,2 der Zeiger zeigt auf die 50
    sbiw ZL,1 der Zeiger Zeigt auf die 40
    sbiw ZL,1 der Zeiger Zeigt auf die 30
    ldi ZH,HIGH(daten * 2 )
    ldi ZL,LOW(daten * 2 ) er zeigt wieder auf die 10

    Dieses mal 2 kommt davon daß der Speicher Wortweise (2 Bytes) organisiert ist
    Nimm das einfach so hin, merke Dir nur daß da immer * 2 hinkommt
    Vielleicht findet sich hier jemand der das einfacher erklären kann,
    ich kann es nicht

  3. #433
    Erfahrener Benutzer Roboter-Spezialist
    Registriert seit
    29.07.2005
    Ort
    Berlin
    Alter
    40
    Beiträge
    289
    Ok, und das HIGH und LOW kommt dadurch, weil wir hier mit 16Bit arbeiten, richtig?
    Und wieso muss ich LOW mit cp vergleichen und HIGH mit cpc? Hab mir das ja auch schon alles im Simulator angeschaut und gesehen, wie sich das auch im SREG ändert, aber bin leider nicht dahinter gestiegen.

  4. #434
    Erfahrener Benutzer Robotik Einstein
    Registriert seit
    08.05.2005
    Ort
    Issum
    Alter
    53
    Beiträge
    2.236
    Also cp ist wie Du schon irgendwomal geschrieben hast in der Tat Subtrahieren, mit dem Unterschied daß die Inhalte unverändert bleiben, nur die Bits Im SREG Register entsprechend dem Ergebnis gesetzt werden.
    Wie Vergleicht man in der Mathe 2 Zahlen ??
    Wenn wir draufschauen und zwei Zahlen sehen, dann können wir sagen daß 10 gleich 10 ist oder 10 kleiner als 20 ist.
    Aber woher soll der AVR das wissen?
    Er kann nur eine Zahl von der anderen abziehen, und anhand des SREG exakt sagen welche kleiner größer oder halt ob beide gleich sind!

    Nehmen wir als Beispiel zwei gleiche Zahlen

    100 und 100

    wenn du jetzt sie in zwei register lädst und mit cp "behandelst"
    Verändern sie sich nicht, nur im SREG wird das Z Bit gesetzt
    was heißt daß das ergebnis 0 ist (klar 100 -100 = 0)

    so, wenn jetzt danach z.B. der befehl breq kommt schaut er nach ob Z Bit im SREG 0 oder 1 ist wenn 1 springt er, wenn 0 nicht das war doch einfach oder,
    so gleich machen wir des mit 16 Bit und cpc *schüttel*
    Du kannst auch die Zwei Zahlen mit verschiedenen Werten laden, und schauen wie sich die Bits im SREG verändern (ganz interresant sind Vorzeichen, Negativ und Übertragsflags

  5. #435
    Erfahrener Benutzer Roboter-Spezialist
    Registriert seit
    29.07.2005
    Ort
    Berlin
    Alter
    40
    Beiträge
    289
    Bis dahin hab ichs erstmal verstanden.
    Den Übertragsflag versteh ich nicht ganz. Ist das denn der Übertrag, den man auch aus dem schriftlichen rechnen kennt?

    [edit]
    Also nehmen wir mal die Zeilen hier:
    Code:
    ldi tmp, LOW  ((tonleiter1 * 2) + daten_laenge)	;vergleiche LOW-Byte 
       	cp ZL, tmp 
    	ldi tmp, HIGH ((tonleiter1 * 2) + daten_laenge)	;vergleiche HIGH-Byte 
    	cpc ZH, tmp 
    	brne pruefTonaus								;zu "pruefTonaus:" springen
    Nach der Zeile "cp ZL, tmp" wird doch gar nicht mit breq oder brne geprüft, wie das Ergebnis war, wozu vergleicht man dann eigentlich?

  6. #436
    Erfahrener Benutzer Robotik Einstein
    Registriert seit
    08.05.2005
    Ort
    Issum
    Alter
    53
    Beiträge
    2.236
    Du hast es erkannt!

    jetzt machen wir knüppeldick....

    machen wir jetzt 2 16 Bit Zahlen (naja eigentlich 10 aber wir brauchen jetzt 16 Bit um sie zu speichern)

    erste Zahl 1000 zweite Zahl 1001

    die passen ja nicht in 8 Bit rein
    also werden sie zerschlagen in High Byte und Low Byte tipe mal in Deinem Taschenrechner 1000 ein und wandle es in binär um, was kommt dabei raus ?
    1111101000 also werden sie so aufgeteilt High -> 00000011 Low -> 11101000
    und 1001 ?
    11111010001 High -> 00000011 Low->11101001

    und da wir Menschen sind und dezimale schreibweise voll geil finden wandeln wir uns das um ,
    die beiden Highs ergeben 3 juhu gleich!
    und Lows 232 und 233 naja da ist nix meh gleich

    so jetzt rechnen!

    cp 232,233 -> schaue was sich im SREG getan hat Vorzeichen, Halbübertrag,Negativ und Übertrag sind gesetzt,
    bis auf den Halbübertrag ist wohl klar oder?
    Bei Halbübertrag muß ich auch passen, was der zu sagen hat habe ich bis jetzt noch nicht raus vielleicht weiß der Florian das, oder sonst jemand
    aber die anderen Flags sind wohl klar oder ?

    Jetzt müssen wir noch die zwei Highs vergleichen, könnten ja auch anders sein, ABER
    wir müssen den Übertrag(auch Carry) mit in die Rechnung nehmen (wie Du schon sagtest schriftliches rechnen)
    und dazu ist der Befehl cpc (cp mit Carry)
    also 3,3 wäre eigentlich ja gleich, dann wäre nur Z SREG 1, aber da wir noch den Carry (der ja 1 ist) mit abziehen, haben wir ja, naja schau selber im Sim
    ich hoffe daß es jetzt doch etwas einfacher ist.

    Das bezieht sich auch auf add und adc! Genau dasselbe nur halt addieren

    P.S. Genauso wird auch mit Zahlen, die 24 32 und mehr Bytes haben verfahren...

    Ich weiß daß es schwer ist aber leider leider (man denke da an c if a>10000 ....)

    Aber Du wolltest ja selber auf der Hardwareebene programmieren

    Edit:
    Nach der Zeile "cp ZL, tmp" wird doch gar nicht mit breq oder brne geprüft, wie das Ergebnis war, wozu vergleicht man dann eigentlich? Think
    nach cp nicht aber nach cpc, ich hoffe daß jetz alles klar ist [-o<

  7. #437
    Erfahrener Benutzer Robotik Einstein
    Registriert seit
    01.11.2003
    Ort
    Freiburg im Breisgau
    Alter
    36
    Beiträge
    2.624
    Hallo ihr Eifrigen!
    Entschuldigt bitte, dass ich mich ein Wenig aus diesem Thread zurückgezogen habe, ich muss noch einiges Wichtiges erledigen und habe kaum Zeit hier mitzulesen!
    Seit mir bitte nicht böse! *hoff*

    Schaffst Du das auch ohne mich Sebastian? *dumme Frage, Du hast es ja sowieso fast hauptsächlich gemacht -> g*

  8. #438
    Erfahrener Benutzer Robotik Einstein
    Registriert seit
    08.05.2005
    Ort
    Issum
    Alter
    53
    Beiträge
    2.236
    Hallo Florian , ich hoffe es [-o<
    wir stoßen jetzt auf Sachen , die wirklich sauschwer für uns Menschen sind,
    aber ich hoffe, daß [-o<

    Aber um unser Werk zu vollenden werden wir Dich ja noch brauchen

    Du kennst Ja unser Ziel in dieser Übung

  9. #439
    Erfahrener Benutzer Roboter-Spezialist
    Registriert seit
    29.07.2005
    Ort
    Berlin
    Alter
    40
    Beiträge
    289
    Nette Erklärung, danke
    Es ist schon ein wenig klarer geworden, aber ich versteh immer noch nicht, wie ich herrausfinde, wann ich cp und wann ich cpc nehmen muss.
    Wenn ich zwei gleiche Zahlen habe und diese mit cpc vergleiche, dann sind alle Flags im SREG auf 0, also keines ist gesetzt.

  10. #440
    Erfahrener Benutzer Robotik Einstein
    Registriert seit
    08.05.2005
    Ort
    Issum
    Alter
    53
    Beiträge
    2.236
    aber ich versteh immer noch nicht, wie ich herrausfinde, wann ich cp und wann ich cpc nehmen muss.
    Ja wie ? immer bei Zahlen die 8 bit haben cp

    und bei zahlen die 16 und mehr die lows mit cp und den ganzen rest (meistens nur Highs)
    cpc

    genauso addieren mache mal sim und addiere mal zwei 16 bit zahlen,
    das ist einfacher zu verstehen wenn ergebnis von add also beide lows höher als 255 ist
    wir carry gesetzt und bei den highs machst Du adc also beide hight und den carry dabei
    (wie normales rechnen auf papier, wenn ergebnis höcher 9 wird eine 1 mit eine Zeile weiter mitgenommen die 1 ist halt auch carry)

    also bei lows cp sub oder add
    bei highs cpc sbc oder adc
    klar?

Seite 44 von 53 ErsteErste ... 344243444546 ... LetzteLetzte

Berechtigungen

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

Solar Speicher und Akkus Tests