- 12V Akku mit 280 Ah bauen         
Seite 3 von 3 ErsteErste 123
Ergebnis 21 bis 28 von 28

Thema: Bascom-Bytevariable in ein Register laden

Hybrid-Darstellung

Vorheriger Beitrag Vorheriger Beitrag   Nächster Beitrag Nächster Beitrag
  1. #1
    Erfahrener Benutzer Roboter Genie
    Registriert seit
    16.06.2004
    Ort
    Bad Schussenried in Oberschwaben
    Alter
    35
    Beiträge
    1.461
    Hi Danke!

    Nach 2 Bits wird in R17 pinb eingelesen, deshalb wird es auf input umgestellt.
    Dann brauch ich die temporäre Variable garnicht? COOL!

    Da das Programm auf die hardware geschrieben ist, kann ich den Sinulator nicht verwenden... ...

    VLG Tobi
    http://www.tobias-schlegel.de
    "An AVR can solve (almost) every problem" - ts

  2. #2
    Erfahrener Benutzer Roboter Genie
    Registriert seit
    16.06.2004
    Ort
    Bad Schussenried in Oberschwaben
    Alter
    35
    Beiträge
    1.461
    Hi!

    Code:
    Function Readbus()                                          'Den Wert vom Bus lesen
    
       Ddrb = &B00000000                                        'Alles Eingänge
       Ddrc = &B11111100                                        'Umschaltung, dass es keine Crashes gibt.
    
       $asm
    
         in R17, pinc
    
    
         CBR R16, 0b00000001
         SBRC R17, 1
         SBR R16, 0b00000001
    
         CBR R16, 0b00000010
         SBRC R17,0
         SBR R16, 0b00000010
    
         in R17, pinb ;<-- HIER wird auf Pinb umgeschaltet!
    
    
         CBR R16, 0b00000100
         SBRC R17, 5
         SBR R16, 0b00000100
    
         CBR R16, 0b00001000
         SBRC R17, 4
         SBR R16, 0b00001000
    
         CBR R16, 0b00010000
         SBRC R17, 3
         SBR R16, 0b00010000
    
         CBR R16, 0b00100000
         SBRC R17, 2
         SBR R16, 0b00100000
    
         CBR R16, 0b01000000
         SBRC R17, 1
         SBR R16, 0b01000000
    
         CBR R16, 0b10000000
         SBRC R17, 0
         SBR R16, 0b10000000
    
         Loadadr Readbus , X
         st X, r16
    
       $end Asm
    
    End Function
    Das ist jetzt mein Code, aber der liefert nur Datenmüll......

    Was geht da schief?!
    Die Bits in der Maske werden schon so gezählt, gell:
    0b76543210
    und NICHT
    0b01234567
    ,gell??

    Naja, das würde bei meinem Monsterprogramm nochmal 0,8 Sec einspahrung bringen, wenn man das in ASM codet...

    VLG Tobi
    http://www.tobias-schlegel.de
    "An AVR can solve (almost) every problem" - ts

  3. #3
    Erfahrener Benutzer Fleißiges Mitglied
    Registriert seit
    09.11.2004
    Ort
    Hard, Vorarlberg
    Beiträge
    155
    Hallo Tobi,

    das mit dem PinB einlesen habe ich übersehen.
    Die Bit-Zählweise ist so wie Du beschrieben hast &B76543210

    Wenn ich das richtig sehe werden in dem Ablauf alle Bits des r16 gelöscht.
    Das kannst zu Beginn mit clr r16 machen und Du brauchst nicht 8 mal cbr r16,x.

    Überprüf mal ob Du wirklich folgende Umsetzung von den Pins in das r16 vorgesehen hast?

    pinc.1 -> r16.0
    pinc.0 -> r16.1
    pinb.5 -> r16.2
    pinb.4 -> r16.3
    pinb.3 -> r16.4
    pinb.2 -> r16.5
    pinb.1 -> r16.6
    pinb.0 -> r16.7

    Ich hab mal irgendwo gelesen (kann Dir aber jetzt nicht sagen wo das war), dass man nicht sofort nach einer Änderung an einem Port von dort Werte einlesen kann. Wird auf ein Port geschrieben, in Deinem Fall auf das DDRB und DDRC so kommt die Änderung mit Beginn des nächsten CPU-Takts (=ASM-Befehl) zum Tragen. Wird von einem Pin eingelesen, wird der Zustand vom Ende des vorhergehenden CPU-Takt ausgewertet. Es könnte also sein, dass Du auf ein
    Ddrc = &B11111100
    nicht sofort im nächsten Befehl mit
    in r17, PinC
    fortsetzen kannst.

    Mit
    ddrc = &B11111100
    ddrb = &B00000000
    clr r16
    in r17, pinc

    bekommst Du zwischen dem C-Port setzen und Einlesen schon mal 3 CPU-Takte.
    Ich hoffe ich konnte Dir weiterhelfen.
    Viele Grüße
    Josef
    -------------------------------------------------------------------------------------
    DOS-File System für BASCOM-AVR auf http://members.aon.at/voegel

  4. #4
    Erfahrener Benutzer Robotik Einstein
    Registriert seit
    20.06.2004
    Beiträge
    1.941
    "ldi r16,&b00000000"
    werden die bytes nicht so geschrieben in bascom: &b00001111
    denkt dran: &b..........
    mfg pebisoft

  5. #5
    Erfahrener Benutzer Fleißiges Mitglied
    Registriert seit
    09.11.2004
    Ort
    Hard, Vorarlberg
    Beiträge
    155
    Hallo Tobi,

    Du musst &B00000001 anstatt 0B00000001 verwenden.

    0B....... wird immer zu 0 übersetzt.

    cbr r16,0b00000001 wird daher zu
    cbr r16,&B00000000 und damit nirgends das Bit gelöscht.
    Viele Grüße
    Josef
    -------------------------------------------------------------------------------------
    DOS-File System für BASCOM-AVR auf http://members.aon.at/voegel

  6. #6
    Erfahrener Benutzer Robotik Einstein
    Registriert seit
    20.06.2004
    Beiträge
    1.941
    ihr müsst ruhiger werden und nicht so hudeln.
    den text gaaaaaanz.... laaaaangsam... durchlesen.
    wenn ihr mal in winavr-c proggen tut, müsst ihr noch besser aufpassen.
    mfg pebisoft

  7. #7
    Erfahrener Benutzer Roboter Genie
    Registriert seit
    16.06.2004
    Ort
    Bad Schussenried in Oberschwaben
    Alter
    35
    Beiträge
    1.461
    HI!

    ASO!
    Ich dachte, weil das ASM ist muss man die ASM-Schreibweise verwenden...

    Dann haben wir den Übeltäter ja auch schon. Werd ich gleich mal testen.

    CLR R16... das ist sehr praktisch! Das ist ja dann noch schneller! *freu*

    @pebi: Mit dem Unterschied, dass die Maske in C warscheinlich richtig gewesen wäre...

    Ich teste...

    VLG Tobi
    http://www.tobias-schlegel.de
    "An AVR can solve (almost) every problem" - ts

  8. #8
    Erfahrener Benutzer Roboter Genie
    Registriert seit
    16.06.2004
    Ort
    Bad Schussenried in Oberschwaben
    Alter
    35
    Beiträge
    1.461
    Hi!

    Also! ES FUNKTIONIERT!
    Die Busfunktionen (pebisoft, wenn du willst bekommst du sie, sind viel schneller als die alten!!)

    Mein 1243 Zeilen langer Code (wer hat jetzt auch geschrieben, man würde in nen MEGA32 nichts hineinbringen?? Und ich verwende einen M8...) läuft mit der ASM-Routine 1,4 Sekunden schneller!!!

    VLG
    Tobi
    http://www.tobias-schlegel.de
    "An AVR can solve (almost) every problem" - ts

Seite 3 von 3 ErsteErste 123

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •  

12V Akku bauen