Hallo Andy123,
ich kann dir nur die Seite von Sprut empfehlen:
www.sprut.de
Ich bin leider auch neu und quäle mich auch durch die Assembler Befehle durch....
Viel Spaß
michael
Hallo zusammen,
ich finde nirgendswo erklärt, was für Befehle es bei Assembler gibt für
if
else
for
do
loop
kleiner als
größer als
kleiner oder gleich als
größer oder gleich als
+
-
*
/
des weiteren wollte ich Fragen, wie ich es bewerkstelligen kann, dass wenn ich einen Wert bei einer Schnittstelle einlese, nacheinander die Bits einzeln im gleichen Register setze.
z.B. so:
das Register 16 ist leer
nun liest er einen Wert ein
und setzt beim ersten Bit des Register 16 eine 1 oder eine 0
dann liest er wieder einen Wert ein
und setzt beim zweiten Bit des Register 16 eine 1 oder eine 0
ingesamt wird dies 8 mal bewerkstelligt.
Nachdem er das Register 16 mit Werten gefüllt hat, wird dieses Register woanderst hinkopiert.
Wenn das Register woanderst hinkopiert wird, sollte eine Variabele mit dem Wert 1 addiert wird.
Damit will ich erreichen, damit das Programm aber einer gewissen empfangen Byte Zahl aufhört zu arbeiten.
Hoffe ihr könnt mir schnellstmöglich helfen
Hallo Andy123,
ich kann dir nur die Seite von Sprut empfehlen:
www.sprut.de
Ich bin leider auch neu und quäle mich auch durch die Assembler Befehle durch....
Viel Spaß
michael
Hallo,
dann gibts da noch das PDF von Atmel, in dem alle Befehle der AVRs stehen:
http://www.atmel.com/dyn/resources/p...ts/doc0856.pdf
Welche Befehle der AVR nun wirklich kann, steht in dessen Datenblatt relativ weit hinten "Instruction Set Summary".
Diese Seite wird auch gern erwähnt:
http://www.avr-asm-tutorial.net/index.html
Auch in unserer Wiki tut sich da was.
https://www.roboternetz.de/wissen/in...inf%C3%BChrung
Besonders deine Fragen findest du hier
https://www.roboternetz.de/wissen/in...Cr_Bascom-User
mfg robert
Wer glaubt zu wissen, muß wissen, er glaubt.
Hi!
If, else, for, do usw. sind Hochsprachenbefehle! Dafür gibt es kein Pendant in Assembler! Die entsprechenden Funktionen musst Du Dir aus einzelnen Befehlen zusammenbauen.
Bsp.: If x=0 then code
- kopiere x in r16: ldi r16, x
- vergleiche mit 0: cpi r16, 0
- springe nach"Gleich" wenn gleich: breq Gleich
- sonst mache was anderes: anderer Code
Gleich ist dabei ein Label.
Da Du sowas nicht zu wissen scheinst, empfehle ich dringend ein Buch oder ähnliches. In diesem Forum kann Dir das Programmieren an sich keiner erklären. Das ist einfach zu viel.
Bit 3 in Register r16 wird mit Bit 3 von Register r17 zb so gesetzt:
Isoliere Bit 3 in r17: andi r17, 0b00001000
übertrage isoliertes Bit in r16: or r16, r17
Das hab ich jetzt schnell runtergeschrieben, Richtigkeit garantiere ich nicht.
Gruß
http://www.avr-asm-tutorial.net/index.html
Diese Seite ist doch dafür gut geeignet oder
Mir geht es eigendlich nur darum, dass ich z.B Daten von einem GPS Empfänger hinaustakten muss.
Demnach muss ich ein I/O Register verwenden wo ich z.B. Pin 1 auf Ausgang schalte.
Anschliessend muss ich beim gleichen I/O Register dann Pin 2 auf Eingang schalten.
Nun lese ich bei diesem Eingangspin einen digitalen Wert 1 oder 0 ein.
Diesen Wert speichere ich dann in ein anderes Register z.B. name "erstesRegister".
Dieses Register ist dann r0.
Zu vor muss aber das Schieberegister name "zweitesRegister, was r1 ist" um 1 addiert werden.
Demzufolge weiss man dann, wo der eingelesene Binärwert bei welchem Bit des Registers erstesRegister gespeichert werden muss.
Hat das Register zweitesRegister den Wert 8 erreicht, so wird der Binärcode vom Register erstesRegister in eine SD Karte geschoben.
Diese SD Karte hat nun z.B. 12 Sektoren.
Jedes Sektor besitzt 512 Byte.
Wurden nun 8 Bit des Registers erstes Register in die SD Karte geschoben, so wird dann anschliessend ein anderes Register namens drittesRegister "was r3 ist" mit dem Wert 8 addiert.
Nun werden die Register erstesRegister, zweitesRegister auf den Wert 0 zurückgesetzt.
Nun läuft dieses Programm dann solange ab, bis das Register drittesRegister den Wert 6144 hat.
Nun wird das Programm unterbrochen und eine rote LEd fängt an zu leuchten.
Demzufolge benötige ich noch 3 Register.
r4 = um 1 Ausgang bei I/O zu schalten "für GPS Empfänger"
r5 = um 1 Eingang bei I/O zu schalten "für GPS Empfänger
r6 = um 1 Ausgang bei I/O zu schalten "für SD KArte"
r4 bis r6 werden dann in das I/O Register geladen.
Wäre dies so möglich, wie ich es gerade beschildert habe?
Bis denne
In der Hilfe des AVR Studios (Assembler Hilfe) ist jeder Befehl erklärt.
Warum willst Du mit Null Ahnung Assembler direkt so was "großes" machen ?
Bring erstmal eine LED zum blinken...
Gruß Sebastian
Linus TorvaldSoftware is like s e x: its better when its free.
Frage, ist die Programmierung des Atmega8 mit der Hochsprache C besser?
Wenn ja, wo gibt es da Befehlreferenzen.
Mit Assembler würde mir ein viel zu langer Bart wachsen.
Cu
Fakt ist, solange du nicht per DU mit dem Mikrocontroller bist bleibt dir wohl nur Basic ... nur wirklich lernen wirst du damit nichts.
Für anständig kompilierten Code sollte man sich mit C näher befassen.
In Assembler programmieren meines Wissens nach nur Leute, die:
1. sich wirklich mit dem Mikroconroller beschäftigen
2. zeitkritische Dinge verwirklichen wollen.
Grüße,
Hanni
Grundregeln des Forenpostings:
1. Nutze niemals die Suchfunktion!
2. Überprüfe niemals die Topics nach Ähnlichkeiten!
3. Schreibe alles in hellgelb!
Lesezeichen