Forum: Mikrocontroller und Digitale Elektronik C51 interrupt deklarieren und definieren und kontrollieren


von Entwickler (Gast)


Lesenswert?

Hallo Leute,

interrupt.c
void adc_isr(void) interrupt 6 /* using 0 */ {}
void spi_isr(void) interrupt 7 /* using 0 */ {}

main.c
void main() { while(1) {} }

startup.a51
// default von Keil
// hier verstehe ich nicht alles

// build
C51.exe interrupt.c
BL51.exe startup.obj,main.obj,interrupt.obj,C51S.LIB TO main.ABS 
RAMSIZE(256) NODEFAULTLIBRARY
OH51.exe main.ABS

in main.M51 sehe ich unter CODE MEMORY nicht, dass die interrupts
entsprechend dem Datenblatt an den Adressen

['0x03', '0x0B', '0x13', '0x1B',
'0x23', '0x2B', '0x33', '0x3B',
'0x43', '0x4B', '0x53', '0x5B']

untergebracht sind. Die Interrupts passen u.U. nicht an diese
Adressen, aber ich müsste doch zumindest JMP oder ähnliches dort sehen.
Hier ist was M51 steht.

              *   *    C O D E   M E M O R Y    *   *  
            CODE    0000H     0003H     ABSOLUTE
            CODE    0003H     0008H     UNIT
            CODE    000BH     0003H     ABSOLUTE
            CODE    000EH     000BH     UNIT
            CODE    0019H     0001H     UNIT
            CODE    001AH     0001H     UNIT


Erstaunlicherweise funktionieren die Interrupts.
Hat jemand ein Rat?

von René K. (king)


Lesenswert?

Vector = num * 8 + 3

Das ergibt 51 (0x33) für interrupt 6 und 59 (0x3B) für interrupt 7. Dein 
Auszug hört allerdings schon bei 0x1A auf, der interessante Teil fehlt. 
Wie sieht's denn da aus?

von Thomas Z. (usbman)


Lesenswert?

Entwickler schrieb:
> // build
> C51.exe interrupt.c
hier fehlt ein

c51.exe main.c
a51.exe startup.asm
> BL51.exe startup.obj,main.obj,interrupt.obj,C51S.LIB TO main.ABS
> RAMSIZE(256) NODEFAULTLIBRARY
> OH51.exe main.ABS

zeige bitte main.hex

: Bearbeitet durch User
von Thomas Z. (usbman)


Lesenswert?

Entwickler schrieb:
1
CODE    0000H     0003H     ABSOLUTE -> startup.a51
2
CODE    0003H     0008H     UNIT
3
CODE    000BH     0003H     ABSOLUTE -> timer0 irq vect
4
CODE    000EH     000BH     UNIT
5
CODE    0019H     0001H     UNIT
6
CODE    001AH     0001H     UNIT
der Auszug passt nicht zu deinem gezeigten Programm. Im m51 File ist ein 
irq vector für timer0 zu finden, das fehlt in deinem Programm

: Bearbeitet durch User
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.