Ich hab das Alles mal (ungetestet!) zusammengetippert, probiers mal so:
Für größere Projekte solltest du aber TIMSK0 ändern, sei/cli setzt ja gleich alle ints tot.Code:NOLIST .INCLUDE "m16def.inc" ; Headerdatei fuer Atmega 16 .LIST ; ; ; ============================================ ; R E G I S T E R D E F I N I T I O N E N ; ============================================ .DEF rmp = R16 ; Vielzweckregister ; ; ; ============================================== ; R E S E T V E K T O R ; ============================================== ; .CSEG .ORG $0000 rjmp Main ; Reset-Vektor ; ============================================== ; INTERRUPTS ; ============================================== .ORG OVF0addr ; Timer 0 overflow rjmp schalten ; ; ============================================ ; H A U P T P R O G R A M M I N I T ; ============================================ ; Main: ; ; --- EDIT: init stack LDI rmp, HIGH(RAMEND) ; Oberes Byte OUT SPH, rmp ; an Stapelzeiger LDI rmp, LOW(RAMEND) ; Unteres Byte OUT SPL, rmp ; an Stapelzeiger ldi rmp,0x02 // PORT A1 Ausgang, rest Eingang out DDRA,rmp ldi rmp,0x00 out PORTA,rmp // PORT A initialisieren sbi PORTA,0 // Pull-up für PORT A0 aktivieren //// Timer 0 konfigurieren ldi rmp,0x05 // Prescaler 1024 out TCCR0,rmp ldi rmp,0x01 // Interrupt bei Timer Overflow out TIMSK,rmp cli // Globale Interrupts deaktivieren ; ; ============================================ ; P R O G R A M M - S C H L E I F E ; ============================================ ; Loop: wdr sbic PINA,0 ; EDIT: nächsten Befehl überspringen, wenn Taster *gedrückt* ist rjmp loop // Zurueck nach Loop ; --- EDIT: timer auf 0 und globale ints LDI rmp, 0 OUT TCNT0, rmp sei // Timer starten rjmp loop // weiter im main loop /// ----------------------------------- /// Zum ein und ausschalten der LED schalten: in rmp,PINA // Zustand von LED einlesen ldi R17, 0xFF // eor R17,rmp // exor um LED Zustand zu wechseln sbrc R17,1 // LED einschalten überspringen, wenn beim exor 0 rauskommt. sbi PORTA,1 // LED einschalten sbrs R17,1 // LED ausschalten überspringen, wenn beim exor 1 rauskommt. cbi PORTA,1 // LED ausschalten ; --- EDIT CLI RETI /// -----------------------------------







Zitieren

Lesezeichen