;******************************************************************************* ;* ;* Titel: Programmiervorlage (A2_template.asm) ;* Datum: 08/01/08 Version: 0.6 (07/10/17) ;* Autor: WEIGU ;* ;* Informationen zur Beschaltung: ;* ;* Prozessor: ATmega32A Quarzfrequenz: 16MHz ;* Eingaenge: ;* Ausgaenge: ;* ;* Informationen zur Funktionsweise: ;* ;******************************************************************************* ;------------------------------------------------------------------------------- ; Einbinden der controllerspezifischen Definitionsdatei ;------------------------------------------------------------------------------- ; die folgenden Zeilen werden im Studio 7 nicht mehr benoetigt! ;.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 .DEF W = r24 ;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 ;Endlosschleife ;Ende des Hauptprogramms (falls keine Endlosschleife im Hauptprogramm) ;END: rjmp END ;Endlosschleife ;------------------------------------------------------------------------------- ; Unterprogramme und Interrupt-Behandlungsroutinen ;------------------------------------------------------------------------------- ;.INCLUDE "lib/SR_TIME_16M.asm" ;Zeitschleifenbibliothek einbinden ;------------------------------------------------------------------------------- ; Tabellen im Programmspeicher (Flash) ;------------------------------------------------------------------------------- ;TAB: .DB "Hallo" ;+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ .EXIT ;Ende des Quelltextes