Könnt ihr mit helfen? Solarzelle...
-
Mal ehrlich: Wie viel Zeit hast du dir übers Wochenende genommen um dich zu informieren?
"A" ist ein spezielles Register, der Akkumulator. Welcher Motor, oder überhaupt welches Bauteil, reagiert auf die Veränderung eines Prozessorinternen Registers? Wie soll das denn gehen? Du mußt schon etwas an die Ein-/Ausgabe Ports senden, wenn du etwas ansteuern willst.
Zudem gehe ich nicht davon aus, daß dein Schrittmotor 100 Impulse benötigt um sich einen Schritt vor zu bewegen und dann vor allem 255 um sich einen zurück zu bewegen.
":=" steht für eine Zuweisung in einigen Programmiersprachen und soll auch hier die Zuweisung der Konstanten "0" an ein beliebiges Register sein.
erhöhe Register ist z.B. inc r4 für Register4, verringer dementsprechend dec r4.
Hast du jemals den Operator ">" in rigendeiner deiner Befehlslisten gesehen? Man sollte nicht anfangen zu raten, wie ein Befehl "eventuell aussehen könnte". Das gute, alte "IF" gibt es leider nicht direkt (habe ich jedoch in einem anderen Assembler für den 8051 mal gesehen...).
Überlege aber mal, was folgender Code bewirken könnte:
mov a,r4 cjne a,addat,compare jmp loop compare: jc vor jnc zurueck vor: call motor_vor inc r4 jmp loop zurueck: call motor_zurueck dec r4 jmp loop
Zu führe Messung durch habe ich dich mal gebeten dir das ADCON-Register anzuschauen...
-
Verdammt ich schaff es wohl nicht:
Hier ist das richtig als MessungIch weiss nicht wie ich das vergleiche
Aber ist das richtig das dein Programm oben das Hauptprogramm ist?
Hab jetzt eben so Hauptprogramm:$IC(sfr.def) Org 5000H CALL ADW62 loop: mov a,r4 cjne a,addat,Anfang jmp loop Anfang: jc vor jnc zurueck vor: call MOTORVOR inc r4 jmp loop zurueck: call MOTORZURUECK dec r4 jmp loop $IC(MOTORZURUECK.DEF) $IC(ADW62.DEF) $IC(MOTORVOR.DEF) End
ADW:
ADW62: clr MX0 Setb MX1 CLR MX2 Setb adm jb BSY,$ ret
Motorvor:
MOTORVOR: mov R4,#100 Anfang: rr a djnz R4,Anfang ret
Motorzurueck
MOTORZURUECK: mov R4,#100 Anfang: rl a djnz R4,Anfang ret
Bei Messen hab ich das:
mov addat,#255 mov a,#255 subb a,addat
Verdammt wir müssen heute fertig werden scheisse man ich muss es chaffen
-
Na gut das wars, noch 20 Minuten. Naja trotzdem danke...
-
Da es jetzt eh vorbei ist (-.-), könnte mir jemand freundlicherweise schreiben wie ich es hätte machen müssen? Also der fertigen Code?
-
Bist du dir sicher, daß du das nicht selbst herausfinden willst? Du hängst doch ohnehin schon dem Stoff hinterher. Wie es auf deinem Controller mit deinem Schrittmotor und deinem Sensor genau aussehen muß, kann ich natürlich nicht sagen. Zudem ist auch der Code natürlich ohne Gewähr, da ich keine Lust habe das Ding aufzubauen und zu testen oder großartig durchzugehen. Zum Verstehen sollte es aber auf jeden Fall ausreichen.
$processor(80537) org 8000h jmp start org 8100h start: mov p1,#00h mov r0,#00h mov ie0,#00h mov adcon,#00h loop: mov dapr,#00h jb bsy,$ mov a,r0 cjne a,addat,compare jmp loop compare: jc vor jnc zurueck vor: call motor_vor inc r0 jmp loop zurueck: call motor_zurueck dec r0 jmp loop motor_vor: call warte cpl p1.0 call warte cpl p1.1 call warte cpl p1.0 call warte cpl p1.1 ret motor_zurueck: call warte cpl p1.1 call warte cpl p1.0 call warte cpl p1.1 call warte cpl p1.0 ret warte: mov r1,#15h warte_m1: mov r2,#0ffh djnz r2,$ djnz r1,warte_m1 ret end
-
Hm ne geht leider nicht.