Zitat von
Unregistriert
Den letzten Lösungsansatz habe ich aus "AVR-ASM-Tutorial", Seite 38 abgeleitet. In der Assemblerhilfe AVR-Studio4 gehe ich jetzt alle Befehle durch, nach einer Alternative für "in". Ich finde "sts". Nur, wie geht man mit dem Dataspace um? Es muß eine 16Bit-Adresse supplied werden - wie? Wo sehe ich was wann wo eine 16-Bit-Adresse ist? Usw. Es sind einfach zu viele vernetzte Informationen und Details auf einmal.
Ich bin auch nicht der Profi und nutze Assembler nur innerhalb von BASCOM. STS und LDS ist schon richtig. Ob 16-Bit Adresse oder 7-Bit Adresse - egal - der Assembler (also das Übersetzerprogramm, das den Assemblerquelltext mit den Mnemonics in Opcode übersetzt) kümmert sich drum ob es den 32-Bit Opcode oder den 16-Bit Opcode einsetzt.
... dürfte ich Dich bitten mir eine Vorlage für obiges Beispiel zu schreiben? Wenn ich sehe, wie es geht, kann ich gezielter nachlesen und mich weiterhangeln.
temp steht für ein Register ab r16, daß an der Stelle im Programm überschrieben werden darf und für CBR erlaubt sein muß -> in ASM Reference nachlesen:
Code:
lds temp,Adcsra
cbr temp,1<<ADEN 'bei cbr wird das Bit (bzw die Bits), die gelöscht werden soll auf "1" gesetzt
sts Adcsra,temp
lds temp,Adcsra
andi temp,01111111 'macht das Gleiche und für mich übersichtlicher, weil ich weiß, daß ADEN Bit Nummer 7 ist.
sts Adcsra,temp
PS kann das nicht nachtesten - du solltest das im Simulator ausprobieren. Bei mir macht Bascom beim assemblieren aus CBR immer ein ANDI mit dem Komplement der Maske. Es gibt wohl keinen eigenen Opcode für CBR sondern der Assembler macht bei bei CBR immer ein Komplement der Maske und nimmt dann den ANDI Opcode. Deshalb findet man auch den Begriff Pseudocode für CBR.
Gruß
Searcher
Lesezeichen