Pfad:AVR-DE => Anwendungen => Magic circle
ATtiny2313 Anwendungen von
AVR-Einchip-Prozessoren AT90S, ATtiny, ATmega und ATxmega
Magischer Kreis mit ATtiny2313 und LEDs

Software Magic circle mit ATtiny2313

Hier klicken um eine gezippte Version dieser Seite herunterzuladen (1.45 MB)

;
; *******************************************
; * Magic circle mit ATtiny2313 und 12 LEDs *
; * Version 2 vom Juli 2017                 *
; * (C)2017 by www.avr-asm-tutorial.net     *
; *******************************************
;
; Include-Datei fuer den betreffenden AVR-Typ
.NOLIST
.INCLUDE "tn2313def.inc" ; Headerdatei fuer ATtiny2313
.LIST
;
; ============================================
;       D E B U G - S C H A L T E R
; ============================================
;
; Final: alle Debugschalter = 0
.equ debug_Lampenstrom = 0
.equ debug_back = 0
;
; ============================================
;   H A R D W A R E I N F O R M A T I O N E N 
; ============================================
;
; Devices = ATtiny2313/4313
;             ________________
;          1 /                |20
;  Reset o--|reset         vcc|--o +3,3V (max 3,6V)
;          2|                 |19
;    L13 o--|pd0           pb7|--o L1
;          3|                 |18
;    L12 o--|pd1           pb6|--o L2
;          4|                 |17
;    L11 o--|pa1           pb5|--o L3
;          5|                 |16
;    L10 o--|pa0      oc1b/pb4|--o Kath L1+L2+L3+L4
;          6|                 |15
;     L9 o--|pd2      oc1a/pb3|--o Kath L10+L11
;          7|                 |14
;     L8 o--|pd3      oc0a/pb2|--o Kath L5+L6+L7+L8
;          8|                 |13
;     L7 o--|pd4           pb1|--o L4
; Kath     9|                 |12
; L9+L12 o--|pd5/oc0b      pb0|--o L5
; +L13    10|                 |11
;     0V o--|gnd           pd6|--o L6
;           |_________________|
;
; ============================================
;              T I M I N G
; ============================================
;
; Prozessortakt
;   Der Prozessor laeuft mit dem internen 8-MHz-
;   RC-Oszillator und gesetzter CKDIV-Fuse (ohne
;   Fuse-Aenderung, Default-Werkseinstellung),
;   daher mit 1 MHz Takt
;
; LED-Ansteuerung:
;   Timer TC0 und TC1 laufen synchron mit einem
;   Vorteiler von 8 (125 kHz) und steuern im 8-Bit-
;   PWM-Modus die LEDs an (488 Hz) die vier PWM-
;   Ausgaenge OCR0A, OCR0B, OCR1A und OCR1B an.
;   Alle A- und B-Vergleichswerte werden synchron
;   auf diesselben Werte gesetzt.
;   Alle Ausgaenge werden im Toggle-Modus betrieben
;   (244 Hz PWM-Frequenz).
;   LEDs, die ausgeschaltet sind, haben ihr Aus-
;   gangs-Treiber-Richtungsbit geloescht. Einge-
;   schaltete LEDs haben ihr Richtungsbit gesetzt,
;   und ihr Portausgang ist ebenfalls gesetzt.
;   Der PWM-Wert wird nach jedem Durchlauf im
;   Normalmodus um eins erhoeht, laeuft er ueber
;   wird entweder bei Null begonnen (Flagge bUpOnly
;   gesetzt) oder abwaerts bis Null gezaehlt.
;   Am Ende jedes Zyklus wird die naechste Bit-
;   kombination gelesen aud ausgewertet.
;
; Ablaufsteuerung:
;   Diese erfolgt mittels einer Tabelle. Sie
;   enthaelt jeweils vier Bytes:
;   1. Flaggenbyte: Die Flaggen koennen normal (0),
;      nur Aufwaertszaehlen (1), doppelte
;      Geschwindigkeit (2) und vierfache Ge-
;      schwindigkeit (4 plus 2) kodieren.
;   2. Richtungsbits fuer.Port D (Bit 6 ist immer
;      zu setzen)
;   3. Richtungsbits fuer Port B (Bits 2, 3 und 4
;      sind immer zu setzen)
;   4. Richtungsbits fuer Port A
;   Ist das Flaggenbyte mit folgenden Werten besetzt,
;   wird der Ablauf gesteuert und nur ein nachfolgen-
;   des Byte gelesen:
;   0xFF: Ende der Tabelle, Neubeginn am Anfang
;   0xFE: Wiederholung der nachfolgenden Eintraege,
;         zweites Byte ist die Anzahl Wiederholungen
;   0xFD: Zweite Wiederholungsschleife, zweites
;         Byte ist die Anzahl Wiederholungen
;   0xFC: Ende der ersten Wiederholungsschleife,
;         Beginn am Anfang der ersten Wiederholung
;   0xFB: Ende der zweiten Wiederholungsschleife,
;         Beginn am Anfang der zweiten Wiederholung
;
;
; ============================================
;   R E G I S T E R D E F I N I T I O N E N
; ============================================
;
; Frei: R0..R14
.DEF rSreg = R15 ; SREG-Sicherung
.DEF rmp = R16 ; Vielzweckregister
.DEF rimp = R17 ; Vielzweck innerhalb Int
.DEF rFlag = R18 ; Flaggenregister
	.equ bUpOnly = 0 ; Nur Aufwaerts
	.equ bFast = 1 ; Doppelte Geschwindigkeit
	.equ bVeryFast = 2 ; Vierfache Geschwindigkeit
