Wie gesagt: Assembler ist nicht Assembler. Vielleicht hilft ein Blick ins Wiki und in dortige Tutorials? (wenn du schon nicht verrätst, welchen Assembler du verwendest).
ok das mit von vorne nach hinten ist quatsch, ach von hinten nach vorna, aber das mit dem indireckten zugriff geht immer noch nede:
LDI r30, lo(addr)
LDI r31, hi(addr)
LD r10, Z
Mein Porg sieht so aus: Alle paar sec wird ein Interupt aufgerufen, dort wir immer eine der 5Bytes ausgelesen und zwar nacheinander, also beim ertsten Int das erste, bei 2. das 2. usw, bis es bei 5. wieder bei 1 anfängt, nur das bekomme ich ned gebacken. Das mit dem indirekten zugriff geht nede, da kommt als fehlermeldung:
D:\Eigene Dateien\Multiplex.asm(81) : error : Undefined variable referenced
Wie gesagt: Assembler ist nicht Assembler. Vielleicht hilft ein Blick ins Wiki und in dortige Tutorials? (wenn du schon nicht verrätst, welchen Assembler du verwendest).
Disclaimer: none. Sue me.
mach das so:
irgendwo in den Anfangsfeierlichkeiten
.def tmp,R16Code:.equ Meinevariablen = 0x0060
Im Dattenblatt nachlesen, ob die Adresse ;0x0060 wirklich auch die erste Adresse ist, die man benutzen darf
in der reset routine:
jetzt hast Du die Adresse 0x0060 in den X Pointer.Code:ldi XH,HIGH(Meinevariablen) ldi XL,LOW(Meinevariablen)
in Deinem Interrupt erstmal prüfen, ob Du bei 0x0066 angekommen bist:
Code:cpi XL,0x0066 brlo nichtzuruecksetzen ldi XH,HIGH(Meinevariablen) ldi XH,LOW(Meinevariablen) nichtzuruecksetzen: ld tmp,X+ ;mach was mit tmp
In der ISR SREG Register retten!
Gruß Sebastian
@ Sprinter,
Diese Fehlermeldung sieht so aus als ob man Dein Beispiel eingesetzt hätte,D:\Eigene Dateien\Multiplex.asm(81) : error : Undefined variable referenced
und "addr" nicht definiert hätte
Gruß Sebastian
Ok werde es mit dem Pointer machen, das scheint zuverlässig, aber sag mal was verbirgt sich darunter:
In der ISR SREG Register retten!hatte es definiert, das war ja ds verwirendeDiese Fehlermeldung sieht so aus als ob man Dein Beispiel eingesetzt hätte,
und "addr" nicht definiert hätte
Hast Du AVRStudio ?aber sag mal was verbirgt sich darunter:
Wenn ja, schreib mal ein kurzes Programm, wo cp add sub usw. vorkommt,
dann gehe des Programm im Studio schrittweise durch und schaue Dir den Inhalt vom SREG an !
Dann bringe im Erfahrung wozu SREG da ist, und dann überlege, was passiert, wenn Dein Programm sich in der Hauptschleife befindet und beim Abarbeiten von einem z.B add Befehl dem ein Branch folgt ,von einem Interrupt abgebrochen, in dem wiederrum irgendwas verglichen oder addiert wird.
O weh, jetzt verstehe ich selber nicht, was ich getippt hab, aber mach mal mit Studio, es ist besser, wenn Du selber drauf kommst...
Gruß Sebastian
Klar hab ich studio, als Atmelfan und Atmelferienjobber ist das ja pflichtHast Du AVRStudio ?
Wenn ja, schreib mal ein kurzes Programm, wo cp add sub usw. vorkommt,
dann gehe des Programm im Studio schrittweise durch und schaue Dir den Inhalt vom SREG an !
Dann bringe im Erfahrung wozu SREG da ist, und dann überlege, was passiert, wenn Dein Programm sich in der Hauptschleife befindet und beim Abarbeiten von einem z.B add Befehl dem ein Branch folgt ,von einem Interrupt abgebrochen, in dem wiederrum irgendwas verglichen oder addiert wird.
O weh, jetzt verstehe ich selber nicht, was ich getippt hab, aber mach mal mit Studio, es ist besser, wenn Du selber drauf kommst..., danke für deine Bemühungen, ich denke die richtig komplexen sachen muss ich schon zT selber rausfinde, so nst lerne ich ja nix
Danke noch mal, mein Prog geht jetzt, macht aber ganz lustige sachen, die ich nicht will!
Da ist wirklich was wahres dran.komplexen sachen muss ich schon zT selber rausfinde, so nst lerne ich ja nix
Deswegen sage ich Dir nicht, warum das mit dem SREG so wichtig ist, das kriegst Du schon selber hin...
Gruß Sebastian
Linus TorvaldSoftware is like s e x: its better when its free.
Lesezeichen