1 | .include "tn26def.inc"
|
2 |
|
3 |
|
4 | .org 0x000 ; Programm kommt an Anfang von PROM
|
5 |
|
6 | .def temp = r16
|
7 | .def temp1 = r17 ; temporäre Register definieren
|
8 | .def ergebnis = r18
|
9 |
|
10 | .set Frequenzbyte = 0xc0 ; Stellt 8Mhz ein
|
11 |
|
12 | rjmp reset ; Reset handler
|
13 | reti ; IRQ0 handler
|
14 | reti ; Pin change handler
|
15 | reti ; Timer1 compare match 1A
|
16 | reti ; Timer1 compare match 1B
|
17 | reti ; Timer1 overflow handler
|
18 | reti ; Timer0 overflow handler
|
19 | reti ; USI Start handler
|
20 | reti ; USI Overflow handler
|
21 | reti ; EEPROM Ready handler
|
22 | reti ; Analog Comparator handler
|
23 | reti ; ADC Conversion Handler
|
24 |
|
25 |
|
26 | reset: ldi temp1, RAMEND ; Init aus Datenblatt
|
27 | out SP, temp1
|
28 |
|
29 | ldi temp1, Frequenzbyte ; 8Mhz einstellen
|
30 | out OSCCAL, temp1
|
31 |
|
32 |
|
33 | MAIN:
|
34 | LDI temp, $10
|
35 | PUSH temp
|
36 | LDI temp, $20
|
37 | PUSH temp
|
38 | RCALL Addiere ; (siehe Text)
|
39 | POP ergebnis
|
40 | POP temp
|
41 | ENDE:
|
42 | RJMP ENDE ; (siehe Text)
|
43 |
|
44 |
|
45 | ADDIERE:
|
46 | PUSH ZH ; Z-Register sichern
|
47 | PUSH ZL ; (siehe Text)
|
48 |
|
49 | IN temp, SP ; Stackzeiger einlesen,
|
50 | MOV ZL, temp ; und nach ZL kopieren
|
51 | CLR ZH ; ZH löschen
|
52 | ADIW ZH:ZL, 6 ; Z-Register plus 6
|
53 | ; (siehe Text)
|
54 |
|
55 | PUSH R20 ; beide Arbeitsregister
|
56 | PUSH R21 ; sichern
|
57 |
|
58 | LD R20, Z ; ersten Parameter laden
|
59 | LD R21, -Z ; zweiten Parameter laden
|
60 | ADD R20, R21 ; beide Werte addieren
|
61 | ST Z, R20 ; und Ergebnis ablegen
|
62 |
|
63 | POP R21 ; beide Arbeitsregister
|
64 | POP R20 ; wiederherstellen
|
65 |
|
66 | POP ZL ; Z-Register
|
67 | POP ZH ; wiederherstellen
|
68 | RET
|