;
	.equ bFall = 6 ; Abwaerts-Zyklus
	.equ bEndCycle = 7 ; Ende Zyklus
.DEF rRep1 = R19
.DEF rRep2 = R20
.DEF rPwm = R21
;
; ============================================
;       S R A M   D E F I N I T I O N E N
; ============================================
;
.DSEG
.ORG  0X0060
; Format: Label: .BYTE N ; Reserviere N Bytes fuer ...
;
; ==============================================
;   R E S E T   U N D   I N T   V E K T O R E N
; ==============================================
;
.CSEG
.ORG $0000
	rjmp Main ; Reset-Vektor
	reti ; INT0 Int Vektor 1
	reti ; INT1 Int Vektor 2
	reti ; TC1CAPT Int Vektor 3
	reti ; TC1COMPA Int Vektor 4
	reti ; TC1OVF Int Vektor 5
	rjmp Isr ; TC0OVF Int Vektor 6
	reti ; USART-RX Int Vektor 7
	reti ; USART UDRE Int Vektor 8
	reti ; USART TX Int Vektor 9
	reti ; ANACOMP Int Vektor 10
	reti ; PCINT Int Vektor 11
	reti ; TC1COMPB Int Vektor 12
	reti ; TC0COMPA Int Vektor 13
	reti ; TC0COMPB Int Vektor 14
	reti ; USI-START Int Vektor 15
	reti ; USI-OVERFLOW Int Vektor 16
	reti ; EEREADY Int Vektor 17
	reti ; WDT-OVERFLOW Int Vektor 18
;
; ==========================================
;    I N T E R R U P T   S E R V I C E
; ==========================================
;
Isr: ; TC0-Overflow
	in rSreg,SREG
	ldi rimp,0
	out OCR1AH,rimp
	out OCR1AL,rPwm
	out OCR1BH,rimp
	out OCR1BL,rPwm
	out OCR0A,rPwm
	out OCR0B,rPwm
	sbrs rFlag,bFall
	rjmp IsrUp
	sbrc rFlag,bVeryFast
	subi rPwm,2
	sbrc rFlag,bFast
	subi rPwm,1
	subi rPwm,1
	brne IsrRet
	cbr rFlag,1<<bFall
	sbr rFlag,1<<bEndCycle
	rjmp IsrRet
IsrUp:
	sbrc rFlag,bVeryFast
	subi rPwm,-2
	sbrc rFlag,bFast
	inc rPwm
	inc rPwm
	brne IsrRet
	sbrc rFlag,bUpOnly
	rjmp IsrUpOnly
	sbrc rFlag,bVeryFast
	subi rPwm,2
	sbrc rFlag,bFast
	dec rPwm
	dec rPwm
	sbr rFlag,1<<bFall
	rjmp IsrRet
IsrUpOnly:
	clr rPwm
	sbr rFlag,1<<bEndCycle
IsrRet:
	wdr
	out SREG,rSreg
	reti
;
; ============================================
;    H A U P T P R O G R A M M    I N I T
; ============================================
;
Main:
; Initiire Stapel
	ldi rmp, LOW(RAMEND) ; Initiiere LSB Stapel
	out SPL,rmp
;
;
.if debug_back == 1
	rcall back
	.endif
