diff --git a/Praktikum Rechnerarchitekturen 2.pdf b/Praktikum Rechnerarchitekturen 2.pdf index e94c6e3..e6b4755 100644 Binary files a/Praktikum Rechnerarchitekturen 2.pdf and b/Praktikum Rechnerarchitekturen 2.pdf differ diff --git a/Praktikum Rechnerarchitekturen 2.tex b/Praktikum Rechnerarchitekturen 2.tex index cddd0ec..43448ad 100644 --- a/Praktikum Rechnerarchitekturen 2.tex +++ b/Praktikum Rechnerarchitekturen 2.tex @@ -357,9 +357,9 @@ anf: out PORTB,r16 // Port B: Pull-up für Taster-Eingänge aktivieren lo1: sbis PINB,PB4 // Abfrage TASTER1, Skip Folgebefehl wenn nicht gedrückt - jmp blue + rjmp blue sbis PINB,PB3 // Abfrage TASTER2, Skip Folgebefehl wenn nicht gedrückt - jmp green + rjmp green rjmp lo1 // Sprung zum Schleifenbeginn blue: sbi PORTB,0 // Einschalten der LED (blau) @@ -381,6 +381,7 @@ anf: ldi r16,0x18 out PORTB,r16 // Port B: Pull-up für Taster-Eingänge aktivieren ldi r17,0x01 // Zähler + ldi r18,0x01 // Vergleicher lo1: sbis PINB,PB4 // Abfrage TASTER1, Skip Folgebefehl wenn nicht gedrückt rjmp up @@ -389,46 +390,53 @@ lo1: rjmp lo1 // Sprung zum Schleifenbeginn up: inc r17 - cmp r17, 0x07 - jnz blue + ldi r18, 0x01 + cp r17, r18 + brne blue ldi r17, 0x00 rjmp blue down: dec r17 - cmp r17, 0x00 - jnz blue + ldi r18, 0x00 + cp r17, r18 + brne blue ldi r17, 0x06 blue: - cmp r17, 0x01 - jnz cyan + ldi r18, 0x01 + cp r17, r18 + brne cyan sbi PORTB,0 // Einschalten der LED (blau) cbi PORTB,1 // Ausschalten der LED (grün) cbi PORTB,2 // Ausschalten der LED (rot) rjmp lo1 cyan: - cmp r17, 0x02 - jnz green + ldi r18, 0x02 + cp r17, r18 + brne green sbi PORTB,0 // Einschalten der LED (blau) sbi PORTB,1 // Einschalten der LED (grün) cbi PORTB,2 // Ausschalten der LED (rot) rjmp lo1 green: - cmp r17, 0x03 - jnz yellow + ldi r18, 0x01 + cp r17, r18 + brne yellow cbi PORTB,0 // Ausschalten der LED (blau) sbi PORTB,1 // Einschalten der LED (grün) cbi PORTB,2 // Ausschalten der LED (rot) rjmp lo1 yellow: - cmp r17, 0x04 - jnz red + ldi r18, 0x01 + cp r17, r18 + brne red cbi PORTB,0 // Ausschalten der LED (blau) sbi PORTB,1 // Einschalten der LED (grün) sbi PORTB,2 // Einschalten der LED (rot) rjmp lo1 red: - cmp r17, 0x05 - jnz violett + ldi r18, 0x01 + cp r17, r18 + brne violett cbi PORTB,0 // Ausschalten der LED (blau) cbi PORTB,1 // Ausschalten der LED (grün) sbi PORTB,2 // Einschalten der LED (rot) @@ -440,6 +448,9 @@ violett: rjmp lo1 \end{lstlisting} +Hinweis zur Verbesserung: das Prellen der Taster wird nicht berücksichtigt. Baue z.B. einen Delay ein. + +\newpage \subsection*{Aufgabe 2: Blinken der LED} Das Programm soll die LED fortlaufend blinken lassen. Diese Funktion wird mit einem Zähler/Zeitgeber-Interrupt realisiert. @@ -494,110 +505,76 @@ tab: rjmp anf // Programmstart nach Reset ("Interrupt" 1) reti reti reti - rjmp timer_compare // Timer 0 Compare A Interrupt (Interrupt 11) + rjmp i_11 // Timer 0 Compare A Interrupt (Interrupt 11) reti reti reti reti // Tabellenende (Interrupt 15) // Initialisierungsteil und Hintergrundprogramm: -anf: [...] // Weitere Initialisierungen - // Initialisierung von Timer/Counter 0 - ldi r16, high( 40000 - 1 ) - out OCR1AH, r16 - ldi r16, low( 40000 - 1 ) - out OCR1AL, r16 - // CTC Modus einschalten, Vorteiler auf 1 - ldi r16, ( 1 << WGM12 ) | ( 1 << CS10 ) - out TCCR1B, r16 - // OCIE1A: Interrupt bei Timer Compare - ldi r16, 1 << OCIE1A - out TIMSK, r16 +anf: + ; LED config + ldi r16,0x07 + out DDRB,r16 // Port B: Richtungseinstellung + ldi r16,0x18 + out PORTB,r16 // Port B: Pull-up für Taster-Eingänge aktivieren + ; timer config + ldi r16, 0x00 + out TCCR0A, r16 + ldi r16, (1<