ok, hab noch eins, zwar nicht kleiner, sondern mit 13 Befehlen, dafür aber mit Timer
Was mich wirklich wundert ist, ist das es funktioniert, Simulieren klappt bei mir nicht.

Allerding ist die Sekunde doch ein wenig zu schnell (0,9536743 Sekunden, bei einem Quarz von 1,048576MHZ wären es genau 1sek) und nicht für einenen anderen Quarz anpasspar...
(erst wieder bei einem Quarz von 8,388608MHZ wieder genau, oder bei einem mit 33,554432MHZ oder 134,21773MHZ *g*)

Code:




.include "m16def.inc"

.org 0x01E
rjmp TIM1_OVF				;Timer1 Overflow Handler


start:

sbi ddrb, 2                                  ;PinB 2 als Ausgang

ldi r16, (1<<INT0)			;Int0 aktivieren
out GICR, r16


ldi r16,0b00000010                      ;Vorteiler auf 8
out tccr1b,r16 
   
ldi r16,(1<<toie1)                       ;auf overflow stellen
out timsk,r16   
sei                                             ;Interupts aktivieren


ende:
rjmp ende


TIM1_OVF:

com r18
out PortB, r18
reti
Wüste sonst leider gerade nicht wie man das ganze kleiner machen könnte, die Idee von Rofo88 war eigentlich schon recht gut, man sollte aber noch schauen ob das überhaupt richtig funktioniert.

Kommt halt drauf an wie man es sieht, eigentlich stehen im Code ja noch über 8000 Nop's anderseits kann man sich die bei einem neuen µC sparen.

Aber wie ist das bei einem gebrauchten?
Der Flash wird ja nicht jedesmal komplett gelöscht, oder?
Sobald also ein älteres größeres Programm vorher drin stand dürfte der Code nicht meher funktionieren.

Aber ich denke mit nur drei Befehlen kann man nur irgendwie tricksen, anderst ist das gar nicht möglich...

Gruß,
Mehto