; Start-up delay
	clr ZH
	clr ZL
	ldi rmp,5
Delay:
	wdr
	sbiw ZL,1 ; 2
	brne Delay ; 2
	; 4*65536 = 
	dec rmp
	brne Delay
;		
; Init Port D
	ldi rmp,0b01011111 ; Ausgabe-Pins Port D
	out PORTD,rmp
	ldi rmp,0b00100000 ; OC-Pin Output, LED-Pins Input
	out DDRD,rmp
; Init Port B
	ldi rmp,0b11100011 ; Ausgabe-Pins Port B
	out PORTB,rmp
	ldi rmp,0b00011100 ; OC-Pins Output, LED-Pins Input 
	out DDRB,rmp
; Init Port A
	ldi rmp,0x03 ; Ausgabepins
	out PORTA,rmp
	clr rmp ; Alle Pins auf Input
	out DDRA,rmp
	rcall BackDelay
	rcall BackDelay
; Debuggen
.if debug_Lampenstrom == 1
	ldi rmp,0b00000011 ; alle Lampen Port A an
	out DDRA,rmp
	ldi rmp,0b11111111 ; alle Lampen Port B an
	out DDRB,rmp
	ldi rmp,0b01111111 ; alle Lampen Port D an
	out DDRD,rmp
Schleife:
	rjmp Schleife
	.endif
; Tabelle initiieren
	clr rFlag ; Flaggen auf Null
	rcall InitCycle
; Init Timer TC0
	ldi rmp,0xFF
	out OCR0A,rmp ; Compare A
	out OCR0B,rmp ; Compare B
	ldi rmp,(1<<COM0A1)|(1<<COM0A0)|(1<<COM0B1)|(1<<COM0B0)|(1<<WGM01)|(1<<WGM00)
	out TCCR0A,rmp
; Init Timer TC1
	clr rmp
	out OCR1AH,rmp ; MSB Compare A
	ldi rmp,0xFF
	out OCR1AL,rmp ; LSB Compare A
	clr rmp
	out OCR1BH,rmp ; MSB Compare B
	ldi rmp,0xFF
	out OCR1BL,rmp ; LSB Compare B
	ldi rmp,(1<<COM1A1)|(1<<COM1A0)|(1<<COM1B1)|(1<<COM1B0)|(1<<WGM10)
	out TCCR1A,rmp
	; Timer starten
	ldi rmp,(1<<WGM12)|(1<<CS11) ; Timer 1, Prescale = 8, 8-Bit-PWM
	out TCCR1B,rmp
	ldi rmp,1<<CS01 ; Timer 0, Prescaler = 8
	out TCCR0B,rmp
	ldi rmp,1<<TOIE0 ; Timer 0 Interrupt
	out TIMSK,rmp
; Sleep und Interrupt
	ldi rmp,1<<SE ; Enable sleep
	out MCUCR,rmp
	sei
;
; ============================================
;     P R O G R A M M - S C H L E I F E
; ============================================
;
Loop:
	sleep ; Schlafen legen
	nop ; Dummy fuer Aufwecken
	sbrc rFlag,bEndCycle
	rcall Cycle
	rjmp loop ; Zurueck nach Loop
;
; Naechster Zyklus
;
; Steuercodes
.equ cEnde = 0xFF
.equ cRepeat1 = 0xFE
.equ cRepeat2 = 0xFD
.equ cNext1 = 0xFC
.equ cNext2 = 0xFB
.equ cControl = 0xF0
;
Cycle:
	lpm rmp,Z+
	cpi rmp,cControl
	brcs Cycle1 ; normaler Zyklus
	cpi rmp,cRepeat1
	breq CycleRepeat1
	brcc InitCycle ; Neustart
	cpi rmp,cNext1
	breq CycleNext1
	cpi rmp,cRepeat2
	breq CycleRepeat2
	cpi rmp,cNext2
	breq CycleNext2
	lpm rmp,Z+
	rjmp Cycle
CycleNext2:
	lpm rmp,Z+
	dec rRep2
	breq Cycle
	mov ZH,YH
	mov ZL,YL
	rjmp Cycle
CycleNext1:
	lpm rmp,Z+
	dec rRep1
	breq Cycle
	mov ZH,XH
	mov ZL,XL
	rjmp Cycle
CycleRepeat1:
	lpm rRep1,Z+
	mov XH,ZH
	mov XL,ZL
	rjmp Cycle
