licht_attiny_test.asm
1 | .nolist
| 2 | .include <tn2313def.inc>
| 3 | .list
| 4 | .cseg
| 5 | .def zahl=r18
| 6 | .def temp=r16
| 7 | .def sregsave=r19
| 8 | .def tmp=r21
| 9 | .org 0x000
| 10 |
| 11 |
| 12 | rjmp RESET
| 13 | rjmp RESET
| 14 | rjmp RESET
| 15 | rjmp RESET
| 16 | rjmp RESET
| 17 | rjmp RESET
| 18 | rjmp RESET
| 19 | rjmp Licht_80s
| 20 | rjmp RESET
| 21 | rjmp RESET
| 22 | rjmp RESET
| 23 | rjmp RESET
| 24 | rjmp RESET
| 25 | rjmp RESET
| 26 | reset:
| 27 |
| 28 | ldi zahl,1 ;legt die anzahl der umläufe fest
| 29 | ldi temp,128 ;gibt die interrupts frei
| 30 | out SREG,temp
| 31 | ldi temp, low(ramend) ;stackpointer initialisiert
| 32 | out spl, temp
| 33 | ldi temp,0b11111111 ; portb ist ausgang
| 34 | out ddrb,temp
| 35 | ldi temp,0b00000000
| 36 | out ddrd,temp ;portd ist eingang
| 37 | ldi Temp, 2 ;hier wird der timer interupt freigegeben
| 38 | out TIMSK, Temp
| 39 | sei
| 40 | ldi temp,5
| 41 | out TCCR0,temp ; mit 1024 geteilte frequenz
| 42 |
| 43 | timer: ldi tmp , 255
| 44 | out TCNT0, tmp ;timer zählt bis 255
| 45 | ldi temp,0
| 46 | cp zahl,temp
| 47 | breq licht_aus
| 48 | rjmp timer
| 49 |
| 50 |
| 51 |
| 52 | licht_aus:
| 53 | ldi temp,0b11111111
| 54 | out portb,temp
| 55 | rjmp ende
| 56 |
| 57 |
| 58 | Licht_80s:
| 59 |
| 60 | in sregsave ,SREG
| 61 | push sregsave
| 62 | dec zahl
| 63 | pop sregsave
| 64 | out SREG,sregsave
| 65 | reti
| 66 |
| 67 |
| 68 | ende:
| 69 |
| 70 | rjmp ende
|
|