code at 0 //initialisieren und Interupt Freischalten include Reg51.inc sjmp init org 0003h acall taster reti init:setb EX0 clr IT1 //notwendig? setb IT0 mov dptr,#zahlen loop:acall ausgabe //Hauptprogramm zur ausgabe der Zahl setb EA //aktivieren des Interupts nachdem er jedes mal in der ISR ausgeschaltet wird sjmp loop ausgabe:clr p3.7 //ausgabe der Zahl mov A,R0 movc A,@A+dptr mov P2,A setb p3.6 acall warte clr p3.6 mov A,R1 movc A,@A+dptr mov P2,A setb p3.7 acall warte ret warte:mov R2,#50d //warteschleife damit Ziffern erkennber sind M1:djnz R2,M1 ret taster:clr EA //ISR Unterprogramm das R0 erhöht und bei R0=10 R0=0 setzt und R1 erhöht, wenn R1=10 R1=0 inc R0 cjne R0,#10d,sprung mov R0,#0d inc R1 cjne R1,#10d,sprung mov R1,#0d sprung:ret zahlen:DB 7Eh,12h,0BCh,0B6h,0D2h,0E6h,0EEh,32h,0FEh,0F6h //Ziffern für 7-Seg in der Reihenfolge von 0-9 end