CycleRepeat2:
	lpm rRep2,Z+
	mov YH,ZH
	mov YL,ZL
	rjmp Cycle
InitCycle:
	ldi ZH,High(2*Tab) ; Z auf Tabellenanfang
	ldi ZL,Low(2*Tab)
	rjmp Cycle
Cycle1:
	mov rFlag,rmp
	lpm rmp,Z+
	out DDRD,rmp
	lpm rmp,Z+
	out DDRB,rmp
	lpm rmp,Z+
	out DDRA,rmp
	ret
;
; Teste alle Lampen rueckwaerts
;
back:
	cbi PORTD,PORTD5
	sbi DDRD,DDD5
	cbi PORTB,PORTB2
	sbi DDRB,DDB2
	cbi PORTB,PORTB3
	sbi DDRB,DDB3
	cbi PORTB,PORTB4
	sbi DDRB,DDB4
	; Lampen an
	sbi DDRD,DDD0 ; L13
	sbi PORTD,PORTD0
	rcall BackDelay
	cbi DDRD,DDD0
	cbi PORTD,PORTD0
	sbi DDRA,DDA1 ; L11
	sbi PORTA,PORTA1
	rcall BackDelay
	cbi DDRA,DDA1
	cbi PORTA,PORTA1
	sbi DDRD,DDD1 ; L12
	sbi PORTD,PORTD1
	rcall BackDelay
	cbi DDRD,DDD1
	cbi PORTD,PORTD1
	sbi DDRA,DDA0 ; L10
	sbi PORTA,PORTA0
	rcall BackDelay
	cbi DDRA,DDA0
	cbi PORTA,PORTA0
	sbi DDRD,DDD2 ; L9
	sbi PORTD,PORTD2
	rcall BackDelay
	cbi DDRD,DDD2
	cbi PORTD,PORTD2
	sbi DDRB,DDB0 ; L8
	sbi PORTB,PORTB0
	rcall BackDelay
	cbi DDRB,DDB0
	cbi PORTB,PORTB0
	sbi DDRB,DDB0 ; L5
	sbi PORTB,PORTB0
	rcall BackDelay
	cbi DDRB,DDB0
	cbi PORTB,PORTB0
	sbi DDRD,DDD6 ; L6
	sbi PORTD,PORTD6
	rcall BackDelay
	cbi DDRD,DDD6
	cbi PORTD,PORTD6
	sbi DDRB,DDB5 ; L3
	sbi PORTB,PORTB5
	rcall BackDelay
	cbi DDRB,DDB5
	cbi PORTB,PORTB5
	sbi DDRB,DDB1 ; L4
	sbi PORTB,PORTB1
	rcall BackDelay
	cbi DDRB,DDB1
	cbi PORTB,PORTB1
	sbi DDRD,DDD3 ; L8
	sbi PORTD,PORTD3
	rcall BackDelay
	cbi DDRD,DDD3
	cbi PORTD,PORTD3
	sbi DDRD,DDD4 ; L7
	sbi PORTD,PORTD4
	rcall BackDelay
	cbi DDRD,DDD4
	cbi PORTD,PORTD4
	sbi DDRB,DDB6 ; L2
	sbi PORTB,PORTB6
	rcall BackDelay
	cbi DDRB,DDB6
	cbi PORTB,PORTB6
	sbi DDRB,DDB7 ; L1
	sbi PORTB,PORTB7
	rcall BackDelay
	cbi DDRB,DDB7
	cbi PORTB,PORTB7
	ldi rmp,0b11100011
	out PORTB,rmp
	ldi rmp,0b01011111
	out PORTD,rmp
	ldi rmp,0b00000011
	out PORTA,rmp
	ldi rmp,0b11111111
	out DDRB,rmp
	ldi rmp,0b01111111
	out DDRD,rmp
	ldi rmp,0b00000011
	out DDRA,rmp
	rcall BackDelay
	rcall BackDelay
	rcall BackDelay
	rcall BackDelay
	rcall BackDelay
	clr rmp
	out PORTB,rmp
	out PORTD,rmp
	out PORTA,rmp
	rcall BackDelay
;
	cbi PORTD,PORTD5
	sbi DDRD,DDD5
	cbi PORTB,PORTB2
	sbi DDRB,DDB2
	cbi PORTB,PORTB3
	sbi DDRB,DDB3
	cbi PORTB,PORTB4
	sbi DDRB,DDB4
