.include "tn26def.inc" ;@ 8Mhz .def work = r16 .def loop = r17 ;********************************************** ldi work, RAMEND ;Stackpointer initialisieren out SP, work ;********************************************** ;+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Projekt Anfang ;*** Hauptprogrqaamm *** ldi work, 0b00000111 ;PortA (Datenrichtungsregister setzen) out DDRA, work ldi work, 0b11111010 ;PortB (Datenrichtungsregister setzen) out DDRB, work sbi PortB, 3 ;Ein unnützer test ob die initialisierung der Ports erfolgreich war. cbi PortB, 6 ;Wer weiß was da drann hängt... led_loop: ;Eine kleine LED blink Schleife. sbi PortA, 2 ;LED einschalten (leucht :D) rcall wait1s ;Warte 1 Sekunde (1Hz @ 8Mhz) cbi PortA, 2 ;LED ausschalten (nicht leucht :|) rcall wait1s ;Warte 1 Sekunde (1Hz @ 8Mhz) rjmp led_loop ;*********************** ;~~~ Unterprogramme ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ wait1s: ;Eine Schleife die die wit_01s Schleife "loop" mal ausführt. ldi loop, 10 ;Loop muss 10 sein denn 10*0.1(wait_01s) = ???? --> Rischtisch !!! 1 wt1s_0: ;Schleifeninterne sprungmarke (Fachchinesisch :D) dec loop ;loop um1 verringern breq next1 ;Wenn loop = 0 springe zu next1 und damit aus der Schleife raus. rjmp wt1s_0 next1: ret ;~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ wait_01s: ;Eine Schleife die eine Pause von 0.1sek (bei 8Mhz) bewirkt. ldi r18, 0x5F wt_0: ldi r19, 0x17 wt_1: ldi r20, 0x76 wt_2: dec r20 brne wt_2 dec r19 brne wt_1 dec r18 brne wt_0 ldi r18, 0x01 wt_3: dec r18 brne wt_3 nop ret ;~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ;+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Projekt Ende