Test_Tiny13.asm


1
;PWM-Test
2
3
.include "tn13def.inc"
4
5
.def  TEMP1    =  r16
6
.def  SAVE_SREG  =  r17
7
.def  PAUSE    =  r18
8
.def  PWM      =  r19
9
.def  LED      =  r20
10
.def  DIR      =  r21
11
12
13
14
.org    $000
15
16
    rjmp    RESET        ;Reset-Vektor
17
18
.org    $003
19
20
    rjmp    TIMER1        ;Timer-Vektor
21
22
23
RESET:
24
    ldi    TEMP1,  0b00001000    ;I/O-Einstellung
25
    out    DDRB,  TEMP1      ;PB3 als Ausgang
26
27
    ldi    TEMP1,  0b00000010    ;Vorteiler 0->001 8->010 64->011
28
    out    TCCR0B,  TEMP1
29
30
    ldi    TEMP1,  0b00000010    ;Interrupt bei Timer0 Überlauf
31
    out    TIMSK0,  TEMP1
32
33
    clr    PAUSE
34
    clr    PWM
35
    clr    LED
36
    clr    DIR
37
38
    sei                ;Interrrupts freigeben
39
40
41
LOOP1:
42
    cpi    PWM,  0
43
    brne  LOOP2
44
    cbi    PORTB,  3        ;LED an
45
46
LOOP2:
47
    cp    LED,  PWM        ;aktuelle Helligkeit erreicht?
48
    brne  LOOP3          ;nein, weiter leuchten
49
    sbi    PORTB,  3        ;ja, LED aus!
50
51
LOOP3:
52
    inc    PWM
53
    rjmp  LOOP1
54
55
TIMER1:
56
    in    SAVE_SREG,  SREG
57
    push  SAVE_SREG
58
59
    cpi    DIR,    0
60
    brne  TIMER3
61
62
    cp    PAUSE,    LED      ;LED +
63
    brne  TIMER2
64
    inc    LED
65
    clr    PAUSE
66
    cpi    LED,    255
67
    brne  TIMER2
68
    inc    DIR
69
70
TIMER2:
71
    dec    PAUSE
72
73
    pop    SAVE_SREG
74
    out    SREG,    SAVE_SREG
75
76
    reti
77
78
TIMER3:
79
    cp    PAUSE,    LED      ;LED -
80
    brne  TIMER4
81
    dec    LED
82
    clr    PAUSE
83
    cpi    LED,    0
84
    brne  TIMER4
85
    clr    DIR
86
87
TIMER4:
88
    dec    PAUSE
89
90
    pop    SAVE_SREG
91
    out    SREG,    SAVE_SREG
92
93
    reti