AVR Sprungtabelle

OP #4649294
Lesenswert?

Guten Tag an alle

ich habe versuche ein klein Sprungtabelle zu schreiben, aber er will 
nicht funktionieren, ich frage euch ob jemand mir erklären kann was ich 
zufällig falsch gemacht habe. Das Programm habe ich beigelegt
Vielen Danke
Claude
Angehängte Dateien:
#4649300
Lesenswert?

1
loop:    
2
     Ldi  ZH,High(meinTab)  ; High Adresse der Tabel
3
     ldi  ZL, low(meinTab)  ; Low Adresse der Tabel
4

5
; Hier fehlt das EInlesen von PIND
6

7
     andi  tmp,0x0f    ; Lösche die obere Bits
8
     add  ZL,tmp      ; Adiere Portklavierstand zu Tabellenadresse
9

10
; das ist auch falsch, es muss in, tmp, PIND heißen
11

12
     ldi  tmp,PIND    
13

14
; eine 16 Bit Addition geht anders. Erst low byte, dann high byte
15

16
     adc  ZH, tmp
17
    
18
     icall


Siehe AVR-Tutorial: Mehrfachverzweigung
OP #4649710
Lesenswert?

Eric B. schrieb:
> Magst du jetzt wo dein Scheibenwischer doch funktioniert, alles nochmal
> in Assembler schreiben?
Jaein,
Mein Vertig Bascom Programm bleibe, ich werde mir das ansehen noch mal 
und weichenlich ein Möglichkeit einbauen für ein verlängerung oder 
verkürzung der Pause.
Ich hatte dieser Programm mit ASM angefangen, stillgelegt für Bascom.
Und jetzt wollte ich mit dieser Sprungtabelle funktioniert, um etwas 
andere zu machen
kein sorge der Bascom wird eingebaut. Ich habe doch noch frage darauf, 
das geht um die Steuerung meiner relais. Für sofort ich möchte noch mein 
Sprungtabelle vertigmachen
Nochmal Danke für Dein Hilfe im Bascom
Claude.

PS Ich habe doch angekündig dass ich auch in ASM machen wollte
#4651129
Lesenswert?

@Claude Bochard (claude44)

>    Tabellen.docx (13,2 KB, 3 Downloads)

Was soll der Unsinn? Warum sendest du deinen ASSEMBLERquelltext nicht 
einfach so wie er ist, als .asm Datei?

>ein Sprungtabel funktioniere immer noch nicht,
>Ich verstehe nicht ganz wie die SBIC Zeile aufgebaut sein soll?
>Kann mir jemand helfen?

Hast du mal den Artikel gelesen? Dort steht alles drin!

AVR-Tutorial: Mehrfachverzweigung
OP #4651170
Lesenswert?

Falk B. schrieb:
> @Claude Bochard (claude44)
>
>>    Tabellen.docx (13,2 KB, 3 Downloads)
>
> Was soll der Unsinn? Warum sendest du deinen ASSEMBLERquelltext nicht
> einfach so wie er ist, als .asm Datei?
Sorry, wird so gemacht. Kein hatt mir gesagt, wusst ich nicht
>
> Hast du mal den Artikel gelesen? Dort steht alles drin!
>
> AVR-Tutorial: Mehrfachverzweigung

Vielen Danke für der Link, habe ich mir angesehen leider ist es mir 
schwirig die für mein bedürfniss einzusetzen, etwas fehlt mir.
Angehängte Dateien:
Gast #4651173
Lesenswert?

Claude B. schrieb:
> Falk B. schrieb:
>> @Claude Bochard (claude44)
>>
>>>    Tabellen.docx (13,2 KB, 3 Downloads)
>>
>> Was soll der Unsinn? Warum sendest du deinen ASSEMBLERquelltext nicht
>> einfach so wie er ist, als .asm Datei?
> Sorry, wird so gemacht. Kein hatt mir gesagt, wusst ich nicht
>>
>> Hast du mal den Artikel gelesen? Dort steht alles drin!
>>
>> AVR-Tutorial: Mehrfachverzweigung
>
> Vielen Danke für der Link, habe ich mir angesehen leider ist es mir
> schwirig die für mein bedürfniss einzusetzen, etwas fehlt mir.

Duden?
Gast #4651187
Lesenswert?

1
 benutzung der Tabelle Sprung  
2
 .def  tmp    = r16
