- Akku Tests und Balkonkraftwerk Speicher         
Ergebnis 1 bis 3 von 3

Thema: anfängerfrage zur umsetzung eines bestimmten codes

Hybrid-Darstellung

Vorheriger Beitrag Vorheriger Beitrag   Nächster Beitrag Nächster Beitrag
  1. #1
    Neuer Benutzer Öfters hier
    Registriert seit
    25.05.2007
    Beiträge
    8

    anfängerfrage zur umsetzung eines bestimmten codes

    ich arbeite an einem kleinen programm für den PIC12F509, bin anfänger und hänge jetzt fest, weiß nicht wie ich das in assambler realisieren kann. es geht um den rot markierten code: eingang1 (GPIO,1) soll geprüft werden, wird über einen bestimmten zeitraum kein pegelwandel festgestellt (H>L oder L>H), dann soll der ausgang0 (GPIO,0) geschaltet werden und das programm wird neu gestartet. andernfalls, bei jedem pegelwandel wird die warteschleife neu gestartet.

    ich hoffe es kann jemand helfen.

    mfg.


    • list p=12F509 ; list directive to define processor
      #include <p12F509.inc> ; processor specific variable definitions

      __CONFIG _MCLRE_OFF & _CP_OFF & _WDT_OFF & _IntRC_OSC


      ;***** VARIABLE DEFINITIONS
      VARS UDATA
      wert1 res 1 ; zwischenspeicher für eingang1
      dc1 res 1 ; variablen für warteschleife
      dc2 res 1
      dc3 res 1

      MAIN CODE 0x000 ; effective reset vector
      movwf OSCCAL ; update OSCCAL with factory cal value in W


      start
      movlw b'111110' ; GP0 als ausgang0 definieren, GP1 ist eingang1
      tris GPIO
      clrf GPIO ; ausgang0 löschen (low)
      clrf dc3 ; variablen für warteschleife auf 0 setzen
      clrf dc2
      clrf dc1

      dly1
      decfsz dc1,f ; warte eine bestimmte zeit
      goto dly1
      decfsz dc2,f
      goto dly1
      decfsz dc3,f
      goto dly1



      schleife
      clrf dc3 ; variablen für warteschleife auf 0 setzen
      clrf dc2
      clrf dc1

      dly2
      if eingang1 <> wert1 then ; eingang1 mit wert1 vergleichen
      wert1 = eingang1 ; neuen wert merken
      goto schleife ; warteschleife neu starten
      end if


      decfsz dc1,f ; warte eine bestimmte zeit
      goto dly2
      decfsz dc2,f
      goto dly2
      decfsz dc3,f
      goto dly2

      ; bcf GPIO,0 ; ausgang auf 0 schalten
      bsf GPIO,0 ; ausgang auf 1 schalten
      goto start ; beginne von vorn

      END

  2. #2
    Erfahrener Benutzer Roboter Experte
    Registriert seit
    08.10.2004
    Ort
    ferd. Waldmüllerg. 7/2
    Alter
    39
    Beiträge
    456
    <>
    meinst du damit ungleich? Weil dann ist es einfach

    Code:
    dly2:
        movfw wert1
        xorwf eingang1,w ; Zero gesetzt, wenn gleich, ergebnis wird in w gespeichert --> wert vom eingang1 bleibt erhalten
        btfsc STATUS,Z ; gleich --> branch zum "endif"
        goto endif
        movfw eingang1
        movwf wert1
        goto schleife
    
    endif:
        decfsz dc1,f
        [...]
    MfG
    Mobius

  3. #3
    Neuer Benutzer Öfters hier
    Registriert seit
    25.05.2007
    Beiträge
    8
    danke dir, funktioniert perfekt, wieder was gelernt.


Berechtigungen

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

Labornetzteil AliExpress