Quelltext /~heha/basteln/m/Kram/dccrail-avrgcc.zip/binärgleich/Funktionsbefehle.S

/********************************************************************************
 * 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












Vorgefundene Kodierung: UTF-80