3
 .def  schleife  = r17
4
 .def  Schalter  = r18
5

6
.EQU  Portein  = PORTD
7
.EQU  PINein    = PIND
8
.equ  led1    = PIND1
9
.equ  led2    = PIND2
10
.equ  Portaus  = PORTB
11
main:
12
    /*   Initialiesierung   */
13
 ldi  tmp, low(ramend)
14
out  spl, tmp
15
        ldi tmp, 0xFF      ; Alle Pins am Port B durch Ausgabe von 0xFF ins
16
        out DDRB, tmp      ; Richtungsregister DDRB als Ausgang konfigurieren              
17
         clr tmp             ; Alle Pins am Port D durch Ausgabe von 0x00 ins
18
         out DDRD, tmp      ; Richtungsregister DDRD als Eingang konfigurieren
19
  ser tmp        ; Pulup für die Taster
20
  out Portein, tmp
21
   clr  tmp
22
  out  Portaus,  tmp    ; led löschen
23
  out  PIND,    tmp                
24
loop:    
25
  Ldi  ZH,High(meinTab)  ; High Adresse der Tabel
26
  ldi  ZL, low(meinTab)  ; Low Adresse der Tabel
27
  andi  tmp,0x0f    ; Lösche die obere Bits
28
  add  ZL,tmp      ; Adiere Portklavierstand zu Tabellenadress
29
        in  tmp,PIND         ; Pin Laden in tmp
30
  adc  ZH, tmp    ; in ZH übertragen
31
  sbic  tmp, ##    ; 
32
  icall        
33
       rjmp loop       
34
meinTab:
35
    rcall  Pos_0
36
    rcall  Pos_1
37
    rcall  Pos_2
38
    rcall  Pos_3
39
    rcall  Pos_4
40
    ret
41
Pos_0:
42
ret
43

44
Pos_1:
45
ret
46

47
Pos_2:
48
ret
49

50
Pos_3:
51
ret
52

53
Pos_4:
54
ret

Ich nehme an, dass du anhand der Ziffer in tmp nach pos_0..4 verzweigen 
willst ? Wenn Ja, probiere es mal so
1
loop:    
2
  Ldi  ZH,High(meinTab)  ; High Adresse der Tabel
3
  ldi  ZL, low(meinTab)  ; Low Adresse der Tabel
4
  andi  tmp,0x0f    ; Lösche die obere Bits
5
        lsl     tmp  ;In deiner Tab stehen Words, deshalb mal 2
6
  clr     tmp1 ;oben noch zuweisen
7
        add  ZL,tmp      ; Adiere Portklavierstand zu Tabellenadress
8
  adc  ZH, tmp1    ; Carry addieren
9
  icall        
10
       rjmp loop
#4651328
Lesenswert?

@ Kurzy (Gast)

>> Vielen Danke für der Link, habe ich mir angesehen leider ist es mir
>> schwirig die für mein bedürfniss einzusetzen, etwas fehlt mir.

>Duden?

Wie man am Namen des OP erahnen kann, ist er wohl Franzose und Deutsch 
nicht seine Muttersprache.

Comprenez-vous?
Gast #4661808
Lesenswert?

Claude B. schrieb:
> und mit den Simulator
> durch gesielte,

dann könntest du uns ja mitteilen, was du dort sieht? Dort sind doch 
alle Register sichtbar - da muss man doch sehen wenn etwas drin steht 
was man nicht erwartet? So schwer kann das doch bei 10 Zeilen code nicht 
sein.
1
adc  ZH, tmp

das sieht zumindest merkwürdig aus, auch aus dem Kommentar erschließt 
sich mir der sinn nicht.
(Firma: matzetronics) #4661821
Lesenswert?

1
  in   tmp, PIND    ; zustande der Register abfragen
2
   andi  tmp,0x04    ; Lösche die obere Bits
3
   add  ZL,tmp      ; Adiere Portklavierstand zu Tabellenadresse
4
           
5
  cpi  tmp, 0
6
  breq  Loop    ; Spring wenn 0
7
  adc  ZH, tmp    ; im Z register H Addieren

Du erlaubst durch dein 'andi tmp,0x04' nur noch genau ein Pinbeinchen, 
nämlich Bit 2. Falk hat doch schon gepostet, ein 'andi tmp,0x07' würde 
alle portpins von 0 bis 2 erlauben und dir 8 Auswahlmöglichkeiten geben.
Ein 'andi tmp,0x03' erlaubt dir 4 Möglichkeiten mit Pin0 und Pin1.

