1 | .include "tn13Adef.inc"
|
2 |
|
3 | .def temp1 = r16 ; allgemeines temp Register, zur kurzfristigen Verwendung
|
4 |
|
5 |
|
6 | ; Interuptvektoren ATiny13
|
7 | rjmp Main ; Reset, Sprung zum Hauptprogramm
|
8 | reti ; INT0, External Interupt
|
9 | reti ; PCINT0, Pin Change Interrupt
|
10 | rjmp timer0_ovf ; TIM0_OVF, Timer/Counter Overflow
|
11 | reti ; EE_RDY, EEPROM Ready
|
12 | reti ; ANA_COMP, Analog Comparator
|
13 | reti ; TIM0_COMPA, Timer/Counter Compare Match A
|
14 | reti ; TIM0_COMPB, Timer/Counter Compare Match B
|
15 | reti ; WDT, Watchdog Time-out
|
16 | reti ; ADC, ADC Conversion Complete
|
17 |
|
18 |
|
19 | ; hier beginnt das Hauptprogramm
|
20 | Main:
|
21 | sbi PortB, 0
|
22 |
|
23 | ; Stackpointer initialisieren
|
24 | ldi temp1, LOW(RAMEND)
|
25 | out SPL, temp1
|
26 |
|
27 | sbi DDRB,0 ; Port B0 = Ausgang
|
28 |
|
29 | clr temp1
|
30 |
|
31 | ldi temp1, (1<<CS02) | (1<<CS00) ; CS00 und CS02 setzen: Teiler 1024
|
32 | out TCCR0B, temp1
|
33 |
|
34 | ldi temp1, (1<<TOIE0) ; TOIE0: Interrupt bei Timer Overflow
|
35 | out TIMSK0, temp1
|
36 |
|
37 | ldi temp1,12
|
38 | sei ; alle Interrupts freigeben
|
39 |
|
40 | loop: rjmp loop
|
41 |
|
42 | ;--- Timer 0 Interrupt-Routine ---
|
43 |
|
44 | timer0_ovf:
|
45 | dec temp1
|
46 | brne T0Ret
|
47 |
|
48 | sbic PortB, 0 ; Überspringe den nächsten Befehl, wenn das Bit 0 im Port gelöscht ist
|
49 | rjmp ClrBitNow ; Springe zu ClrBitNow
|
50 | sbi PortB, 0 ; Setze Bit 0 in PortB
|
51 | rjmp T0L1 ; Springe
|
52 |
|
53 | ClrBitNow:
|
54 | cbi PortB, 0 ; Lösche Bit 0 in PortB
|
55 | cli
|
56 |
|
57 | T0L1: ldi temp1,2
|
58 |
|
59 | T0Ret: reti
|