;
	sbi DDRD,DDD0 ; L13
	sbi PORTD,PORTD0
	rcall BackDelay
	cbi DDRD,DDD0
	cbi PORTD,PORTD0
back1:
	ret
	rjmp back1

BackDelay:
.equ cDelay = 0
	ldi r25,High(cDelay)
	ldi r24,Low(cDelay)
BackDelay1:
	sbiw r24,1
	brne BackDelay1
	ret
;
; Tabelle mit Ablauf
;
;
; Tabelle mit Konstanten
;
.include "konstanten.inc"
;
; Flaggen
.equ cUpOnly = 1<<bUpOnly
.equ cFast = 1<<bFast
.equ cVeryFast  = (1<<bVeryFast)|(1<<bFast)
;
Tab:
; Eine Runde langsam
.set cX = X1
.db Byte1(cX),Byte2(cX),Byte3(cX),Byte4(cX)
.set cX = X2
.db Byte1(cX),Byte2(cX),Byte3(cX),Byte4(cX)
.set cX = X7
.db Byte1(cX),Byte2(cX),Byte3(cX),Byte4(cX)
.set cX = X8
.db Byte1(cX),Byte2(cX),Byte3(cX),Byte4(cX)
.set cX = X4
.db Byte1(cX),Byte2(cX),Byte3(cX),Byte4(cX)
.set cX = X3
.db Byte1(cX),Byte2(cX),Byte3(cX),Byte4(cX)
.set cX = X6
.db Byte1(cX),Byte2(cX),Byte3(cX),Byte4(cX)
.set cX = X5
.db Byte1(cX),Byte2(cX),Byte3(cX),Byte4(cX)
.set cX = X9
.db Byte1(cX),Byte2(cX),Byte3(cX),Byte4(cX)
.set cX = X10
.db Byte1(cX),Byte2(cX),Byte3(cX),Byte4(cX)
.set cX = X12
.db Byte1(cX),Byte2(cX),Byte3(cX),Byte4(cX)
.set cX = X11
.db Byte1(cX),Byte2(cX),Byte3(cX),Byte4(cX)
.set cX = X13
.db Byte1(cX),Byte2(cX),Byte3(cX),Byte4(cX)
.set cX = X0
.db Byte1(cX),Byte2(cX),Byte3(cX),Byte4(cX)
; Rueckwaerts schnell
.set cX = cVeryFast + X13
.db Byte1(cX),Byte2(cX),Byte3(cX),Byte4(cX)
.set cX = cVeryFast + X11
.db Byte1(cX),Byte2(cX),Byte3(cX),Byte4(cX)
.set cX = cVeryFast + X12
.db Byte1(cX),Byte2(cX),Byte3(cX),Byte4(cX)
.set cX = cVeryFast + X10
.db Byte1(cX),Byte2(cX),Byte3(cX),Byte4(cX)
.set cX = cVeryFast + X9
.db Byte1(cX),Byte2(cX),Byte3(cX),Byte4(cX)
.set cX = cVeryFast + X5
.db Byte1(cX),Byte2(cX),Byte3(cX),Byte4(cX)
.set cX = cVeryFast + X6
.db Byte1(cX),Byte2(cX),Byte3(cX),Byte4(cX)
.set cX = cVeryFast + X3
.db Byte1(cX),Byte2(cX),Byte3(cX),Byte4(cX)
.set cX = cVeryFast + X4
.db Byte1(cX),Byte2(cX),Byte3(cX),Byte4(cX)
.set cX = cVeryFast + X8
.db Byte1(cX),Byte2(cX),Byte3(cX),Byte4(cX)
.set cX = cVeryFast + X7
.db Byte1(cX),Byte2(cX),Byte3(cX),Byte4(cX)
.set cX = cVeryFast + X2
.db Byte1(cX),Byte2(cX),Byte3(cX),Byte4(cX)
.set cX = cVeryFast + X1
.db Byte1(cX),Byte2(cX),Byte3(cX),Byte4(cX)
.set cX = X0
.db Byte1(cX),Byte2(cX),Byte3(cX),Byte4(cX)
; Zwei Lampen rotieren
.set cX = X1_2
.db Byte1(cX),Byte2(cX),Byte3(cX),Byte4(cX)
.set cX = X2_7
.db Byte1(cX),Byte2(cX),Byte3(cX),Byte4(cX)
.set cX = X7_8
.db Byte1(cX),Byte2(cX),Byte3(cX),Byte4(cX)
.set cX = X4_8
.db Byte1(cX),Byte2(cX),Byte3(cX),Byte4(cX)
.set cX = X3_6
.db Byte1(cX),Byte2(cX),Byte3(cX),Byte4(cX)
.set cX = X5_6
.db Byte1(cX),Byte2(cX),Byte3(cX),Byte4(cX)
.set cX = X5_9
.db Byte1(cX),Byte2(cX),Byte3(cX),Byte4(cX)
.set cX = X9_10
.db Byte1(cX),Byte2(cX),Byte3(cX),Byte4(cX)
.set cX = X10_12
.db Byte1(cX),Byte2(cX),Byte3(cX),Byte4(cX)
.set cX = X11_12
.db Byte1(cX),Byte2(cX),Byte3(cX),Byte4(cX)
.set cX = X11_13
.db Byte1(cX),Byte2(cX),Byte3(cX),Byte4(cX)
.set cX = X0
.db Byte1(cX),Byte2(cX),Byte3(cX),Byte4(cX)
; Explode
.set cX = X13
.db Byte1(cX),Byte2(cX),Byte3(cX),Byte4(cX)
.set cX = X13
.db Byte1(cX),Byte2(cX),Byte3(cX),Byte4(cX)
.set cX = X9bis13
.db Byte1(cX),Byte2(cX),Byte3(cX),Byte4(cX)
.set cX = Xalle
.db Byte1(cX),Byte2(cX),Byte3(cX),Byte4(cX)
; Implode
.set cX = X9bis13
.db Byte1(cX),Byte2(cX),Byte3(cX),Byte4(cX)
.set cX = X13
.db Byte1(cX),Byte2(cX),Byte3(cX),Byte4(cX)
.db cRepeat1,5 ; lange Pause
	.set cX = X0
	.db Byte1(cX),Byte2(cX),Byte3(cX),Byte4(cX)
	.db cNext1,0