Dann ist deine 16 bit Addition nicht vollständig. Falk hat dir hier
1
     add  ZL,tmp
2
     clr  tmp
3
     adc  ZH,tmp
geschrieben, was die richtige Methode ist, um einen 8-bit Wert in tmp 
auf ein 16bit Register zu addieren.
Die Abfrage auf 0 ist unnötig, weil du in deine Sprungtabelle einfach 
ein 'ret' auf Position 0 schreiben kannst.
Gast #4661823
Lesenswert?

Lieber Claude,

ich empfehle Dir sehr, erst einmal zu versuchen, ein Problem detailliert 
zu beschreiben. Wenn Du das übst, dann ist es leichter für Dich ein 
Problem zu lösen. Jedenfalls ist die Beschreibung "es geht nicht", nicht 
zweckmäßig.
Wir erfahren nicht, was tatsächlich geschieht und was stattdessen 
geschehen soll. Wir können uns das zwar denken, aber wichtig ist, dass 
DU das denken kannst.

Dann empfehle ich Dir, noch einmal genau nachzulesen, was die Befehle 
"JMP", "CALL" und "RET" bzw. deren Pendants "IJMP" und "ICALL" tun. 
Beachte besonders, dass CALL und RET Paare bilden und der Ablauf durch 
den Inhalt des Stacks beeinflusst wird.

Bis jetzt läuft der Thread darauf hinaus, dass man Dir einfach vormacht, 
wie es geht. Aber davon lernst Du nichts.

Bonne chance.
#4661840
Lesenswert?

@  Claude Bochard (claude44)

>Ich habe mein Sprungtabelle weiter entwickelt,

Nö, du hast ein funktionierendes Beispiel ignoriert und deine alte, 
fehlerhafte Version verschlimmbessert.

>kann mir jemand sagen wo ich ein fehler gemacht habe?

Dir fehlen massiv Grundlagen.
Zeichne mal DETAILIERT auf, was dieser Befehl wohl macht und ob der 
Kommentar dahinter wirklich stimmt.

andi  tmp,0x04      ; Lösche die obere Bits

Kleiner Tip: Bitmanipulation.
OP #4661967
Lesenswert?

Marc V. schrieb:
> Ich würde das nicht gerade weiterentwickeln nennen...

Das habe ich gemerke

Matthias S. schrieb:
> Die Abfrage auf 0 ist unnötig, weil du in deine Sprungtabelle einfach
> ein 'ret' auf Position 0 schreiben kannst.

 ich kann dann der 0 nicht benutzen. ist es aber nicht weiter schlimm, 
ich habe die abfrag weggenohmen, und auf 7 erhöhte.

Hosenmatz schrieb:
> ich empfehle Dir sehr, erst einmal zu versuchen, ein Problem detailliert
> zu beschreiben. Wenn Du das übst, dann ist es leichter für Dich ein
> Problem zu lösen. Jedenfalls ist die Beschreibung "es geht nicht", nicht
> zweckmäßig.

Danke für die Kritik,Ich versuche jetzt so zu handel, ich möchte kein 
fertig Programme bekommen

Nun mit der Simulation, spring ich zu mein Richtig RCALL, dann zu die 
richtig POS_2 aber mit ret ist nicht möglich zurück zu loop, ich habe 
versuch mit "meinTab" RJMP LOOP er sping zu MAIN. Ich habe auch versuch 
am statt "rcall pos_0", ein rjmp loop zu setzen. was funktioniere

Wie ich sehe, nach icall, der RJMP ist denke ich überflüssig so wie der 
von "meinTabel" oder sehe ich wieder Falsch?


Ich habe mir viele Programmen angesehen, und ich habe KEIN Sprungtabelle 
gesehen, gibt es ein Grund?
Angehängte Dateien:
Gast #4661983
Lesenswert?

Claude B. schrieb:
> Ich habe mir viele Programmen angesehen, und ich habe KEIN Sprungtabelle
> gesehen, gibt es ein Grund?

weil es oft einfach nicht Notwenig ist?

man könnte ja einfach
1
if wert = 1 
2
begin
3
  goto weiter:
4
end
5

6
if wert = 2
7
begin
8
  goto weiter:
