H3llGhost
14.11.2007, 16:13
Hallo Leute,
ich habe folgendes Programm:
.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?
ich habe folgendes Programm:
.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?