]> www.hackdaworld.org Git - my-code/atmel.git/blob - beginners/test_int.asm
-> mapping to an 1/x like behaviour
[my-code/atmel.git] / beginners / test_int.asm
1 ;
2 ; portd 3-7 lauflicht mit UART-RX masked byte anzeige
3 ;
4 ; by Hunz ;)
5 ;
6
7 .include "../include/2313def.inc"
8
9 ; RESET
10 rjmp INIT
11
12 ; INT0
13 reti
14
15 ; INT1
16 reti
17
18 ; T1 CAPT1
19 reti
20
21 ; T1 COMP1
22 reti
23
24 ; T1 OVF1
25 rjmp T1_OVF1
26
27 ; T0 OVF0
28 reti
29
30 ; UART RX
31 rjmp UART_RX
32
33 ; UART UDRE
34 reti
35
36 ; UART TX
37 reti
38
39 ; ANA_COMP
40 reti
41
42 T1_OVF1:
43 ; toggle LED
44 out DDRD, r17
45 ; next LED
46 rol r17
47 ; skip next operation if beyond last LED
48 sbrs r17, 7
49 reti    ; we return if not beyond last LED
50 ; reset LED counter to first LED
51 ldi r17, 4
52 reti
53
54 UART_RX:
55 ; read received byte to r16
56 in r16, UDR
57 ; mask with valid LED bits
58 andi r16, $7C
59 ; echo masked byte
60 out UDR, r16
61 ; set LEDs according to masked byte
62 out DDRD, r16
63 reti
64
65 INIT:
66 ; Stackpointer setzen
67 ldi r16, Low(RAMEND)
68 out SPL, r16
69
70 ; baudrate einstellen
71 ldi r16, 11 ; "38400 bps wert" in r16
72 out UBRR, r16 ; write to uart baudrate register
73
74 ; enable TX, RX, Interrupt on RX
75 ldi r16, ((1<<RXEN)|(1<<TXEN)|(1<<RXCIE))
76 out UCR, r16
77
78 ; PortD Inputs - Enable all LEDs
79 ldi r16, 0x7C
80 out DDRD, r16
81
82 ; Least Significant LED
83 ldi r17, 4
84
85 ; Timer1 Prescaler: CLK/64 (inc. Timer1 every 64 CLKs)
86 ldi r16, 3
87 out TCCR1B, r16
88
89 ; Timer1 Overflow Interrupt enable
90 ldi r16, (1<<TOIE1)
91 out TIMSK, r16
92
93 ; global interrupts enable
94 sei
95
96 ; allow sleep mode
97 ldi r16, (1<<SE)
98 out MCUCR, r16
99
100 ; main loop
101 MAIN:
102 sleep
103 rjmp MAIN