9
end
10

11
weiter:
schreiben, ja das ist etwas langsamer. Aber es funktioniert sofort und 
du währst schon lange fertig.
#4662003
Lesenswert?

@  Claude Bochard (claude44)

>> Die Abfrage auf 0 ist unnötig, weil du in deine Sprungtabelle einfach
>> ein 'ret' auf Position 0 schreiben kannst.

> ich kann dann der 0 nicht benutzen.

Musst du auch gar nicht!

>Nun mit der Simulation, spring ich zu mein Richtig RCALL, dann zu die
>richtig POS_2 aber mit ret ist nicht möglich zurück zu loop,

Doch!

>ich habe
>versuch mit "meinTab" RJMP LOOP er sping zu MAIN.

FALSCH! Damit läuft dir in kurzer Zeit der Stack über. Für JEDES CALL 
oder ICALL braucht man auch ein RET!

> Ich habe auch versuch
>am statt "rcall pos_0", ein rjmp loop zu setzen. was funktioniere

Unsinn.

>Wie ich sehe, nach icall, der RJMP ist denke ich überflüssig so wie der
>von "meinTabel" oder sehe ich wieder Falsch?

Wieder falsch. Du stocherst planlos rum, weil du so gut wie KEINERELEI 
Grundlagen kennst. Lass es. Du machst dir nur sinnlos Stress.

Nimm doch verdammt nochmal einfach mal mein Programm und geh es in 
Einzelschritten im Simulator durch! Dann siehst du auch, wo der 
Programmablauf langgeht!

Beitrag "Re: AVR prungtabelle"
OP #4662375
Lesenswert?

Ich möchte mich " als extrem lernresistent" für euer Durchalte vermögen 
bedanken.
Das Programm läuft jetzt.
Ich habe festgestell dass die Sprüngen reagieren auf binairzahl. Ich 
kann nur 4 Tasten benutzen
Taste 0 spring auf 1
Taste 1 auf 2
Taste 2 auf 4
taste 3 auf 8
ist Correkt ?
#4662384
Lesenswert?

@ Claude Bochard (claude44)

>Ich habe festgestell dass die Sprüngen reagieren auf binairzahl. Ich
>kann nur 4 Tasten benutzen
>Taste 0 spring auf 1
>Taste 1 auf 2
>Taste 2 auf 4
>taste 3 auf 8
>ist Correkt ?

Ja, aber nur, wenn deine Tasten HIGH aktiv sind und du exteren Pull Down 
Widerstände hast. Das widerspricht aber eine wenig der Tatsache, daß du 
die internen Pull-Up Widerstände eingeschaltet hast. Wie sieht deine 
Hardware real aus?

Wenn deine Tasten low aktiv sind (schalten nach GND), dann kann man das 
einfach ändern, indem man das Einlesen der Pins so macht
1
     in     tmp, PINein   ; Pins einlesen 
2
     com    tmp           ; alle Bits invertieren
OP #4662396
Lesenswert?

Falk B. schrieb:
> Ja, aber nur, wenn deine Tasten HIGH aktiv sind und du exteren Pull Down
> Widerstände hast. Das widerspricht aber eine wenig der Tatsache, daß du
> die internen Pull-Up Widerstände eingeschaltet hast. Wie sieht deine
> Hardware real aus?
Ich habe da kein Hardware, dass das für mich nur ein Lerneffect haben 
soll, was aber gelungen ist

>
> Wenn deine Tasten low aktiv sind (schalten nach GND), dann kann man das
> einfach ändern, indem man das Einlesen der Pins so macht
>      in     tmp, PINein   ; Pins einlesen
>      com    tmp           ; alle Bits invertieren

Das werde ich ausprobieren

Danke
OP #4662831
Lesenswert?

Falk B. schrieb:
> Wenn deine Tasten low aktiv sind (schalten nach GND), dann kann man das
> einfach ändern, indem man das Einlesen der Pins so macht
>      in     tmp, PINein   ; Pins einlesen
>      com    tmp           ; alle Bits inverti

mit debuging werde das Bit 3 (8) invertirt in tmp(r16) aber nach ADD ZL 
wird tmp auf 00, und spring auf 0

kann man der Ihnhalt von ijmp sehen?
ich habe AtmelStudio 7
Angehängte Dateien:
(Firma: Vescomp) #4662972
Lesenswert?

