;------------------------------------------------------------------------------------------------------------------------------------------ ; Datum und Autor - So.28.06.2015 / Josh ;------------------------------------------------------------------------------------------------------------------------------------------ ;------------------------------------------------------------------------------------------------------------------------------------------ ; Programm: Aufbau eines einfach D-Flip-Flops ;------------------------------------------------------------------------------------------------------------------------------------------ ;------------------------------------------------------------------------------------------------------------------------------------------ ; Definition des AVRs (In diesem Fall ist es ein ATMEGA8) ;------------------------------------------------------------------------------------------------------------------------------------------ .nolist .include "m8def.inc" ; ATMEGA8 von Atmel .list ;------------------------------------------------------------------------------------------------------------------------------------------ ; Definition der Ein-und Ausgänge an den verschiedenen Ports ;------------------------------------------------------------------------------------------------------------------------------------------ ldi r16, 0b11111111 ; Alle Bits in Register 16 auf Hi setzen out DDRB, r16 ; Alle Pins am Port B als Ausgang konfiguriert ("0" bedeutet Eingang, "1" bedeutet Ausgang) ldi r16, 0b00000000 ; Alle Bits in Register 16 auf Low setzen out DDRD, r16 ; Alle Pins am Port D als Eingang konfiguriert ("0" bedeutet Eingang, "1" bedeutet Ausgang) ;------------------------------------------------------------------------------------------------------------------------------------------ ; Taktfrequenz festlegen ;------------------------------------------------------------------------------------------------------------------------------------------ .EQU fq = 4000000 ; Quazfrequenz wird festgelegt (Hier 4000000 Impulse pro Sekunde ;------------------------------------------------------------------------------------------------------------------------------------------ ; PullUp-Widerstände aktivieren ;------------------------------------------------------------------------------------------------------------------------------------------ ldi r16, 0b11111111 ; An allen Pins von Port D die Pullup-Widerstände aktivieren out PORTD, r16 ; Dies geht deshalb durch eine Ausgabe nach PORTD, da ja der PORT auf Eingang gestellt ist ;------------------------------------------------------------------------------------------------------------------------------------------ ; Hauptprogramm - Aufbau es D-Flip-Flops. Taster drücken zum einschalten und den gleichen Taster drücken um wieder abzuschalten. ;------------------------------------------------------------------------------------------------------------------------------------------ LEDaus: ldi r16, 0b11111111 ; Alle 8 BITS in R16 auf 1 setzen, "Hi" bedeutet LED aus, da "Low" benötigt wird. out PORTB, r16 ; Gib Inhalt von Register 16 an PortB aus. Alle LEDs sind aus ;------------------------------------------------------------------------------------------------------------------------------------------ ; Es geht los. Taster 1 drücken um die LED 1 anzuschalten ;------------------------------------------------------------------------------------------------------------------------------------------ Taster1An: sbic PIND, 0 ; Den nächsten Befehl überspringen, sofern der Taster 1 gedrückt ist rjmp Taster1An ; Taste war nicht gedrückt also zurück zu "Taster1" ;------------------------------------------------------------------------------------------------------------------------------------------ ;Taster 1 wurde gedrückt, die erste LED am Ausgang (Port B) wird eingeschaltet ;------------------------------------------------------------------------------------------------------------------------------------------ LEDan: ldi r16, 0b11111110 ; Setze das erste Bit im Register 16 auf Low out PORTB, r16 ; Gib Inhalt von Register 16 an PortB aus. Die erste LED leuchtet ;------------------------------------------------------------------------------------------------------------------------------------------ ; Zeitverzögerung von 800 ms und abwarten der Low-Flanke von Taster 1 ;------------------------------------------------------------------------------------------------------------------------------------------ Zeit: ;------------------------------------------------------------------------------------------------------------------------------------------ ; Taster 1 erneut drücken, um die LED wieder auszuschalten ;------------------------------------------------------------------------------------------------------------------------------------------ Taster1Aus: sbic PIND, 0 ; Den nächsten Befehl überspringen, sofern der Taster 1 gedrückt ist rjmp Taster1Aus ; Ansonsten geht es zurück zu "LEDaus" ;------------------------------------------------------------------------------------------------------------------------------------------ ; LED wird ausgeschaltet ;------------------------------------------------------------------------------------------------------------------------------------------ LEDaus2: ldi r16, 0b11111111 ; Wieder alle 8 Bits in R16 auf 1 setzen um die LED auszuschalten out PORTB, r16 ; Gib Inhalt von Register 16 an PortB aus. Die LED erlischt wieder ;------------------------------------------------------------------------------------------------------------------------------------------ ; Zeitverzögerung von 800 ms und abwarten der Low-Flanke von Taster 1 ;------------------------------------------------------------------------------------------------------------------------------------------ Zeit2: ;------------------------------------------------------------------------------------------------------------------------------------------ ; Endlosschleife ;------------------------------------------------------------------------------------------------------------------------------------------ Loop: rjmp Taster1An ; Sprung zurück zum Label "Taster1An" ;------------------------------------------------------------------------------------------------------------------------------------------ ; Ende ;------------------------------------------------------------------------------------------------------------------------------------------ Ende: