Forum: Mikrocontroller und Digitale Elektronik Kleines Programm geht nicht


von Avusgalaxy (Gast)


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

von Andi (Gast)


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

von Avusgalaxy (Gast)


Lesenswert?

Ich habe das Prog-Studio von Batronix. Da kann man ohneweiters
Basic-Befehle miteinbinden. Die funktionieren 100 Prozentig

von Andi (Gast)


Lesenswert?

Man, bist Du faul ;-)
Die vier ASM-Befehl zum Prüfen und setzen kannst Du doch auch noch rein
hacken.

Gruß
Andi

von Avusgalaxy (Gast)


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

von Andi (Gast)


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

von Avusgalaxy (Gast)


Lesenswert?

Es sind die Programmadressen..

0000h ist z.B. der Reset, also der erste Befehl
0003h ist Externer Interuppt 0
0013h ist Externer Interuppt 1

von Andi (Gast)


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

von Matthias (Gast)


Lesenswert?

Hi

der Interrupt für Timer0 überschreibt den für INT1 teilweise. Du
solltest die Routinen für die INT-Bearbeitung auslagern und vom
INT-Vektor mittels LJMP anspringen.

Matthias

von Matthias (Gast)


Lesenswert?

ich vergaß:

Manuelle Zuordnungen werden jetzt dauerhahaft und Positionsunabhängig
in der 3dusrpac.dat gespeichert.

Matthias

von Matthias (Gast)


Lesenswert?

Hi

mift. Falscher Thread. Tabbed Browsing verwirrt manchmal.

Matthias

von Markus_8051 (Gast)


Lesenswert?

Du hast vor dem LJMP Init keine Adresse angegeben. Wo soll er nun
anfangen, den Code zu generieren?

Wird in 89c52.mc auch Code erzeugt? Wo wird der hinassembliert?

Gruß,
Markus_8051

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.