Claude B. schrieb:
> mit debuging werde das Bit 3 (8) invertirt in tmp(r16) aber nach ADD ZL
> wird tmp auf 00, und spring auf 0

 Wann hörst du endlich mit herumspielen auf ?
 Vor allem an Dingen die du anscheinend nicht verstehst ?
1
     andi  tmp, 0x08        ; Lösche die obere Bits UND Verknüpfung
 Hier hast du gerade alle bits ausser bit3 auf 0 gesetzt.
 Diese sinnlose rumhüpferei im geposteten Code ist unnötig.

 Benutze doch das erste Programm von Falk, da ist es richtig gemacht.

 Und wenn du sein Programm benutztst, dann solltest du zumindest seine
 Ratschläge befolgen.
OP #4663103
Lesenswert?

Marc V. schrieb:
> Wann hörst du endlich mit herumspielen auf ?
>  Vor allem an Dingen die du anscheinend nicht verstehst ?

Ich spiel nicht rum. Und wenn ich nicht verstehe, versuche ich zu 
Verstehen.

Marc V. schrieb:
> Benutze doch das erste Programm von Falk, da ist es richtig gemacht.
>
>  Und wenn du sein Programm benutztst, dann solltest du zumindest seine
>  Ratschläge befolgen.

Ich benützt das Programm die Funktioniere, und nach seine Ratschläge 
habe ich mein Programm geändert.

Falk B. schrieb:
> Wenn deine Tasten low aktiv sind (schalten nach GND), dann kann man das
> einfach ändern, indem man das Einlesen der Pins so macht
>      in     tmp, PINein   ; Pins einlesen
>      com    tmp           ; alle Bits invertieren

Und gebe die Ergebnisse Aus

Marc V. schrieb:
>  andi  tmp, 0x08        ; Lösche die obere Bits UND Verknüpfung
>  Hier hast du gerade alle bits ausser bit3 auf 0 gesetzt.

Bit 3 soll doch stehen bleiben, nun ich möchte ein Sprung nicht nach 8 
sonderd nach 3. den code "Andi tmp, 08" ist von Anfangan schon in der 
Programm, die leste Änderung "in tem, PINein-- com tmp" sollte mein 
Problème lösen,

Übrigens, ich verstehe nicht dass du dich auregt, über mein Unwissen, 
diese Forum ist doch da, Für uns alle die etwas nicht verstanden haben, 
und wir versuchen mit dieser Weg unsere Probleme zu lösen
Als " extrem lernresistent" bewunder ich Falk, die mir mindensten bei 
gebrachte wie ein Sprungtabelle funktioniere.
Ich bedanke mich auch bein Dir für den Hilfe dass du bei mir geleistet 
habe für mein Bascom Programme aber ich bitte dich mich anders zu 
behandel
#4663124
Lesenswert?

@Claude Bochard (claude44)

>mit debuging werde das Bit 3 (8) invertirt in tmp(r16) aber nach ADD ZL
>wird tmp auf 00, und spring auf 0

Logisch. Mit

andi tmp, 8

werden ALLE Bits außer Bit#3 gelöscht. Das Ergebnis kann nur 0 oder 8 
sein, demzufolge kann man nur nach Pos_0 oder Pos_8 springen, je 
nachdem, wie der Pegel an PD3 ist.
Alle anderen Eingänge werden damit unwirksam!
1
Bit   76543210     Bitnummer
2
PIND  xxxxxxxx     Eingangsdaten  
3
0x08  00000100     Bitmaske
4
--------------
5
AND   00000x00     Ergebnis der UND-Verknüpfung

>kann man der Ihnhalt von ijmp sehen?

Sicher, im Register Z, welches aus R30 und R31 besteht. Aber das sieht 
man doch einfach im Simulator, wo die CPU hinspringt 
(Einzelschrittbetrieb mit F11!)

In deiner Skizze im Quelltext ist ein Fehler, die letzten 3 Taster 
müssen zwei Pins weiter runter
1
                                  ATtiny 2313 
