1 | .include "tn26def.inc"
|
2 |
|
3 | .org 0x000 ; Programm kommt an Anfang von PROM
|
4 |
|
5 | .def temp = r16
|
6 | .def temp1 = r17 ; temporäre Register definieren
|
7 | .def ergebnis = r18
|
8 |
|
9 | .set Frequenzbyte = 0xc0 ; Stellt 8Mhz ein
|
10 |
|
11 | rjmp reset ; Reset handler
|
12 | reti ; IRQ0 handler
|
13 | reti ; Pin change handler
|
14 | reti ; Timer1 compare match 1A
|
15 | reti ; Timer1 compare match 1B
|
16 | reti ; Timer1 overflow handler
|
17 | reti ; Timer0 overflow handler
|
18 | reti ; USI Start handler
|
19 | reti ; USI Overflow handler
|
20 | reti ; EEPROM Ready handler
|
21 | reti ; Analog Comparator handler
|
22 | reti ; ADC Conversion Handler
|
23 |
|
24 |
|
25 | reset: ldi temp1, RAMEND ; Init aus Datenblatt
|
26 | out SP, temp1
|
27 |
|
28 | ldi temp1, Frequenzbyte ; 8Mhz einstellen
|
29 | out OSCCAL, temp1
|
30 | ;---------------------------------------------------------------
|
31 |
|
32 | MAIN:
|
33 | LDI Temp, $10
|
34 | PUSH Temp
|
35 | LDI Temp, $20
|
36 | PUSH Temp
|
37 | RCALL Addiere ;ursprüglich nur call
|
38 | POP Ergebnis
|
39 | POP Temp
|
40 |
|
41 | ; für Tiny26: kein SPL und SPH, sondern nur SP und
|
42 | ; und aus tn26def.inc ist ZL = r30, also nicht ZLow
|
43 |
|
44 |
|
45 | Addiere:
|
46 | in ZL, SP ;anstatt mov Zlow, SPL
|
47 | inc ZL ;anstatt add ZLow, 4
|
48 | inc ZL ;damit nicht noch ein register benutzt wird
|
49 | inc ZL ;um ZL um 4 zu erhöhen
|
50 | inc ZL
|
51 |
|
52 | PUSH R20
|
53 | PUSH R21
|
54 | LD R20, Z
|
55 | LD R21, -Z
|
56 | ADD R20, R21
|
57 | ST Z, R20
|
58 | POP R21
|
59 | POP R20
|
60 | RET
|
61 | ; ergebnis ist 48 oder 0x30, also richtig
|
62 | ;da 0x10 zu 0x20 addiert werden sollte
|