;*******************************************************************************
;*
;*	Titel:	Wellenformgenerator mit dem D/A-Wandler (C30C_DAC_wavegen.asm)
;*	Datum:	29/11/10	Version:	0.1
;*	Autor:	WEIGU
;*
;*	Informationen zur Beschaltung:
;*      
;*	Prozessor: ATmega32A		Quarzfrequenz: 16MHz
;*	Eingaenge: 2 Schalter an PD0 und PD1
;*	Ausgaenge: 8 Bit Port B zum R2R Netzwerk
;*
;*	Informationen zur Funktionsweise:
;*      Ueber zwei Schalter kann eine Wellenform ausgewählt werden. Ausgabe mit
;*      maximaler Frequenz und mit 440Hz.
;*			
;*******************************************************************************

;-------------------------------------------------------------------------------
;	Einbinden der controllerspezifischen Definitionsdatei
;-------------------------------------------------------------------------------
.NOLIST				;List-Output ausschalten
.INCLUDE "m32def.inc"		;AVR-Definitionsdatei einbinden
.LIST				;List-Output wieder einschalten

;-------------------------------------------------------------------------------
;       Organisation des Datenspeichers (SRAM)
;-------------------------------------------------------------------------------
;.DSEG                          ;was ab hier folgt kommt in den SRAM-Speicher
;TAB1:  .BYTE  100              ;100 Byte grosse Tabelle im Datensegment

;+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
;       Programmspeicher (FLASH)     Programmstart nach RESET ab Adr. 0x0000
;+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
.CSEG                           ;was ab hier folgt kommt in den FLASH-Speicher
.ORG	0x0000			;Programm beginnt an der FLASH-Adresse 0x0000
RESET1:	rjmp	INIT		;springe nach INIT (ueberspringe ISR Vektoren)

;-------------------------------------------------------------------------------
;	Sprungadressen fuer die Interrupts organisieren (ISR VECTORS)	
;-------------------------------------------------------------------------------
        ;Vektortabelle (im Flash-Speicher)
;.ORG   INT0addr                ;interner Vektor fuer INT0 (alt.: .ORG 0x0002)
;       rjmp    ISR_I0          ;Springe zur ISR von INT0

;-------------------------------------------------------------------------------
;	Initialisierungen und eigene Definitionen
;-------------------------------------------------------------------------------
.ORG    INT_VECTORS_SIZE        ;Platz fuer ISR Vektoren lassen
INIT:
.DEF	Zero = r15		;Register 1 wird zum Rechnen benoetigt
	clr	r15		;und mit Null belegt
.DEF	Tmp1 = r16		;Register 16 dient als erster Zwischenspeicher
.DEF	Tmp2 = r17		;Register 17 dient als zweiter Zwischenspeicher
.DEF	Cnt1 = r18		;Register 18 dient als Zaehler
.DEF    WL = r24                ;Register 24 und 25 dienen als universelles
.DEF    WH = r25                ;Doppelregister W und zur Parameteruebergabe

	;Stapel initialisieren (fuer Unterprogramme bzw. Interrupts)
	ldi	Tmp1,LOW(RAMEND)	;RAMEND (SRAM) ist in der Definitions-
	out	SPL,Tmp1		;datei festgelegt
	ldi	Tmp1,HIGH(RAMEND)
	out	SPH,Tmp1

;-------------------------------------------------------------------------------
;	Hauptprogramm
;-------------------------------------------------------------------------------
MAIN:
        rjmp    MAIN

;-------------------------------------------------------------------------------
;	Unterprogramme und Interrupt-Behandlungsroutinen
;-------------------------------------------------------------------------------
.INCLUDE "SR_TIME_16M_sample.asm"     ;Zeitschleifenbibliothek einbinden

;-------------------------------------------------------------------------------
;       Tabellen im Programmspeicher (Flash)
;-------------------------------------------------------------------------------
SINET:  .DB     128, 131, 134, 137, 140, 143, 146, 149
        .DB     152, 155, 158, 162, 165, 167, 170, 173
        .DB     176, 179, 182, 185, 188, 190, 193, 196
        .DB     198, 201, 203, 206, 208, 211, 213, 215
        .DB     218, 220, 222, 224, 226, 228, 230, 232
        .DB     234, 235, 237, 238, 240, 241, 243, 244
        .DB     245, 246, 248, 249, 250, 250, 251, 252
        .DB     253, 253, 254, 254, 254, 255, 255, 255
        .DB     255, 255, 255, 255, 254, 254, 254, 253
        .DB     253, 252, 251, 250, 250, 249, 248, 246
        .DB     245, 244, 243, 241, 240, 238, 237, 235
        .DB     234, 232, 230, 228, 226, 224, 222, 220
        .DB     218, 215, 213, 211, 208, 206, 203, 201
        .DB     198, 196, 193, 190, 188, 185, 182, 179
        .DB     176, 173, 170, 167, 165, 162, 158, 155
        .DB     152, 149, 146, 143, 140, 137, 134, 131
        .DB     128, 124, 121, 118, 115, 112, 109, 106
        .DB     103, 100, 97, 93, 90, 88, 85, 82
        .DB     79, 76, 73, 70, 67, 65, 62, 59
        .DB     57, 54, 52, 49, 47, 44, 42, 40
        .DB     37, 35, 33, 31, 29, 27, 25, 23
        .DB     21, 20, 18, 17, 15, 14, 12, 11
        .DB     10, 9, 7, 6, 5, 5, 4, 3
        .DB     2, 2, 1, 1, 1, 0, 0, 0
        .DB     0, 0, 0, 0, 1, 1, 1, 2
        .DB     2, 3, 4, 5, 5, 6, 7, 9
        .DB     10, 11, 12, 14, 15, 17, 18, 20
        .DB     21, 23, 25, 27, 29, 31, 33, 35
        .DB     37, 40, 42, 44, 47, 49, 52, 54
        .DB     57, 59, 62, 65, 67, 70, 73, 76
        .DB     79, 82, 85, 88, 90, 93, 97, 100
        .DB     103, 106, 109, 112, 115, 118, 121, 124

;+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
.EXIT				;Ende des Quelltextes