2
'                                  _______
3
'                                /         |
4
'               (Reset/dW) PA2 o|  1    20 |o VCC
5
'      Taster0       (RXD) PD0 o|  2    19 |o PB7 (UCSK/SCL/PCINT7)
6
'      Taster1       (TXT) PD1 o|  3    18 |o PB6 (MISO/DO/PCINT6)
7
'                  (XTAL2) PA1 o|  4    17 |o PB5 (MOSI/DI/SDA/PCINT5)
8
'                  (XTAL1) PA2 o|  5    16 |o PB4 (OC1B/PCINT4)    LED4
9
'      Taster2     (/INT0) PD2 o|  6    15 |o PB3 (OC1A/PCINT3)    LED3
10
'      Taster3      (INT1) PD3 o|  7    14 |o PB2 (OC0A/PCINT2)    LED2
11
'      Taster4        (T0) PD4 o|  8    13 |o PB1 (AIN1/PCINT1)    LED1
12
'                (OC0B/T1) PD5 o|  9    12 |o PB0 (AIN0/PCINT0)    LED0
13
'                          GND o| 10    11 |o PD6 (ICP)
14
'                               |__________|
(Firma: Vescomp) #4663126
Lesenswert?

Claude B. schrieb:
> Bit 3 soll doch stehen bleiben, nun ich möchte ein Sprung nicht nach 8
> sonderd nach 3. den code "Andi tmp, 08" ist von Anfangan schon in der
> Programm, die leste Änderung "in tem, PINein-- com tmp" sollte mein
> Problème lösen,

 Wo siehst du 0x08 im Programm von Falk ?


Claude B. schrieb:
> Ich benützt das Programm die Funktioniere, und nach seine Ratschläge
> habe ich mein Programm geändert.

 Nein, tust du nicht und hast du nicht.
OP #4663165
Lesenswert?

Falk B. schrieb:
> andi tmp, 8
>
> werden ALLE Bits außer Bit#3 gelöscht. Das Ergebnis kann nur 0 oder 8
> sein, demzufolge kann man nur nach Pos_0 oder Pos_8 springen, je
> nachdem, wie der Pegel an PD3 ist.
> Alle anderen Eingänge werden damit unwirksam!
> Bit   76543210     Bitnummer
> PIND  xxxxxxxx     Eingangsdaten
> 0x08  00000100     Bitmaske
> --------------
> AND   00000x00     Ergebnis der UND-Verknüpfung

Also wenn ich gut verstehe, der "Andi tmp" code darf nicht eingesetzt 
werden?. Aber kann man überhaupt das ding beibringen, wenn mein Bit 3 
gesetzt ist, das ein bit 3 Interpretiere und nicht ein 8? oder bit 2 
als 3 un sw. Da durch sind Natürlich mein Taster nicht korekt eingesetzt
Gast #4663177
Lesenswert?

Hi,
weil:
>In deiner Skizze im Quelltext ist ein Fehler, die letzten 3 Taster
>müssen zwei Pins weiter runter
ist mir aufgefallen das deine Sprungtabelle zu kurz ist.
Mit den Bits(Tasten)0-4 sind 31 Sprungziele erreichbar. Die Tabelle hat 
aber nur 9, die anderen(höheren) gehen also nicht da hin wo du möchtest.
Mit 3 Tasten(0-2)ist dein Sprungbereich schon fast ausgelastet.
Filtere also bitte mit
andi tmp,0x07
und die Tasten 0-2 bleiben in tmp. Da langt dann auch die Sprungtabelle.

viel Erfolg, Uwe
#4663185
Lesenswert?

@Claude Bochard (claude44)

>Also wenn ich gut verstehe, der "Andi tmp" code darf nicht eingesetzt
>werden?.

Nein, das verstehst du nicht gut.

> Aber kann man überhaupt das ding beibringen, wenn mein Bit 3
>gesetzt ist, das ein bit 3 Interpretiere und nicht ein 8? oder bit 2
>als 3 un sw. Da durch sind Natürlich mein Taster nicht korekt eingesetzt

Ist es denn SOOO schwer, einfach die entsprechenden Unterprogramme zu 
nutzen und die anderen einfach leer zu lassen?
OP #4663205
Lesenswert?

Uwe schrieb:
> Hi,
> weil:
>>In deiner Skizze im Quelltext ist ein Fehler, die letzten 3 Taster
>>müssen zwei Pins weiter runter
> ist mir aufgefallen das deine Sprungtabelle zu kurz ist.
> Mit den Bits(Tasten)0-4 sind 31 Sprungziele erreichbar. Die Tabelle hat
> aber nur 9, die anderen(höheren) gehen also nicht da hin wo du möchtest.
> Mit 3 Tasten(0-2)ist dein Sprungbereich schon fast ausgelastet.
> Filtere also bitte mit
> andi tmp,0x07
> und die Tasten 0-2 bleiben in tmp. Da langt dann auch die Sprungtabelle.
>
> viel Erfolg, Uwe

Danke für dein Antwort, in zwischen, sind wir weiter, mein Tabelle ist 
bis auf 8 ergänze worden, Leider ich bin davon gegangen das der Sprung 
nach BIT reagiere, nicht nach HEX zahl so taste 0 = 1, Taste 1 = 2, 
Taste 2 = 3
Taste 3 = 4, Taste 4 = 8.
dadurch sind natürlich mein Taster Falsche gelegt
#4663222
Lesenswert?

@  Claude Bochard (claude44)

>Danke für dein Antwort, in zwischen, sind wir weiter, mein Tabelle ist
>bis auf 8 ergänze worden,

Das reicht aber nicht. Denn mit 4 Bits kann man 16 verschiedene Zahlen 
darstellen, also muss man 16 Unterprogramme bereitstellen.

> Leider ich bin davon gegangen das der Sprung
>nach BIT reagiere, nicht nach HEX zahl so taste 0 = 1, Taste 1 = 2,
>Taste 2 = 3
>Taste 3 = 4, Taste 4 = 8.

>dadurch sind natürlich mein Taster Falsche gelegt

Sieht so aus. Aber um mit 5 Tasten in 5 Unterprogramme zu springen lohnt 
sich eine Sprungtabelle nicht. Das macht man besser mit 5 
Einzelabfragen.

Siehe Anhang.
Angehängte Dateien:
OP #4663223
Lesenswert?

Falk B. schrieb:
> Ist es denn SOOO schwer, einfach die entsprechenden Unterprogramme zu
> nutzen und die anderen einfach leer zu lassen?

ist es überhaupt nicht schwer, und ich habe es verstanden(Ausnameweise) 
aber für 4 Taster, ich brauch 8 Sprünge, wieviel für 5, oder 6 Tasten? 
Deswegen meine Frage, kann man das so machen daß wir bit0 = 0, bit 1 = 
1, Bit 2 = 2 esw.
#4663230
Lesenswert?

@  Claude Bochard (claude44)

>Danke für dein Antwort, in zwischen, sind wir weiter, mein Tabelle ist
>bis auf 8 ergänze worden,

Das reicht aber nicht. Denn mit 4 Bits kann man 16 verschiedene Zahlen
darstellen, also muss man 16 Unterprogramme bereitstellen.

> Leider ich bin davon gegangen das der Sprung
>nach BIT reagiere, nicht nach HEX zahl so taste 0 = 1, Taste 1 = 2,
>Taste 2 = 3
>Taste 3 = 4, Taste 4 = 8.

>dadurch sind natürlich mein Taster Falsche gelegt

Sieht so aus. Aber um mit 5 Tasten in 5 Unterprogramme zu springen lohnt
sich eine Sprungtabelle nicht. Das macht man besser mit 5
Einzelabfragen.

Siehe Anhang. Jetzt mit richtigem Portzugriff 8-0
Angehängte Dateien:
Gast #4663234
Lesenswert?

Claude B. schrieb:
> kann man das so machen daß wir bit0 = 0, bit 1 =
> 1, Bit 2 = 2 esw.

und was soll bei Bit0 und Bit1 passieren? Das musst du dann sicher 
verhindert.

Warum willst du es zwingend mit einer Sprungtabelle machen, du hast doch 
schon selber festgellt das es andere ohne machen. Wird wohl einen Grund 
haben.
Gast #4663239
Lesenswert?

Claude B. schrieb:
> ist es überhaupt nicht schwer, und ich habe es verstanden(Ausnameweise)
> aber für 4 Taster, ich brauch 8 Sprünge, wieviel für 5, oder 6 Tasten?
> Deswegen meine Frage, kann man das so machen daß wir bit0 = 0, bit 1 =
> 1, Bit 2 = 2 esw.

Die Formel für die Anzahl der Sprung Tabelleneinträge ist 2^N mit N für 
die Anzahl der Taster.

N=3 ==> 3 Taster
2^N = 2^3 = 8, also muss man von 0,1,..,7 die Sprung Tabelleneinträge 
anlegen.

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