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 Messung

    Ich 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.


Anmelden zum Antworten