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