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

/********************************************************************************
 * DCC Wagen Decoder Software V1.0						*
 * Copyright 2011 Toralf Wilhelm						*
 *										*
 * private Nutzung erwünscht, gewerbliche Nutzung erfordert zwingend meine Zustimmung!	*
 * Datei:	Fahrbefehle.inc	*
 * Kontakt:	toralfwilhelm@web.de						*
 * Webseite:	www.toralfwilhelm.de						*
 * Version:	01/2011 Version 1 Start						*
 * Beschreibung: hier wird die Richtungsinfo aus den Fahrbefehlen gwonnen	*
 ********************************************************************************/
#include "definitionen.h"

/**************************
 * Geschwindigkeit setzen *
 **************************/
// hier wird die Richtungsinfo aus den Fahrbefehlen gwonnen zuerst Basis Format
// die neuen Daten kommen in w hier an

V_BASIS:			// V Berechnung 14 und 28 Fahrstufen
				// zuerst Richtung schreiben
	mov	w2,w		// Daten sichern
	sbrc	DCCreg,richtung_inv	// wenn Fahrrichtung nicht reversiert 1x springen
	 com	w2		// ansonsten wird neue Richtung gedreht
	bst	w2,5		// hole Richtungsbit
	clr	w2		// vergleiche Neues Richtungsbit mit altem
	bld	w2,richtung
	eor	w2,DCCreg
	sbrs	w2,richtung	// wenn gesetzt -> Richtung geändert 1x springen
	 rjmp	1f		// wenn nicht weiter mit..

	mov	w2,DCCreg	// Fahrtrichtung drehen
	com	w2
	bst	w2,richtung
	bld	DCCreg,richtung	// nach DCC Register
1:	// Fahrstufen setzen
	sbrc	DCCreg,fahrstufen	// 0=14 Fahrstufen 1x springen
	 ret
	bst	w,4		// Lichtbit holen
	lds	w3,Funktionen
	bld	w3,FL		// und in FL ablegen
	lds	w,Funktionen
	cp	w,w3
	breq	1f
	rcall	F_NEU_EINLESEN
1:	ret

// Daten kommen in w und instruktionsByte kommt in w2 hier an
ERW_OPERATION:	// 128 Fahrstufen setzen
	sbrs	DCCreg,fahrstufen	// wenn Dekoder mit 14 FS arbeitet (CV29 bit1=0)
	 ret			// gleich wieder zurück
	cpi	w2,0b00111111	// auf erw_oper_128_FS testen
	breq	1f		// wenn gleich 1x springen
	ret			// ansonsten gleich zurück
				// zuerst	wieder Richtung schreiben
1:	mov	w2,w		// Daten sichern
	sbrc	DCCreg,richtung_inv	// wenn Fahrrichtung nicht reversiert 1x springen
	 com	w2		// ansonsten wird neue Richtung gedreht
	bst	w2,7		// hole Richtungsbit
	clr	w2		// vergleiche Neues Richtungsbit mit altem
	bld	w2,richtung
	eor	w2,DCCreg
	sbrs	w2,richtung	// wenn gesetzt -> Richtung geändert 1x springen
	 ret

	mov	w2,DCCreg	// Fahrtrichtung drehen
	com	w2
	bst	w2,richtung
	bld	DCCreg,richtung	// nach DCC Register
	ret
Vorgefundene Kodierung: UTF-80