- fchao-Sinus-Wechselrichter AliExpress         
Ergebnis 1 bis 4 von 4

Thema: Error [1253] constant operand expected

  1. #1
    Neuer Benutzer Öfters hier
    Registriert seit
    08.06.2010
    Beiträge
    26

    Error [1253] constant operand expected

    Anzeige

    Praxistest und DIY Projekte
    PIC18F14K50 mit C18.

    Zeitkritische PIN-Abfrage. Muss natürlich auf richtiger PCL-Adresse stehen, deshalb die NOP's:


    Code:
      _asm 
        NOP
        NOP
        Btfss pinTMR13mess   //Warten bis Mess-PIN = 1.
        Bcf PCL, 1, 0         //<- FEHLER hier !!! PCL - 2: Nur 1 Taktzyklus.
      _endasm
    Fehler: Error [1253] constant operand expected.

    Warum?

    So geht es auch nicht:

    Code:
      _asm 
        NOP
        NOP
        Btfss pinTMR13mess   //Warten bis Mess-PIN = 1.
        Bcf 0xFF9, 1, 0      //<- FEHLER hier !!! PCL - 2: Nur 1 Taktzyklus.
      _endasm

    Ja, Sorry, habs rausgefunden, so ist es richtig:

    Code:
      _asm 
        NOP
        NOP
        Btfss PORTC, 6, 0 //Warten bis Mess-PIN = 1.
        Bcf PCL, 1, 0 //PCL - 2: Nur 1 Taktzyklus.
      _endasm
    Bin mir gerade nicht sicher, ob das so überhaupt geht, da das 3 Words sind. Notfalls mache ich es so:

    Code:
        _asm 
          MovLW PCL-Adresse
          Btfss PORTC, 6, 0          //Warten bis Mess-PIN-TMR13 = 1.
          MovWF PCL, 0               //$-1
        _endasm

  2. #2
    Neuer Benutzer Öfters hier
    Registriert seit
    08.06.2010
    Beiträge
    26
    Hallo,

    die Idee von Dir finde ich gut. Aber so geht das nicht. Wenn, dann must Du
    BCF PCL,2 schreiben, denn ich denke mal der PIC soll nicht auf der Stelle springen sondern wieder zur Bitabfrage nach oben.
    Ich denke mal, Du wirst angemeckert, weil Du ein Ziel (Destination) angegeben hast, die Zahl hinter dem zweiten Komma, das geht beim BCF Befehl aber nicht. Zudem sparst Du nichts bei dieser Arie.
    goto Label benötigt 2 Takzyklen und BCF zeigt bei mir in der Simulation auch 2 Zyklen an. Hier bin ich mir jedoch nicht sicher, ob das wirklich stimmt, da ja ein BCF normalerweise nur einen Zyklus benötigt. In der MPLAB Ide werden jedoch 2 Zyklen angezeigt. Könnte natürlich sein, das hierbei der IDE-Simulator mir einen Streich spielt. Weil so ganz glauben tue ich das auch nicht, was ich grad simuliert habe.

    Also mach mal aus
    Bcf PCL, 1, 0
    nur:
    Bcf PCL, 2

    ich denke dann ist dein Problem gelöst.
    mfg. Siro
    Ja, danke für die Antwort.

    Ich habe das jetzt eher so vor:

    Code:
        _asm
          MovLW PCL-Adresse
          Btfss PORTC, 6, 0          //Warten bis Mess-PIN-TMR13 = 1.
          MovWF PCL, 0               //$-1
        _endasm
    Das dürfte besser sein, man muss nur noch die richtige PCL-Adresse laden und aufpassen das man nicht am Umbruch zu einer neuen ROM-Page steht.

  3. #3
    Erfahrener Benutzer Roboter Genie
    Registriert seit
    05.11.2007
    Beiträge
    1.076
    in meiner Simulation läuft es so :

    btfss PORTC,6
    bcf PCL,2

    ja, Du hast recht, aufpassen, daß hier kein Page Übergang auftritt.
    Magst Du keinen goto Befehl ?

    weil so geht es doch auch und braucht im Simulator die gleiche Zeit.

    btfss PORTC,6
    goto $-2


    mfg. Siro

  4. #4
    Neuer Benutzer Öfters hier
    Registriert seit
    08.06.2010
    Beiträge
    26
    Braucht die gleiche Zeit? Das kann ja nicht sein. Du springst mit Deinem Befehl ja auch weiter zurück als notwendig (oder?), da Du 4 Dinger vom PCL abziehst, statt 3.

    Probier mal diese Methode und mache eine Punktlandung, dann geht das sicher 1 Takt schneller:

    _asm
    MovLW PCL-Adresse
    Btfss PORTC, 6, 0 //Warten bis Mess-PIN-TMR13 = 1.
    MovWF PCL, 0 //$-1
    _endasm

    Ne, den Goto-Befehl mag ich nicht weil der 2 Takte benötigt. Ich will den Duty-Cycle von einem 600 kHz Signal ausmessen, da mag ich das dann nicht.

    Zuerst habe ich die ON- und OFF-Time separat ausgemessen. Jetzt mache ich das besser. Ich messe nur die ON-Time und Teile durch die Periodendauer. Die Frequenz kann ich nämlich sehr genau bestimmen. Zumindestens viel genauer als ich einen Impuls ausmessen kann.

Berechtigungen

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

LiFePO4 Speicher Test