; S Aufbau
.db cRepeat1,3
	.set cX = XS1
	.db Byte1(cX),Byte2(cX),Byte3(cX),Byte4(cX)
	.set cX = XS2
	.db Byte1(cX),Byte2(cX),Byte3(cX),Byte4(cX)
	.set cX = XS3
	.db Byte1(cX),Byte2(cX),Byte3(cX),Byte4(cX)
	.set cX = XS4
	.db Byte1(cX),Byte2(cX),Byte3(cX),Byte4(cX)
	.set cX = XS5
	.db Byte1(cX),Byte2(cX),Byte3(cX),Byte4(cX)
	.set cX = XS6
	.db Byte1(cX),Byte2(cX),Byte3(cX),Byte4(cX)
	.set cX = XS7
	.db Byte1(cX),Byte2(cX),Byte3(cX),Byte4(cX)
	.set cX = XS8
	.db Byte1(cX),Byte2(cX),Byte3(cX),Byte4(cX)
	.db cRepeat2,5
		.set cX = XS
		.db Byte1(cX),Byte2(cX),Byte3(cX),Byte4(cX)
		.db cNext2,0
	.db cNext1,0
; Lange Pause
.db cRepeat1,10
	.set cX = X0
	.db Byte1(cX),Byte2(cX),Byte3(cX),Byte4(cX)
	.db cNext1,0
