2011-01-04 8 views

Antwort

3

Der AT89C2051 Teil unterstützt definitiv die ACALL Anweisung (so behauptet die data sheet und ich habe es erfolgreich selbst).

Was ist der genaue Fehler, den Sie in jedem Assembler sehen? Kompiliert der Rest Ihrer Quelle OK?

Können Sie die genaue Quelle, die einen Fehler gibt, posten (oder ein kleines Beispiel erstellen, das das Problem veranschaulicht, wenn der Code selbst vertraulich ist)?

0

Ich habe es gerade herausgefunden. Das Unterprogramm Definition muss zuerst gehen, bevor sie anrufen:

org 0 
    sjmp start 

subroutine1: 
    . 
    . 
    . 
    ret 

start: 
    . 
    . 
    . 
    acall subroutine1 

Dank psmears für die Bestätigung, dass „ACALL“ Anweisung wirklich für AT89C2051 funktioniert.

@Alle, Sie können diese Antwort abstimmen, wenn dies Ihnen geholfen hat. Vielen Dank.

+2

Sie sollten später in Ihrer Quelldatei Unterprogramme aufrufen können. Wie dies zu tun ist, hängt von Ihrem Assembler ab (Keil/Assem-51/etc), aber wenn es eine Option für die "Zwei-Pass-Assembly" gibt, sollte das den Trick machen ... – psmears