stacktst.asm


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