/********************************************************************************
* DCC Wagen Decoder Software V1.0 *
* Copyright 2011 Toralf Wilhelm *
* *
* private Nutzung erwünscht, gewerbliche Nutzung erfordert zwingend meine Zustimmung! *
* Datei: Funktionsbefehle.S *
* Kontakt: toralfwilhelm@web.de *
* Webseite: www.toralfwilhelm.de *
* Version: 01/2011 Version 1 Start *
* Beschreibung: hier werden neue Funktionsbefehle gesetzt *
********************************************************************************/
#include "definitionen.h"
/***************************
* Funktionsgruppen setzen *
**************************/
; hier werden neue Funktionsbefehle gesetzt
; die neuen Daten kommen in w hier an
F_GRUPPE_1: // Befehle für FG1 in F0(FL) bis F4 in Funktionen sichern
lds w3,Funktionen
bst w,0
bld w3,F1
bst w,1
bld w3,F2
bst w,2
bld w3,F3
bst w,3
bld w3,F4
sbrs DCCreg,fahrstufen // 1=28 Fahrstufen 1x springen
rjmp F1_SPEICHERN
bst w,4 // bei 28 noch Lichtbit sichern
bld w3,FL
F1_SPEICHERN:
lds w,Funktionen
cp w,w3
brne F_NEU_EINLESEN
ret
F_GRUPPE_2: // Befehle für FG2 in F5 bis F7(F8 wird nicht verwendet) in Funktionen sichern
sbrs w,4 // Bit 4 muß eins sein sonst F9-12
ret // und dann gleich zurück
lds w3,Funktionen
bst w,0
bld w3,F5
bst w,1
bld w3,F6
bst w,2
bld w3,F7
lds w,Funktionen
cp w,w3
brne F_NEU_EINLESEN
ret
F_NEU_EINLESEN:
sts Funktionen,w3 // neuer Stand abspeichern
ldi YL,lo8(AUX_Funktion)
ldi YH,hi8(AUX_Funktion)
ldi ZL,lo8(AUX_Status)
ldi ZH,hi8(AUX_Status)
clr w2 // Zähler
F_AUX_SET: // im Status von jedem AUX ablegen ob er an oder aus ist
ld w,y+
cbr w,0b11111000 // Funktion ausfiltern
cpi w,0
brne 1f
bst w3,FL
rjmp FKT_SPEICHERN
1: cpi w,1
brne 1f
bst w3,F1
rjmp FKT_SPEICHERN
1: cpi w,2
brne 1f
bst w3,F2
rjmp FKT_SPEICHERN
1: cpi w,3
brne 1f
bst w3,F3
rjmp FKT_SPEICHERN
1: cpi w,4
brne 1f
bst w3,F4
rjmp FKT_SPEICHERN
1: cpi w,5
brne 1f
bst w3,F5
rjmp FKT_SPEICHERN
1: cpi w,6
brne 1f
bst w3,F6
rjmp FKT_SPEICHERN
1: cpi w,7
brne 1f
bst w3,F7
FKT_SPEICHERN:
ld w,z
1: bld w,AUX_aktiv // an bit AUX_aktiv im AUX Status ein/aus ablegen
st z+,w
inc w2
cpi w2,ANZAHL_AUX
brne F_AUX_SET
lds w,Funktionen // wenn eine Funktion an, stepdown einschalten, sonst aus
tst w
breq StepDown_ausschalten
/****************
* StepDown ein *
****************/
StepDown_einschalten:
// push w
sbrc flag, noUB // nur wenn UB da einschalten
ret ; wenn keine UB da gleich zurück
ldi w,0 // StepDown starten
out OCR1AH,w
ldi w,1
out OCR1AL,w
in w,TCCR1A
sbr w,(1<<COM1A1) // PWM Ausgang verbinden
out TCCR1A,w
sbi ADCSRA,ADEN // ADC einschalten
sbi ADCSRA,ADSC // ADC Wandlung starten
// pop w
ret
/****************
* StepDown aus *
****************/
StepDown_ausschalten:
// push w
in w,TCCR1A
cbr w,(1<<COM1A1) // PWM Ausgang trennen
out TCCR1A,w
cbi PORTB,PB1 // zur Sicherheit Pin sperren
cbi ADCSRA,ADEN // ADC ausschalten
cbi ADCSRA,ADSC
; pop w
ret
Detected encoding: UTF-8 | 0
|