- fchao-Sinus-Wechselrichter AliExpress         
Ergebnis 1 bis 5 von 5

Thema: Assembler Programm möchte nicht und ich weiß nicht weiter!

  1. #1
    Erfahrener Benutzer Fleißiges Mitglied
    Registriert seit
    05.09.2007
    Beiträge
    168

    Assembler Programm möchte nicht und ich weiß nicht weiter!

    Anzeige

    Powerstation Test
    Hallo Leute,

    ich habe folgendes Programm:

    Code:
    .include "m8def.inc"
    .def temp=r16
    .equ TIMERWERT=65536-3906
    .equ TIMERWERT2=65536-7812
    
    ; INIT
    
    ldi temp, LOW(RAMEND)
    out spl, temp
    ldi temp, HIGH(RAMEND)
    out sph, temp
    
    SBI DDRB, PB1 ;Datenrichtungsbit für alle Ports für die Motoren gesetzt
    SBI DDRB, PB2
    SBI DDRB, PB4
    SBI DDRB, PB5
    SBI DDRD, PD4
    SBI DDRD, PD5
    
    SBI DDRD, PD6 ;Front LED an
    SBI PORTD, PD6
    
    CBI DDRC, PC4
    SBI PORTC, PC4
    
    rjmp main_start
    
    ; Funktionen
    
    motor_v_on:
    	SBI PORTB, PB1
    	SBI PORTB, PB2
    	SBI PORTB, PB5
    	SBI PORTD, PD5
    	ret
    
    motor_v_off:
    	CBI PORTB, PB1
    	CBI PORTB, PB2
    	CBI PORTB, PB5
    	CBI PORTD, PD5
    	ret
    
    motor_r_on:
    	SBI PORTB, PB1
    	SBI PORTB, PB2
    	SBI PORTB, PB4
    	SBI PORTD, PD4
    	ret
    
    motor_r_off:
    	CBI PORTB, PB1
    	CBI PORTB, PB2
    	CBI PORTB, PB4
    	CBI PORTD, PD4
    	ret
    
    rueckwaerts:
    	rcall motor_r_on
    	rcall timer_reset
            rcall timer_schleife
    	rcall motor_r_off
    	ret
    
    drehen:
    	rcall timer_reset2
    	SBI PORTB, PB4
    	rcall timer_schleife
    	CBI PORTB, PB4
    	ret
    
    timer_reset:
    	ldi temp, HIGH(TIMERWERT)
    	out TCNT1H, temp
    	ldi temp, LOW(TIMERWERT)
    	out TCNT1L, temp
    	ldi temp, (1<<CS12)
    	out TCCR1B, temp
    	ret
    
    timer_reset2:
    	ldi temp, HIGH(TIMERWERT2)
    	out TCNT1H, temp
    	ldi temp, LOW(TIMERWERT2)
    	out TCNT1L, temp
    	ldi temp, (1<<CS12)
    	out TCCR1B, temp
    	ret
    
    timer_schleife:
    	IN temp, TOV1
    	sbrs temp, TOV1
    	rjmp timer_schleife
    	ldi temp,(1<<TOV1)
    	out TIFR, temp
    	ret
    
    ; Main
    
    main_start:
    	rcall motor_v_on
    
    main:	
    	sbis PINC, 4
    	rjmp ausloesen
    	rjmp main
    
    ausloesen:
    	rcall motor_v_off
    	rcall rueckwaerts
    	rcall drehen
    	rcall motor_v_on
    	rjmp main
    Nur leider funktioniert es nicht wie gewünscht!
    Kann mir jemand helfen warum das nicht funktioniert?

    Das Programm soll folgendes machen:
    Fahren fahren fahren bis ein Taster gedrückt wird, dann Motoren rückwärts, drehen und wieder Gas ...

    Was ist bei mir falsch?

  2. #2
    Erfahrener Benutzer Roboter Experte
    Registriert seit
    10.12.2004
    Ort
    LEV
    Beiträge
    505
    Hallo,
    schau dir das mal genau an:

    timer_schleife:
    IN temp, TOV1
    sbrs temp, TOV1

    So klappt es nicht. Warum ?


    und schau dir auch noch mal deine
    Unterprogramme "drehen" "rückwärts" usw. an:
    Willst du den Timer nur starten ? Oder willst du auch warten ?

    Gruß Jan

  3. #3
    Erfahrener Benutzer Fleißiges Mitglied
    Registriert seit
    05.09.2007
    Beiträge
    168
    Erst warten und dann zurücksetzen ...

  4. #4
    Erfahrener Benutzer Roboter Genie
    Registriert seit
    25.11.2003
    Beiträge
    1.112
    Hättest schon dazu sagen müssen, was nicht funktioniert.
    Außerdem weiß kein Mensch, was Du angeschlossen hast, um den Motor zu fahren.
    Compilierfehler? Hast Du schon den Debugger benutzt?
    Obwohl meine Assemblerfähigkeiten eingerostet sind, würde ich sagen,
    in "rueckwaerts" hast Du den Aufruf von Timerschleife vergessen.
    Dein Timer hat eine Zeit bis zum Überlauf von weniger 256ms im Falle TimerReset 2, sonst noch weniger, das kann nix werden.
    Gruß

  5. #5
    Erfahrener Benutzer Fleißiges Mitglied
    Registriert seit
    05.09.2007
    Beiträge
    168
    Ja den Timeraufruf habe ich vergessen ...
    Wie rechne ich die verdammte Zeit denn aus?
    Laut meinen Unterlagen aus der Schule soll das 1s sein!
    Und der Debugger braucht so verdammt lange um die Schleife endlich durchzugehen ...

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •  

12V Akku bauen