lauflicht.asm


1
;Lauflicht für 5 LED's
2
3
;je nach gedrückter Taste sind 4 versch.Lauflichtvarianten sichtbar
4
5
;einfaches Programm um verschiedene Strings mit dem lpm-Befehl
6
;auszulesen und über LED anzeigen zu lassen
7
8
;an PB0 bis PB4 sind 5 LED's angeschlossen nach +
9
;an PD2 bis PD5 sind 4 Taster (Schalter) angeschlossen low-aktiv
10
11
12
13
.nolist
14
.include"C:\Programme\Atmel\AVR Studio\Appnotes\2313def.inc"
15
.list
16
17
18
init:   ldi R16, RAMEND
19
        out SPL, R16                        ; Stackpointer initialisieren
20
21
        ldi R16, 0xff
22
        out DDRB, R16                       ; PORTB Ausgang
23
        
24
        ldi R16, 0x00                       ; PORTD Eingang
25
        out DDRD, R16
26
        
27
        sbi portd,2                          ; pullupwid.
28
        sbi portd,3                          ; pullupwid.
29
        sbi portd,4                          ; pullupwid.
30
        sbi portd,5                          ; pullupwid.
31
32
33
34
start:
35
        ldi ZL, LOW(daten*2)                ; Adresse des Strings in den
36
        ldi ZH, HIGH(daten*2)               ; Z-Pointer laden
37
        in r16,PIND                         ; Taster einlesen
38
        com r16                             ; taster low-aktiv
39
        andi r16,0b00111100                 ; Taster ausmaskieren
40
        cpi r16,0b00000100                  ; Taster PD2 betätigt ?
41
        breq LED                            ; verzweige zu "LED"
42
        
43
        ldi ZL, LOW(daten3*2)               ; Adresse des Strings in den
44
        ldi ZH, HIGH(daten3*2)              ; Z-Pointer laden
45
        cpi r16,0b00100000                  ; Taster PD5 betätigt ?
46
        breq LED                            ; verzweige zu "LED"
47
        
48
        ldi ZL, LOW(daten2*2)               ; Adresse des Strings in den
49
        ldi ZH, HIGH(daten2*2)              ; Z-Pointer laden
50
        cpi r16,0b00010000                  ; Taster PD4 betätigt ?
51
        breq LED                            ; verzweige zu "LED"
52
                
53
        ldi ZL, LOW(daten1*2)               ; Adresse des Strings in den
54
        ldi ZH, HIGH(daten1*2)              ; Z-Pointer laden
55
        cpi r16,0b00001000                  ; Taster PD3 betätigt ?
56
        brne start                          ; verzweige zu "start"                 
57
      
58
59
      
60
61
LED:
62
        lpm                               ; Erstes Byte nach R0 lesen
63
        tst R0                            ; R0 auf 0 testen
64
        breq LED_end                      ; wenn 0 verzw. zu LED_end
65
        mov r16, r0                       ; Inhalt von R0 nach R16 kopieren
66
        rcall anzei                       ; UP "anzei"
67
        adiw ZL, 1                        ; Adresse des Z-Pointers um 1 erhöhen
68
        rjmp LED                          ; wieder zum Anfang springen
69
        
70
        
71
LED_end:
72
        rjmp start
73
74
75
anzei:
76
        mov r17,r16                       ;r16 nach r17 kopieren
77
        com r17                           ;invertieren,da LED's an+
78
        out PORTB, R17                    ;Ausgabe der Daten an LED's
79
        rcall delay                       ;Verzögerungsschleife 0,2s bei 4Mhz
80
        ret
81
        
82
        delay:                            ;erzeugt mit "AVRdelayloop"
83
        
84
        
85
        
86
          ldi  R18, $09
87
WGLOOP0:  ldi  R19, $A1
88
WGLOOP1:  ldi  R20, $D3
89
WGLOOP2:  dec  R20
90
          brne WGLOOP2
91
          dec  R19
92
          brne WGLOOP1
93
          dec  R18
94
          brne WGLOOP0
95
96
          ldi  R18, $03
97
WGLOOP3:  dec  R18
98
          brne WGLOOP3
99
          
100
          ret
101
          
102
          
103
104
daten:
105
.db 0b00000001,0b00000010,0b00000100,0b00001000,0b00010000,0x00 
106
daten1:
107
.db 0b00000001,0b00000011,0b00000111,0b00001111,0b00011111,0x00
108
daten2:
109
.db 0b00000001,0b00000011,0b00000110,0b00001100,0b00011000,0x00
110
daten3:
111
.db 0b00000100,0b00001010,0b00010001,0b00010101,0b00011111,0x00