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
|