Hallo zusammen Ich habe vor kurzem damit begonnen mit AVR's herumzuspielen und habe dazu ein STK500 und Atmega8 gekauft. Atmega8 einfach da sie im tutorial meistens auch benutzt werden. Nun stehe ich im Tutorial beim ADC und verstehe vorallem zwei spezielle Befehle nicht, zu denen ich auch sonst nichts gefunden habe. ldi ztausend, '0'-1 Dabei geht es mir um "'0'-1", das ich nicht verstehe. Wofür steht das, was macht das? Das zweite: subi temp3, low(-1) Hier geht es mir um "low(-1)". Wofür das low und das high stehen ist mir klar, aber mit einem -1? Gebe ich das, mit "ldi temp1, low(-1)", auf meinem display aus ergibt das 255, das heisst alle Bits sind gesetzt. Laut dem tutorial wird aber so 1 Addiert, das hab ich gesehen, verstehe es aber nicht. Zum Schluss doch noch Danke für das wirklich gute Tutorial :) Danke für eure Hilfe und Grüsse Kurt
Kurt S. schrieb: > Dabei geht es mir um "'0'-1", das ich nicht verstehe. Wofür steht das, > was macht das? Eins weniger als der (ASCII-)Wert der Ziffer 0. Wenn du zu dieser Zahl wieder eine 1 addierst, hast du wieder eine Ziffer 0, addierst du eine 2, hast du eine Ziffer 1 usw. (Aufsteigende Reihenfolge der Ziffern von 0 bis 9 ist eine Grundforderung an jeden vernünftigen Zeichensatz.) > Hier geht es mir um "low(-1)". Wofür das low und das high stehen ist mir > klar, aber mit einem -1? > Gebe ich das, mit "ldi temp1, low(-1)", auf meinem display aus ergibt > das 255, das heisst alle Bits sind gesetzt. Ja. Es ist gewissermaßen der Bytewert der Zahl -1. Eigentlich kann man den low-Operator auch weglassen, denn wenn das Ziel sowieso nur 8 bits breit ist, kommt genau das raus: 8 gesetzte Bits.
> Laut dem tutorial wird aber > so 1 Addiert, das hab ich gesehen, verstehe es aber nicht. dort steht wohl eher sowas subi r16,low(-1) Es gibt nämlich beim AVR (leider) keinen Add Immediate addi Befehl deshalb muß die Konstante, die addiert werden soll, erst negiert und dann subtrahiert werden. > ldi ztausend, '0'-1 Vom Binär-Wert einer ASCII-'0' wird eins abgezogen. Sieh dir mal eine ASCII-Tabelle an, dort ist angegeben, dass '0' = 48 ist. Nach der Operation steht also im Register ztausend der Wert 47
Kurt S. schrieb: > ldi ztausend, '0'-1 > > Dabei geht es mir um "'0'-1", das ich nicht verstehe. Wofür steht das, > was macht das? '0' ist eine Char-Konstante, entspricht also dem numerischen Wert des ASCII-Zeichens "0" (0x30). Siehe ASCII-Tabelle. Und davon wird dann halt noch 1 abgezogen. > Das zweite: > subi temp3, low(-1) > > Hier geht es mir um "low(-1)". Wofür das low und das high stehen ist mir > klar, aber mit einem -1? > Gebe ich das, mit "ldi temp1, low(-1)", auf meinem display aus ergibt > das 255, das heisst alle Bits sind gesetzt. Laut dem tutorial wird aber > so 1 Addiert, das hab ich gesehen, verstehe es aber nicht. Ja, das ist eine "Eigenart" des Controllers. Der kennt nur subi (Subtract immediate from register), aber kein addi, da man das eine vom anderen ableiten kann. Kannst du dir so vorstellen: x + 1 = x - (-1) Das low() kann man auch weglassen, der Wert wird ohnehin auf 8 Bit gekürzt.
Das ging ja schnell. Vielen Dank erstmal für die Antworten. Die Rechnung "subi temp3, -1" hab ich jetzt verstanden, wird ja auch bei der Arithmetik im tutorial beschrieben. Habs aber erst jetzt begriffen... Sieht man, bei der 0, dass es ASCII ist an den einfachen Anführungszeichen (')? Mache ich das ganze ohne diese Wird es normal als Dezimalzahl angesehen. @ Lothar Miller Da steht schon temp3 aber zeigt auf r18 mit .def. Danke nochmals Gruss Kurt
Lothar Miller schrieb: > Es gibt nämlich beim AVR (leider) keinen > Add Immediate addi Befehl Wozu sollte der addi denn gut sein? Würde doch nur Platz aufm Silizium verschwenden... http://de.wikipedia.org/wiki/Atmel_AVR#Befehlssatz Johann
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.