Code:
.include "m8def.inc"
;31248 1 Sek
.EQU TIME05 = 65536 - 15624 ; 0,5 Sekunden
.EQU TIME2 = 65536 - 62496 ; zwei Sekunde
.EQU TIME1 = 65536 - 31248 ; eine Sekunde
.def temp = r16
.def temp = r21
.def temp = r22
.def updown = r23
.org 0x0000
rjmp start
.org OVF0addr ;Interrupt-handler für 8 Bit Timer0
rjmp interrupt
start:
ldi updown, 0b00000000
ldi r20,HIGH(TIME2) ;Trick, um Timer0 auf 16 Bit zu erweitern
ldi temp,LOW(TIME2) ;Starwert Timer
out TCNT0,temp
ldi temp,(1<<CS02|1<<CS00) ;Prescaler Systemtakt/1024
out TCCR0,temp
ldi temp,(1<<TOIE0) ;Timer Interrupt über TOV0 erlauben
out TIMSK,temp ; "
ldi temp, (1 << WGM10) | (1 << COM1A1) | (1 << COM1B1)
out TCCR1A, temp
ldi temp, (1 << CS11)
out TCCR1B, temp
ldi temp,25
out OCR1BH, temp
out OCR1BL, temp
ldi temp,150
out OCR1AH, temp
out OCR1AL, temp
cbi DDRD, PD7
cbi PORTD, PD7
sbi PORTC, PC0
sbi PORTC, PC1
sei ;global Interrupts einschalten
;Stackpointer setzen wg. Unterprogramm
ldi temp,HIGH(RAMEND)
out SPH,temp
ldi temp,LOW(RAMEND)
out SPL,temp
SBI DDRB, DDB1 ; Motordatenrichtungsbit setzen
SBI DDRB, DDB2
SBI DDRB, DDB4
SBI DDRB, DDB5
SBI DDRD, DDD4
SBI DDRD, DDD5
SBI PORTB, PB1 ; Motorenports PB1 und PB2 auf 5V schalten
SBI PORTB, PB2
sbi PORTD, PD5
sbi PORTB, PB5
sbi DDRC, DDC0
sbi DDRC, DDC1
;Hauptprogramm:
loop: ;leere Schleife
rjmp loop
;Interrupt Handler
interrupt: ;LEDs toggeln
inc r20 ;Timererweiterung inkrementieren
brne interrupt2 ;wenn r20=0, zu interrupt2 springen
ldi r20,HIGH(TIME2) ;sonst Starwert Timer neu setzen
sbrs updown,7 ;0 hoch, 1 runter
rjmp switch0
sbrc updown,7
rjmp switch1
switch0:
ldi updown, 0b10000000
ldi temp,150
out OCR1BH, temp
out OCR1BL, temp
ldi temp,25
out OCR1AH, temp
out OCR1AL, temp
cbi DDRC, DDC0
cbi DDRC, DDC1
sbi PORTD, PD6
sbi DDRD, DDD6
rjmp interrupt2
switch1:
ldi updown, 0b00000000
ldi temp,25
out OCR1BH, temp
out OCR1BL, temp
ldi temp,150
out OCR1AH, temp
out OCR1AL, temp
sbi DDRC, DDC0
sbi DDRC, DDC1
cbi PORTD, PD6
cbi DDRD, DDD6
rjmp interrupt2
noswitch:
interrupt2:
ldi temp,LOW(TIME2) ;Startwert Timer neu
out TCNT0,temp
reti
Danke im Voraus!
Lesezeichen