Code:
.NOLIST
.INCLUDE <m8def.inc>
.LIST
.CSEG
RESET:
rjmp init
rjmp DUMMY
rjmp DUMMY
rjmp DUMMY
rjmp DUMMY
rjmp DUMMY
rjmp MYINT
rjmp init
rjmp MYINT
.ORG INT_VECTORS_SIZE
init:
ldi R16,HIGH(RAMEND)
out SPH,R16
ldi R16,LOW(RAMEND)
out SPL,R16
; CTC klarmachen
ldi r17,0;
ldi r16,(1<<WGM12)|(1<<CS10)
out TCCR1A,r17
out TCCR1B,r16
; port b und d als ausgang
LDI r24,255
OUT DDRB,r24
LDI r24,255
OUT DDRD,r24
; interrupt
ldi r16,(1<<OCIE1A)|TIMSK;
out TIMSK,r16
; zaehler laden
ldi r16,0
out OCR1AH,r16
ldi r16,255 ;29 (mit 29 sind es ca 33kHz, mit 255 ca 3,8kHz)
out OCR1AL,r16
; PB1 ist anfangs HIGH
ldi r18,2
out portb,r18
sei ; Interrupts aktivieren
; hauptschleife
loop:
ldi r24,32
out portd,r24
; delay loop, 1Hz
ldi r17,$09
WGLOOP0: ldi r18,$BC
WGLOOP1: ldi r19,$C4
WGLOOP2: dec r19
brne WGLOOP2
dec r18
brne WGLOOP1
dec r17
brne WGLOOP0
nop
ldi r24,192
out portd,r24; PD5+6 auf HIGH
; delay loop, 1Hz
ldi r17,$09
WGLOOP3: ldi r18,$BC
WGLOOP4: ldi r19,$C4
WGLOOP5: dec r19
brne WGLOOP5
dec r18
brne WGLOOP4
dec r17
brne WGLOOP3
nop
; immer wiederholen
rjmp loop
; isr, klappt nicht mit meinen pushes..
MYINT:
;push r16
;push r17
;push r18
;push r19
;ldi r20,SREG
;push r20
;push r23
;push r24
; toggle funktion:
; "wenn portb=0 ist, wird portb=2"
; "wenn portb=2 ist, wird portb=0"
ldi r20,0
ldi r21,portb
cp r21,r20
breq setport
out portb,r20
rjmp intend
setport:
ldi r21,2
;ldi r22,portb
;or r21,r22
out portb,r21
intend: ; auch diese pops taugen nicht
;pop r24
;pop r23
;pop r20
;out SREG,r20
;pop r19
;pop r18
;pop r17
;pop r16
reti
DUMMY:
reti
vielleicht ist der atmel mit 1MHz auch zu langsam für das, was ich erreichen will? dann würde ich ein 16MHz quarz dranbasteln. aber auch mit erheblich niedrigerer CTC frequenz geht es nicht.
Lesezeichen