Für dieses Forum muß Javascript im Browser aktiviert werden!
Kommentar: Einfügen von HTML im Kommentar: Link einfügen: <a href="LINKURL" target="_blank">LINKTITEL</a> Bild einfügen: <img src="BILDURL"> Text formatieren: <b>fetter Text</b> <i>kursiver Text</i> <u>unterstrichener Text</u> Kombinationen sind auch möglich z.B.: <b><i>fetter & kursiver Text</i></b> C2 Quellcode formatieren: <code>Quellcode</code> ASM Quellcode formatieren: <asm>Quellcode</asm> (Innerhalb eines Quellcodeabschnitts ist kein html möglich.) Wichtig: Bitte mache Zeilenumbrüche, bevor Du am rechten Rand des Eingabefeldes ankommst ! > Hallo Harald, > > Warum führst Du am Anfang der Routine "main" zweimal pop aus ?? > Denn dieses zweimalige pop definiert so gesehen schon den C2-Rücksprung. > Deshalb muß dies <u>immer</u> unmittelbar vor dem RETS bzw. in C direkt > am Ende der Funktion stehen ! > > Außerdem kannst Du hier nicht einfach in C definieren, daß irgendeine Routine > bei einem Interrupt ausfegührt wird ! > Dazu mußst Du die Interrupt-Vektoren im OS anpassen. > > Und diese lauten von CAPCOM16 bis 26 so: > <asm> > 0xc0: JMPS 0xc0 > 0xc4: JMPS 0xc4 > 0xc8: JMPS 0xc8 > 0xcc: JMPS 0x1e5e CAPCOM Register 19 (FRQ0/DCF77) > 0xd0: JMPS 0xd0 > 0xd4: JMPS 0xd4 > 0xd8: JMPS 0xd8 > 0xdc: JMPS 0xdc > 0xe0: JMPS 0xe0 > 0xe4: JMPS 0xe4 > 0xe8: JMPS 0x9dbc CAPCOM Register 26 > </asm> > Du siehst, nicht definierte Routinen enden in einer Endlosschleife. > > MfG André H. > > > > Hallo, > > > > hier noch der C-Quellcode: > > > > C-Code--------------------------- > > > > /* impuls.c */ > > > > #include <REG164CH.h> > > > > //Hier die Interruptroutine. Wenn sie nicht auskommentiert ist, geht dar nichts mehr > > > > /*_interrupt (0xF4) void > > timer_stop (void) > > { > > CC16 = 0x0FFF; > > CC17 = 0x0FFF; > > }*/ > > > > void main() > > { > > #pragma asm > > > > pop R1 > > pop R2 > > > > #pragma endasm > > > > int i = 0xFFFF; > > /* Timerregister Initialisieren */ > > /* Reload-Register auf 0 setzen */ > > T7REL = 0x0; > > /* Steuerungsregister für die CapCom-Timer einstellen */ > > T78CON = 0x3; > > //T7M = 0; Timer 7: Timerbetrieb > > //T7I = 0x3; Prescaler für Takt: T=210ms, dTmin=3,2us > > > > /* Interruptsteuerung für Timer 7 */ > > > > T7IC = 0x7F; > > /* T7IE: IRQ enable */ > > /* ILVL = 0xF; Interruptpriorität max. */ > > /* GLVL = 0x3; Gruppenpriorität max. */ > > > > /* Steuerungsregister für die Vergleichsregister einstellen */ > > CCM4 = 0x77; > > /*ACC16 = 0; Compare-Register CC16 zu Timer 7 zuordnen > > ACC17 = 0; Compare-Register CC17 zu Timer 7 zuordnen > > CCMOD16 = 0x7; Set output on each match für CC16 > > CCMOD17 = 0x7; Set output on each match für CC17 */ > > > > /* Werte in Vergleichsregister schreiben */ > > CC16 = 0x8000; /* Compare-Register 16: 50% */ > > CC17 = 0x8000; /* Compare-Register 17: 50% */ > > T7R = 1; /* Timer 7: Start */ > > > > i = 0x8000; > > //while(T7IR != 1) > > while(i > 0) > > { > > i = i - 1; > > CC16 = i; > > CC17 = i; > > } > > T7R = 0; > > } > > > > > > C-Code-Ende------------------ > > > > Problem 1: CC16 bzw. CC17 lassen sich nicht dekrementieren. > > Problem 2: Wenn der Programmteile für die Dekrementierung der Vergleichsregister herausgenommen > > wird und stattdessen die Interruptroutine aktiviert wird, dann rührt sich gar nichts mehr. > > > > Was mache ich da falsch? > > > > Gruß, > > Harald