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