; Zufallszahlen
	.set cX = XR1
	.db Byte1(cX),Byte2(cX),Byte3(cX),Byte4(cX)
	.set cX = XR2
	.db Byte1(cX),Byte2(cX),Byte3(cX),Byte4(cX)
	.set cX = XR3
	.db Byte1(cX),Byte2(cX),Byte3(cX),Byte4(cX)
	.set cX = XR4
	.db Byte1(cX),Byte2(cX),Byte3(cX),Byte4(cX)
	.set cX = XR5
	.db Byte1(cX),Byte2(cX),Byte3(cX),Byte4(cX)
	.set cX = XR6
	.db Byte1(cX),Byte2(cX),Byte3(cX),Byte4(cX)
	.set cX = XR7
	.db Byte1(cX),Byte2(cX),Byte3(cX),Byte4(cX)
	.set cX = XR8
	.db Byte1(cX),Byte2(cX),Byte3(cX),Byte4(cX)
	.set cX = XR9
	.db Byte1(cX),Byte2(cX),Byte3(cX),Byte4(cX)
	.set cX = XR10
	.db Byte1(cX),Byte2(cX),Byte3(cX),Byte4(cX)
	.set cX = XR11
	.db Byte1(cX),Byte2(cX),Byte3(cX),Byte4(cX)
	.set cX = XR12
	.db Byte1(cX),Byte2(cX),Byte3(cX),Byte4(cX)
	.set cX = XR13
	.db Byte1(cX),Byte2(cX),Byte3(cX),Byte4(cX)
	.set cX = XR14
	.db Byte1(cX),Byte2(cX),Byte3(cX),Byte4(cX)
	.set cX = XR15
	.db Byte1(cX),Byte2(cX),Byte3(cX),Byte4(cX)
	.set cX = XR16
	.db Byte1(cX),Byte2(cX),Byte3(cX),Byte4(cX)
	.set cX = XR17
	.db Byte1(cX),Byte2(cX),Byte3(cX),Byte4(cX)
	.set cX = XR18
	.db Byte1(cX),Byte2(cX),Byte3(cX),Byte4(cX)
	.set cX = XR19
	.db Byte1(cX),Byte2(cX),Byte3(cX),Byte4(cX)
	.set cX = XR20
	.db Byte1(cX),Byte2(cX),Byte3(cX),Byte4(cX)
	.set cX = XR21
	.db Byte1(cX),Byte2(cX),Byte3(cX),Byte4(cX)
	.set cX = XR22
	.db Byte1(cX),Byte2(cX),Byte3(cX),Byte4(cX)
	.set cX = XR23
	.db Byte1(cX),Byte2(cX),Byte3(cX),Byte4(cX)
	.set cX = XR24
	.db Byte1(cX),Byte2(cX),Byte3(cX),Byte4(cX)
	.set cX = XR25
	.db Byte1(cX),Byte2(cX),Byte3(cX),Byte4(cX)
	.set cX = XR26
	.db Byte1(cX),Byte2(cX),Byte3(cX),Byte4(cX)
	.set cX = XR27
	.db Byte1(cX),Byte2(cX),Byte3(cX),Byte4(cX)
	.set cX = XR28
	.db Byte1(cX),Byte2(cX),Byte3(cX),Byte4(cX)
	.set cX = XR29
	.db Byte1(cX),Byte2(cX),Byte3(cX),Byte4(cX)
	.set cX = XR30
	.db Byte1(cX),Byte2(cX),Byte3(cX),Byte4(cX)
	.set cX = XR31
	.db Byte1(cX),Byte2(cX),Byte3(cX),Byte4(cX)
	.set cX = XR32
	.db Byte1(cX),Byte2(cX),Byte3(cX),Byte4(cX)

.db 0xFF,0xFF
;
; Ende Quellcode
; Copyright
.db "(C)2017 by Gerhard Schmidt  " ; menschenlesbar
.db "C(2)17 0ybG reahdrS hcimtd  " ; wortgerecht
;

Die Tabelle mit den Konstanten sieht so aus:

