Ich hab das Alles mal (ungetestet!) zusammengetippert, probiers mal so:
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
/// -----------------------------------
Für größere Projekte solltest du aber TIMSK0 ändern, sei/cli setzt ja gleich alle ints tot.
Lesezeichen