Gast
#92392
Hallo Profis,
will einen Servo je nach Schalterstellung (PIN-Abfrage) rechts oder
links laufen lassen. Das Programm hat ohne die Abfrage funktioniert und
je nach Zählwert in der ISR lief der Servo dann rechts oder links. Kaum
habe ich aber die Abfrage eingebaut und PortD als Eingang definiert,
löst der AV keinen Interrupt mehr aus.
Meine Vermutung liegt am "rjmp" beim Int-Handler - also dass der
Sprung zu weit ist? Kann das sein?
;Ansteuerung eines Modellbauservo
;Autor: Alexander Ernst am 4.6.2004
;cpu = ATmega8535
;---------------------------------------
.include "m8def.inc"
.def temp1 = r16
.org 0x000
rjmp def_timer0 ;Reset Handler
.org OVF0addr ;Timer0Flag 0x009
rjmp ihTimer0_ovf
;-----main------------------------------
def_timer0:
ldi temp1, LOW(RAMEND) ;Stack
out SPL, temp1
ldi temp1, HIGH(RAMEND) ;Stack
out SPH, temp1
ldi temp1,0xFF
out DDRC, temp1 ;PortC configured as output
ldi temp1,0x00
out DDRD, temp1 ;PortD cofigured as input
ldi temp1,0b00000101 ;define prescaler 1/1024
out TCCR0,temp1
ldi temp1,0b00000010 ;timer0 overflow interrupt
out TIMSK,temp1
ldi temp1, 0x63 ;reload timer0 20ms
out TCNT0, temp1
sei ;enable interrupt enable flag
rjmp main
;-------Interrupt_Timer0-------------------------------------------
ihTimer0_ovf: ;isr
sbi PORTC,0 ;Highsignal for 2ms
ldi r18,0x00
loop:
inc r18
brne loop
loop1:
inc r17 ;wert von main
brne loop
cbi PORTC,0
reti
;-------Abfrage_main-----------------------------------------------
main:
sbic PORTD,0
rjmp right
sbic PORTD,1
rjmp left
rjmp main
right:
ldi r17,0xFD
rjmp main
left:
ldi r17,0xE1
rjmp main ;endlosschleife