1 | ; Projekt-Name: Projekt01 Datum: 01.02.2012
|
2 |
|
3 | ; Datei: Maske-Tiny2313.asm
|
4 |
|
5 | ; PORTB,xxx
|
6 | ; PORTD,xxx
|
7 |
|
8 | ; AVR: Tiny2313
|
9 |
|
10 | .INCLUDE "tn2313def.inc" ; Deklaration für Tiny2313
|
11 | .EQU takt = 1200000 ; Systemtakt 1,2 MHz
|
12 |
|
13 | rjmp reset ; Reseteinsprung
|
14 | .ORG OVF0addr ; Interrupt-Vektor
|
15 | rjmp TIMER0_OVF ; Sprung zur ISR
|
16 |
|
17 | reset: ldi r16,LOW (RAMEND) ; Stapel anlegen
|
18 | out SPL,r16
|
19 |
|
20 | ;nur als Beispiel gedacht!
|
21 | ldi r16,0xFF ; Bitmuster 1111 1111 (Beispiel)
|
22 | out DDRB,r16 ; Datenricht. PB0 - PB7=Output
|
23 | ldi r16,0x00 ; Bitmuster 0000 0000 (Beispiel)
|
24 | out DDRD,r16 ; Datenricht. PD0 - PD6=Input
|
25 | ldi r16,0b01111111
|
26 | out PORTD,r16 ; PD0 bis PD6=PULLUP
|
27 |
|
28 | ; Timer0 initialisieren:
|
29 | ldi r16,1<<CS02|1<<CS00 ; Prescale = 1024 (Beispiel)
|
30 | out TCCR0B,r16
|
31 | ldi r16,1<<TOIE0 ; Timer Overflow Interrupt einrichten
|
32 | out TIMSK,r16
|
33 | sei ; Timer frei
|
34 |
|
35 | loop: nop
|
36 |
|
37 | rjmp loop
|
38 |
|
39 | ;Interrupt-ISR
|
40 | TIMER0_OVF:push r2 ;Kopie r2 auf den Stack, danach SP-1
|
41 | in r2,SREG ;Inhalt vom Statusregister in r2 laden
|
42 | nop ;ISR Abarbeitung (z.B. dec r17)
|
43 | out SREG,r2 ;Inhalt von r2 ins SREG laden
|
44 | pop r2 ;SP+1, danach vom Stack in r2 laden
|
45 | reti
|