PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : anfängerfrage zur umsetzung eines bestimmten codes



spunky1a
28.05.2007, 12:39
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

Mobius
28.05.2007, 20:50
<> meinst du damit ungleich? Weil dann ist es einfach



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

spunky1a
28.05.2007, 21:26
danke dir, funktioniert perfekt, wieder was gelernt.

:)