Ich hab es schon. Man sollte die passenden Sprünge zu Anfang nutzen.
Also, anbei die Version die funktioniert.
Code:;Im Sekunden Takt die LED's am Port D Schalten ;Quarz hat 3,6864MHZ .include "m8def.inc" ;Definitionsdatei laden .cseg ;Beginn eines Code-Segmentes ; ; .def temp = r16 .def counter = r17 .def leds = r18 .equ start = 256-122 .equ loops = 30 ;für genau eine Sekune 29,5081 ; .org 0x000 rjmp reset ;1 Reset Handler reti ;2 IRQ0 Handler reti ;3 IRQ1 Handler reti ;4 TC2 Compare Match reti ;5 TC2 Overflow reti ;6 TC1 Capture reti ;7 TC1 Compare Match A reti ;8 TC1 Compare Match B reti ;9 TC1 Overflow rjmp timer0 ;reti ;10 TC0 Overflow reti ;11 SPI Transfer Complete Handler reti ;12 UART RX Complete reti ;13 UART Data Empty reti ;14 UART TX Complete reti ;15 ADC Conversion Complete Interrupt Handler reti ;16 EEPROM Ready Handler reti ;17 Analog Comparator Handler reti ;18 TWI I²C Serial Interface reti ;19 Store Program Memory Ready reset: ldi temp,LOW(RAMEND) ;temp auf letzte Position im RAM setzen out spl,temp ;LB vom SP mit LB vom Ramende ldi temp,HIGH(RAMEND) ;temp auf letzte Position im RAM setzen out sph,temp ;HB vom SP mit HB vom Ramende ldi temp,0xff out ddrd,temp ldi temp,0b00001111 out portd,temp ldi temp, 1 ;Interrupt on Overflow out TIMSK, temp ldi temp, 0b00000101 ;alle 1024 Takte wird der Zähler out TCCR0, temp ;vom Timer0 um 1 inkrementiert ldi temp, start ;Bis der Zähler überläuft vergehen out TCNT0, temp ;122 * 1024 Takte = 124928 ; = 0,033889 sekunden ldi counter, loops ldi leds,0xff sei main: loop: rjmp loop ;------------------------------------- timer0: dec counter brne restart ldi counter, loops com leds out portd, leds restart: ldi temp, start out tcnt0,temp reti






Zitieren

Lesezeichen