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
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
Ich habe das Prog-Studio von Batronix. Da kann man ohneweiters Basic-Befehle miteinbinden. Die funktionieren 100 Prozentig
Man, bist Du faul ;-) Die vier ASM-Befehl zum Prüfen und setzen kannst Du doch auch noch rein hacken. Gruß Andi
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
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
Es sind die Programmadressen.. 0000h ist z.B. der Reset, also der erste Befehl 0003h ist Externer Interuppt 0 0013h ist Externer Interuppt 1
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
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
ich vergaß: Manuelle Zuordnungen werden jetzt dauerhahaft und Positionsunabhängig in der 3dusrpac.dat gespeichert. Matthias
Hi mift. Falscher Thread. Tabbed Browsing verwirrt manchmal. Matthias
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.