Können kann man sicher immer. Was mir bei Deinem Schnippsel fehlen würde ist eine ganze Menge Beschreibung. Was soll das Programm, was ist das Target (der Controller alleine ist mir nicht genug Aussage etc.) etc.? Dabei muss ich sagen, dass das folgende Beispiel sicher nicht der Weisheit letzter Schluss ist.
Genau zu Deiner Aussage: ob AVRStudio einen File "main" selbst laden kann, weiß ich nicht, glaub ich nicht. Aber man kann ja unter [Edit Current Configuration Options] zusätzliche Files einbinden. Find ich nicht pfiffig, ich habe gerne ALLES in einer Projektdirectory. Ich kopiere (copy&paste) einen passenden File bzw. Auszuge davon aus einem passenden Projektdirectory in das Editorfenster im Studio. Mein Beispiel:
Code:
;===================================================================================
;========== Beachte: printout aus AVRStudio geht (nur) bis col 85 ==================
;* Target MCU : ATtiny13
;* Target Hardware : Servotester-Platine, Servo auf PB3, Poti auf PB4
;* Target cpu-frequ. : 9,6 MHz, interner Oszillator
;===================================================================================
;*Versionsgeschichte:
;====================
;x++ 19Sep10 2300 msges und msmin geändert - aber läuft nicht gut
;x1599 21jan08 12ff Version für die "Servoplatine" adaptiert
; dazu ISR+adc+servo1-x30-gut.asm abgeändert.
;
;* Aufgabenstellung
;* ISR zum Testen von einem Servo mit der Servotester-Platine
; Servo über getrennte Leitung, max. 1 A, vom Labornetzteil versorgt
; Portbelegung, Schaltung auszugsweise (übernomm. v. srv-adc+pwm-x29b.asm)
;
; Vcc(6V LNT) -----------------------------------------Vcc-Servo1
;
; Vcc -----------tiny13-Vcc
; |
; | tiny13-PB3=pin2----------------+---Signal-Servo1
; | |
; | + - - (poti1->ADC) - - +
; | |
; | tiny13-PB4--------+
; | V
; | +--------+
; +-------------------+ 25klin +----+
; +--------+ |
; |
; GND---------------------------------------+----------GND-Servo1
;
;* ===============================================
; ######### Original war: ISR+adc+servo1-x30-gut.asm
;===================================================================================
; Speicherbelegung
;r14 low-Byte der ADC-Wandlung (lsb)
;r15 high-Byte der ADC-Wandlung: Beide ergeben einen Wert zwischen 0...1023
;r16 Mehrzweck, high-Byte in Pausen "pause_an", "pause_aus", "led_ende" u.ä.
;r17 low-Byte in Pausen, s.o.
;
;r18 -- --
;r19 -- --
;r20 -- --
;
;r21 Byte Steuerbyte. Es werden nur Bits ausgewertet
; "Rampe" an-aus, 1=Rampe an, bit 1 = Servo 1 , bit 5 = Servo 2
; Übernahme Rampenwert, 1=Daten wurden noch nicht übernommen vom
; Hauptprogramm in die ISR, 0=ISR hat Daten abgeholt und zwar
; bit 2 = Servo 1 , bit 6 = Servo 2
;r22 1/2 Word lsb Zeitwert Rampe aus auf-ab-Rechnerei im Hauptprogramm
;r23 1/2 Word msb zu r26
;r24 1/2 Word LSB Zeitwert Rampe aus ADC/Poti im Hauptprogramm
;r25 1/2 Word MSB wird vom r14/15 geholt und zurechtgerechnet
;
;r26 1/2 Word LSB GESAMTDAUER Servoimpuls MUSS in r26/27 sein wegen sbiw
;r27 1/2 Word MSB Zeitwert für GESAMTDAUER Servoimpuls, etwa 500 Takte ?
;
;r28 1/2 Word lsb LSB RampenCOUNTER Servo1, wird in ISR runtergezählt
;r29 1/2 Word msb MSB Counter stammt vom ADC
;r30 1/2 Word lsb LSB Auf-ab-COUNTER Servo2, wird in ISR runtergezählt
;r31 1/2 Word msb MSB
;
;===================================================================================
#include "tn13def.inc"
; Interrupthandler-Tabelle (aus ATTiny13_doc2535.pdf, Seite 42)
; Address Code Labels ; Comments
.org 0x0000 rjmp anfang ; Reset Handler
;.org 0x0003 rjmp isr_x13 ;TIMO_OVF = Timer0 Overflow Handler
.org 0x0006 rjmp isr_ctc ; IRS für Timer0 CompareA Handler
;
;===================================================================================
; Deklarationen für den Praeprozessor
; Konstanten ####### evtl. auch keine Konstanten definiert
;
#define a r16 ;Kurzbezeichung für Allzweckregister r16
;
; Anschlussbelegung, vgl. srv-adc+pwm-x29b.asm
#define servo1 3 ;Servo 1 auf Port PB3
#define potiadc 2 ;Poti 1 am Port PB4 geht auf ADC-Kanal 2
;
;Festwerte und div. Daten für adcdat etc ====>
#define adcpsc 7 ; =7 ==> Clock/128, 9,6 MHz werden 75 kHz, vgl. doc, S93
;#define adcdat 3 ;Dummywert vom ADC ###>>> "Nur" 8Bit-Wandlung ! ? !
#define msges 5000 ;Gesamtzeit der Rampe: 5000 ISR-Zyklen sind 20 ms
#define mstest 1000 ;Test ergibt mit mstest 500 und tmprs 40: für 2,0 ms
; das heisst: 4 µs Interrupt-Abstand (Fehler +4%)
#define msmin 100 ;Minimalwert für Rampe: 0,5 ms
#define tmrprs 38 ;Preset im Timer-Register (hoffentlich für CTC)
;
;===================================================================================
; Hauptprogramm
;===================================================================================
;
anfang:
rcall mc_init ;Initialisiere den Mikrocontroller
rcall isr_ini ;Initialisiere die ISR
rcall adcinit ;ADC initialisieren
;
sei ; .. Interrupts allgemein zulassen im Hauptprogramm
Vielleicht hilfts Dir. Viel Erfolg.
Lesezeichen