; Definitionen
.equ X0=1843200 ; 00.1C.20.00
.equ X1=10231808 ; 00.9C.20.00
.equ X2=6037504 ; 00.5C.20.00
.equ X3=3940352 ; 00.3C.20.00
.equ X4=1974272 ; 00.1E.20.00
.equ X5=1908736 ; 00.1D.20.00
.equ X6=1859584 ; 00.1C.60.00
.equ X7=1847296 ; 00.1C.30.00
.equ X8=1845248 ; 00.1C.28.00
.equ X9=1844224 ; 00.1C.24.00
.equ X10=18620416 ; 01.1C.20.00
.equ X11=35397632 ; 02.1C.20.00
.equ X12=1843712 ; 00.1C.22.00
.equ X13=1843456 ; 00.1C.21.00
.equ X1_2=14426112 ; 00.DC.20.00
.equ X1_3=12328960 ; 00.BC.20.00
.equ X1_4=10362880 ; 00.9E.20.00
.equ X1_5=10297344 ; 00.9D.20.00
.equ X1_6=10248192 ; 00.9C.60.00
.equ X1_7=10235904 ; 00.9C.30.00
.equ X1_8=10233856 ; 00.9C.28.00
.equ X1_9=10232832 ; 00.9C.24.00
.equ X1_10=27009024 ; 01.9C.20.00
.equ X1_11=43786240 ; 02.9C.20.00
.equ X1_12=10232320 ; 00.9C.22.00
.equ X1_13=10232064 ; 00.9C.21.00
.equ X2_3=8134656 ; 00.7C.20.00
.equ X3_4=4071424 ; 00.3E.20.00
.equ X4_5=2039808 ; 00.1F.20.00
.equ X5_6=1925120 ; 00.1D.60.00
.equ X6_7=1863680 ; 00.1C.70.00
.equ X7_8=1849344 ; 00.1C.38.00
.equ X8_9=1846272 ; 00.1C.2C.00
.equ X9_10=18621440 ; 01.1C.24.00
.equ X10_11=52174848 ; 03.1C.20.00
.equ X11_12=35398144 ; 02.1C.22.00
.equ X12_13=1843968 ; 00.1C.23.00
.equ X1_2_3=16523264 ; 00.FC.20.00
.equ X2_3_4=8265728 ; 00.7E.20.00
.equ X3_4_5=4136960 ; 00.3F.20.00
.equ X4_5_6=2056192 ; 00.1F.60.00
.equ X5_6_7=1929216 ; 00.1D.70.00
.equ X6_7_8=1865728 ; 00.1C.78.00
.equ X7_8_9=1850368 ; 00.1C.3C.00
.equ X8_9_10=18623488 ; 01.1C.2C.00
.equ X9_10_11=52175872 ; 03.1C.24.00
.equ X10_11_12=52175360 ; 03.1C.22.00
.equ X11_12_13=35398400 ; 02.1C.23.00
.equ X2_7=6041600 ; 00.5C.30.00
.equ X4_8=1976320 ; 00.1E.28.00
.equ X3_6=3956736 ; 00.3C.60.00
.equ X5_9=1909760 ; 00.1D.24.00
.equ X10_12=18620928 ; 01.1C.22.00
.equ X11_13=35397888 ; 02.1C.21.00
.equ X9bis13=52176640 ; 03.1C.27.00
.equ Xalle=67075840 ; 03.FF.7F.00
.equ XS1=6037504 ; 00.5C.20.00
.equ XS2=14426112 ; 00.DC.20.00
.equ XS3=14491648 ; 00.DD.20.00
.equ XS4=14492672 ; 00.DD.24.00
.equ XS5=14492928 ; 00.DD.25.00
.equ XS6=14493440 ; 00.DD.27.00
.equ XS7=14495488 ; 00.DD.2F.00
.equ XS8=14626560 ; 00.DF.2F.00
.equ XS=16723712 ; 00.FF.2F.00
.equ XR1=10248192 ; 00.9C.60.00
.equ XR2=2056192 ; 00.1F.60.00
.equ XR3=10232832 ; 00.9C.24.00
.equ XR4=43917312 ; 02.9E.20.00
.equ XR5=6037504 ; 00.5C.20.00
.equ XR6=8151040 ; 00.7C.60.00
.equ XR7=27013376 ; 01.9C.31.00
.equ XR8=1859840 ; 00.1C.61.00
.equ XR9=1843456 ; 00.1C.21.00
.equ XR10=10231808 ; 00.9C.20.00
.equ XR11=35397888 ; 02.1C.21.00
.equ XR12=54272000 ; 03.3C.20.00
.equ XR13=1847296 ; 00.1C.30.00
.equ XR14=41689600 ; 02.7C.22.00
.equ XR15=18637824 ; 01.1C.64.00
.equ XR16=18621440 ; 01.1C.24.00
.equ XR17=1843200 ; 00.1C.20.00
.equ XR18=14426112 ; 00.DC.20.00
.equ XR19=18751488 ; 01.1E.20.00
.equ XR20=1848064 ; 00.1C.33.00
.equ XR21=22881536 ; 01.5D.25.00
.equ XR22=8152064 ; 00.7C.64.00
.equ XR23=22831104 ; 01.5C.60.00
.equ XR24=1908736 ; 00.1D.20.00
.equ XR25=18703872 ; 01.1D.66.00
.equ XR26=1848320 ; 00.1C.34.00
.equ XR27=18688000 ; 01.1D.28.00
.equ XR28=1844224 ; 00.1C.24.00
.equ XR29=10232832 ; 00.9C.24.00
.equ XR30=1844224 ; 00.1C.24.00
.equ XR31=20783104 ; 01.3D.20.00
.equ XR32=1843968 ; 00.1C.23.00



Lob, Tadel, Fehlermeldungen, Genöle und Geschimpfe oder Spam bitte über das Kommentarformular an mich.

©2017 by http://www.avr-asm-tutorial.net