TEST.ASM


1
        .include "m128def.inc"
2
3
4
  .nolist              ; include-file nicht in Listing
5
  .include  "m128def.inc"    ; Definitionen für ATmega 128 einbinden
6
7
8
  .list              ; Listing erstellen
9
10
11
  .def  akku    = r16    ; r16 als Rechenregister "akku" definieren
12
  .def  msTimer    = r23    ; r23 als Zeit-Einstellungsregister
13
      ; r24 als Zählregister
14
  .def  templ    = r17    ; Zwischenspeicher 1
15
  .def  temp2    = r18    ; Zwischenspeicher 2
16
  .def  PulsCounter  = r19
17
  .equ  key_pin    = PINA    ; Tasterpins
18
  .equ  key_port  = PORTA    ; Datenregister (Taster)
19
  .equ  key_ddr    = DDRA    ; Datenrichtungsregister (Taster)
20
21
  .equ  led_port  = PORTB    ; Datenregister (LED)
22
  .equ  led_pin    = PINB
23
  .equ  led_ddr    = DDRB    ; Datenrichtungsregister (LED)
24
25
26
  .cseg
27
28
;-------Adress Tabelle für Interrupt-Vektoren-----------------------------
29
30
  .org    0x0000        ; Interrupt-Vektor für RESET
31
  rjmp    Init
32
  
33
  .org    0x0002        ; Interrupt-Vektor für externen Interrupt 1
34
  rjmp    Extint1
35
36
  .org    0x0018        ; Interrupt-Vektor für Timer/Counter-0-Interrupt
37
  rjmp    TC1int
38
39
  .org    0x0045        ; Ende der Interrupt-Vektor-Tabelle
40
41
;-------Macros-------------------------------------------------------------
42
; Pin Toggeln
43
.macro TogPin
44
  SBIS    @0,@1        ; Wenn Bit (@1) in I/O-Reg. (@2) gesetzt, überspringe nächsten Befehl
45
  rjmp    SetPin
46
ClrPin:
47
  cbi      @0,@1
48
  rjmp    TogPinx
49
SetPin:
50
  SBI      @0,@1
51
TogPinx:
52
.endmacro
53
;--------------------------------------------------------------------------
54
  
55
Init:              ; Beginn des Hauptprogrammes
56
57
  ldi      r16,LOW(RAMEND)    ; Stack Initialisieren
58
  out      SPL,r16
59
  ldi      r16,HIGH(RAMEND)
60
  out      SPH,r16
61
62
  ser      akku        ; Alle Bits in Akku setzen
63
  out      DDRB,akku      ; PORTB als Ausgang (alle Bits 1)
64
65
66
67
  ldi      templ,0
68
  out      OCR1AH,templ
69
  
70
  ldi      msTimer,0x99
71
  out      OCR1AL,msTimer
72
73
  ldi      templ,0x0
74
  out      TCNT1L,templ
75
76
  ldi      templ,0x0
77
  out      TCNT1H,templ
78
79
  ldi      akku,0b00011000
80
  out      TIMSK,akku
81
82
  ldi      akku,0b00001100
83
  out      TCCR1B,akku      ; Übertrage auf Timer Counter Control Register
84
85
  
86
  ldi      PulsCounter,255
87
88
89
  
90
91
Prog:
92
  
93
  in      templ,TIFR
94
  SBRC    templ,4
95
  rcall    Count
96
  rjmp    Prog
97
98
99
;-------Unterprogramme----------------------------------------------------
100
Extint1:              ; ISR für externen Interrupt 1
101
102
  reti
103
104
Count:
105
  TogPin    led_port,0
106
  in r16,TIFR
107
  sbr r16,1<<OCF1A 
108
  out TIFR,r16
109
  ret
110
111
TC1int:                ; ISR für Timer/Counter 1 Interrupt  
112
  
113
  reti