Hallo Robert,
jetzt hatte doch jemand Erbarmen und hat mir verraten, dass er einen USB-Stick hat...
Ich habe mal die relevanten Teile des Disassembly rauskopiert (die 1000 NOPs dazwischen also nicht...).
Code:
TriggerISR
C:0x0800 C0E0 PUSH ACC(0xE0)
C:0x0802 C0D0 PUSH PSW(0xD0)
C:0x0804 75D000 MOV PSW(0xD0),#0x00
C:0x0807 C007 PUSH 0x07
C:0x0809 5380F8 ANL P0_DATA(0x80),#IP1(0xF8)
C:0x080C E508 MOV A,counter(0x08)
C:0x080E 14 DEC A
C:0x080F 6012 JZ C:0823
C:0x0811 14 DEC A
C:0x0812 6014 JZ C:0828
C:0x0814 14 DEC A
C:0x0815 6018 JZ C:082F
C:0x0817 14 DEC A
C:0x0818 601A JZ C:0834
C:0x081A 2404 ADD A,#0x04
C:0x081C 703C JNZ C:085A
C:0x081E 85B00A MOV time1(0x0A),P3_DATA(0xB0)
C:0x0821 8037 SJMP C:085A
C:0x0823 85B00B MOV time2(0x0B),P3_DATA(0xB0)
C:0x0826 8032 SJMP C:085A
C:0x0828 85B00C MOV time3(0x0C),P3_DATA(0xB0)
C:0x082B C2AF CLR EA(0xA8.7)
C:0x082D 802B SJMP C:085A
C:0x082F 85B009 MOV phase(0x09),P3_DATA(0xB0)
C:0x0832 8026 SJMP C:085A
C:0x0834 AFB0 MOV R7,P3_DATA(0xB0)
C:0x0836 EF MOV A,R7
C:0x0837 14 DEC A
C:0x0838 6010 JZ C:084A
C:0x083A 14 DEC A
C:0x083B 6013 JZ C:0850
C:0x083D 14 DEC A
C:0x083E 6016 JZ C:0856
C:0x0840 2403 ADD A,#0x03
C:0x0842 7016 JNZ C:085A
C:0x0844 C201 CLR usePhase(0x20.1)
C:0x0846 C200 CLR mainc(0x20.0)
C:0x0848 8010 SJMP C:085A
C:0x084A D201 SETB usePhase(0x20.1)
C:0x084C C200 CLR mainc(0x20.0)
C:0x084E 800A SJMP C:085A
C:0x0850 C201 CLR usePhase(0x20.1)
C:0x0852 D200 SETB mainc(0x20.0)
C:0x0854 8004 SJMP C:085A
C:0x0856 D201 SETB usePhase(0x20.1)
C:0x0858 D200 SETB mainc(0x20.0)
C:0x085A 0508 INC counter(0x08)
C:0x085C 850880 MOV P0_DATA(0x80),counter(0x08)
C:0x085F 53B4FB ANL IRCON0(0xB4),#CCU6_CC60RH(0xFB)
C:0x0862 D007 POP 0x07
C:0x0864 D0D0 POP PSW(0xD0)
C:0x0866 D0E0 POP ACC(0xE0)
C:0x0868 32 RETI
InterruptInit:
C:0x0883 75F808 MOV IP1(0xF8),#counter(0x08)
C:0x0886 75F904 MOV IPH1(0xF9),#0x04
C:0x0889 43B804 ORL IP(0xB8),#0x04
C:0x088C 75B93B MOV IPH(0xB9),#0x3B
C:0x088F 75B714 MOV EXICON0(0xB7),#0x14
C:0x0892 53A8FB ANL IEN0(0xA8),#CCU6_CC60RH(0xFB)
C:0x0895 43E804 ORL IEN1(0xE8),#0x04
C:0x0898 43E808 ORL IEN1(0xE8),#counter(0x08)
C:0x089B 22 RET
main:
C:0x089C 1208B0 LCALL PortInit(C:08B0)
C:0x089F 120883 LCALL InterruptInit(C:0883)
C:0x08A2 E4 CLR A
C:0x08A3 F508 MOV counter(0x08),A
C:0x08A5 D2AF SETB EA(0xA8.7)
C:0x08A7 E508 MOV A,counter(0x08)
C:0x08A9 C3 CLR C
C:0x08AA 9405 SUBB A,#0x05
C:0x08AC 40F9 JC C:08A7
C:0x08AE 80FE SJMP C:08AE
PortInit:
C:0x08B0 75860B MOV P0_DIR(0x86),#time2(0x0B)
C:0x08B3 E4 CLR A
C:0x08B4 F591 MOV P1_DIR(0x91),A
C:0x08B6 F5B1 MOV P3_DIR(0xB1),A
C:0x08B8 4391C0 ORL P1_DIR(0x91),#T2CON(0xC0)
C:0x08BB 438604 ORL P0_DIR(0x86),#0x04
C:0x08BE 22 RET
Die erste Spalte ist jeweils die Adresse.
Auf Adresse 0043 steht ein Jump auf die TriggerISR (sprich, das ist der Interrupt-Vektor für diesen Interrupt).
Wieso habe ich einen Interrupt für 2 Prioritäten? Das mit IP und IPH kommt daher, dass es 4 Prioritätsstufen gibt und die 2 Bit auf die zwei Register verteilt sind.
Nochmal vielen Dank und viele Grüße
Lesezeichen