Kleines Programm geht nicht

Gast #130289
Lesenswert?

Hi, ist leider ein doppelpost, habs falsch reingeschrieben.

Mit diesem Programm möchte ich erzielen, einfach eine Led mit den 2
Interuppt`s per PWM heller oder dunkler zu machen. Doch mein Problem
ist, das
beim Debugger bei LJMP Init nicht auf Init sondern gleich am Anfang in
den zweiten Interuppt springt. Hab ich da was falsch gemacht?




INCLUDE 89c52.mc




LJMP Init             'Überspringe Interruptroutine nach einem Reset



(0003h): ;Interuppt 0


  INC R0
  IF R0 > #DFh THEN MOV R0,#DFh

  RETI

(0013h): ;Interuppt 1


  DEC R0
  IF R0 < #2Fh THEN MOV R0,#2Fh

  RETI


(000Bh):        'Einsprungadresse Interrupt Timer 0

  MOV TH0,#FFh      'High Byte vom Timer 0 setzen
  MOV TL0,R0      'Low Byte vom Timer 0 setzen
  SETB P0.0
  CLR P0.0



RETI          'Zurück aus der Interruptbehandlung ins Programm


'************************************************


Init:

  MOV SP,#10h      'Stackpointer hinter die Registerbank 1
  MOV R0,#DFh




  'Grundeinstellung des Timer 0 und der dazugehörigen Interrupts:
  MOV TMOD,#01h       'Timer 0 Modus = 1
  MOV TH0,#FFh      'High Byte vom Timer 0 setzen
  MOV TL0,R0      'Low Byte vom Timer 0 setzen
  SETB EA        'Interruptbehandlung aktivieren
  SETB ET0        'Interrupt für Timer 0 aktivieren
  SETB TR0        'Timer 0 Start
  SETB EX0    ;Interuppt 0 ein
  SETB EX1    ;Interuppt 1 ein
  SETB P0.0

'************************************************

Programm:


  JMP Programm
Gast #130290
Lesenswert?

Sieht nach 8051-Code aus aber gibs da wirklich so was wie IF und THEN
als Assemblerbefehle???
In Basic OK aber in Assembler?
Oder hast Du da nen Basic-Compiler in dem man direkt ASM-Befehle
schreiben kann?
Wer mir neu.

Gruß
Andi
Gast #130293
Lesenswert?

Hallo Andi.

Tut mir leid, ich bin nicht faul. Ich hatte dieses Problem schon öfter,
nur bin ich bis jetzt nicht draufgekommen. Ich meine mit LJMP Init muß
er doch zu Init springen, oder nicht? Hab ich da was übersehen oder von
der Programmstruktur was falsch gemacht?

Warum bezeichnest du mich als faul?

Ich möchte dieses kleine Programm noch bei einem großen Programm
einbinden, und es funktioniert nicht mal so.

Wenn ich dann nach langem nicht draufkomme, dann werde ich doch mal ins
Forum schreiben darfen, damit mir dann klügere Leute weiterhelfen
können.

Gruß Avus
Gast #130294
Lesenswert?

Jetzt nims nicht übel oder hast Du den Wink übersehen?
Habe zwar schon nen Überblick über die ASM-Befehle vom 8051 aber bis
jetzt noch nix mit 8051 gemacht.
Habe bisher "nur" was mit AVR-ASM, 68000-ASM und ganz früher was mit
Z80-ASM gemacht.

Setzt Du mit den Hex-Zahlen in Klammern eigentlich die Prog-Adresse?
Liegts vielleicht daran?

LJMP ist eigentlich ein Long-Jump und müßte damit gehen.
Ansonsten lass doch mal die Adressen in Klammern weg und/oder probiers
mit JMP.

Gruß
Andi
Gast #130296
Lesenswert?

Da muß wohl doch ein Spezialist ran der sich mit der
Interrupt-Organisation im 8051 auskennt.
HAAAALLLOOOOOOOO!

Gibs beim 8051 nicht ab Adresse 0000h eine Vektor-Liste wo man die
Sprünge zu den Interrupt-Progs setzen muss?

Schau mal im Datenblatt zum 8051 nach zwecks Interrupts.

Gruß
Andi

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren