1 | .include "m8def.inc"
|
2 | .def count = r17
|
3 | .def temp = r16
|
4 |
|
5 | .equ CLOCK = 4000000
|
6 | .equ BAUD = 9600
|
7 | .equ UBRRVAL = CLOCK/(BAUD*16)-1
|
8 |
|
9 | .org 0x000 ; kommt ganz an den Anfang des Speichers
|
10 | rjmp RESET ; Interruptvektoren überspringen
|
11 | ; und zum Hauptprogramm
|
12 | rjmp EXT_INT0 ; IRQ0 Handler
|
13 | reti EXT_INT1 ; IRQ1 Handler
|
14 | reti TIM2_COMP
|
15 | reti TIM2_OVF
|
16 | reti TIM1_CAPT ; Timer1 Capture Handler
|
17 | reti TIM1_COMPA ; Timer1 CompareA Handler
|
18 | reti TIM1_COMPB ; Timer1 CompareB Handler
|
19 | reti TIM1_OVF ; Timer1 Overflow Handler
|
20 | reti TIM0_OVF ; Timer0 Overflow Handler
|
21 | reti SPI_STC ; SPI Transfer Complete Handler
|
22 | reti USART_RXC ; USART RX Complete Handler
|
23 | reti USART_DRE ; UDR Empty Handler
|
24 | reti USART_TXC ; USART TX Complete Handler
|
25 | reti ADC ; ADC Conversion Complete Interrupt Handler
|
26 | reti EE_RDY ; EEPROM Ready Handler
|
27 | reti ANA_COMP ; Analog Comparator Handler
|
28 | reti TWSI ; Two-wire Serial Interface Handler
|
29 | reti SPM_RDY ; Store Program Memory Ready Handler
|
30 |
|
31 | RESET: ldi count, 0 ;hier beginnt das Hauptprogramm
|
32 |
|
33 | ldi temp, LOW(RAMEND)
|
34 | out SPL, temp
|
35 | ldi temp, HIGH(RAMEND)
|
36 | out SPH, temp
|
37 |
|
38 | ldi temp, 0b00000011 ;INT0 konfigurieren (rising edge)
|
39 | out MCUCR, temp
|
40 |
|
41 | ldi temp, 0b01000000 ;INT0 aktivieren
|
42 | out GICR, temp
|
43 |
|
44 | ; Baudrate einstellen
|
45 | ldi temp, LOW(UBRRVAL)
|
46 | out UBRRL, temp
|
47 | ldi temp, HIGH(UBRRVAL)
|
48 | out UBRRH, temp
|
49 |
|
50 | ; Frame-Format: 8 Bit
|
51 | ldi temp, (1<<URSEL)|(3<<UCSZ0)
|
52 | out UCSRC, temp
|
53 |
|
54 | sbi UCSRB,TXEN ; TX aktivieren
|
55 |
|
56 | sei
|
57 |
|
58 | Loop: rjmp loop
|
59 |
|
60 | EXT_INT0: ldi temp, 'T'
|
61 | rcall serout
|
62 | reti
|
63 |
|
64 | serout:
|
65 | sbis UCSRA,UDRE ; Warten bis UDR für das nächste
|
66 | ; Byte bereit ist
|
67 | rjmp serout
|
68 | out UDR, temp
|
69 | ret ; zurück zum Hauptprogramm
|