Hallo Leute,

ich habe ein Problem mit meinem Bootloader, dieser soll für einen ATmega 168 geschrieben werden.

Das ist die Hauptdatei:
Code:
/**************************************************
	-------->>>>> programm-doku siehe asm_main.s
***************************************************/

#include <avr/io.h>


int main(void)
{
	asm("rjmp asm_main");
	return(0);
}
asm_main.s:
Code:
#include <avr/io.h>
#include "def_asm.h"



	.section .text
	.global asm_main

asm_main:


	;Baudrate 2400
	ldi     temp1,hi8(BAUDRATE)
	out		IO_REG(UBRR0H), temp1
	ldi		temp1,lo8(BAUDRATE)	
	out		IO_REG(UBRR0L),temp1
	ldi		temp1, (1<<RXEN0) | (1<<TXEN0)
	out		IO_REG(UCSR0B), temp1


	ldi     temp1,hi8(BAUDRATE)
	out		IO_REG(UBRR0H), temp1
	ldi		temp1,lo8(BAUDRATE)	
	out		IO_REG(UBRR0L),temp1
	ldi		temp1, (1<<RXEN0) | (1<<TXEN0)
	out		IO_REG(UCSR0B), temp1

init:

	;Baudrate 2400
	ldi     temp1,hi8(BAUDRATE)
	out		IO_REG(UBRR0H), temp1
	ldi		temp1,lo8(BAUDRATE)	
	out		IO_REG(UBRR0L),temp1
	ldi		temp1, (1<<RXEN0) | (1<<TXEN0)
	out		IO_REG(UCSR0B), temp1
	
	;Timer 2 für IR-CLK
	ldi 	temp1, (1<<WGM21) | (1<<COM2A0) 	// 36khz ir-clk mit timer2
	out		IO_REG(TCCR2A), temp1
	ldi     temp1, (1<<CS21) 
	out     IO_REG(TCCR2B),temp1
	ldi		temp1, 0x22
	out		IO_REG(OCR2A), temp1

	;Dioden Status-LED IR-LED Front-LED
	ldi		temp1, (1<<PB3) | (1<<PB0)
	out		DDRB, temp1									// ir-led-driver und status-led1
	ldi		temp1, (1<<PD2)								// status-led2							
	out		DDRD, temp1
	ldi 	temp1, (1<<PD6)
	out		DDRD, temp1									// rote front-led für batterie

	; batt test5 init

	;ADC Enable und ADC Prescaler auf 128
	ldi		temp1, (1<<ADEN) | (1<<ADPS2) | (1<<ADPS1) | (1<<ADPS0)	// adc-clk = sys-clk/128 
	out		IO_REG(ADCSRA), temp1
	;Reference Spannung auf Interne 2,56 Volt setzen und ADC5 als Input pin 
	ldi 	temp1, (1<<REFS0) | (1<<REFS1) | (1<<MUX2) | (1<<MUX0);
	out		IO_REG(ADMUX), temp1

	ret

	rcall	init						// init com-port-verbindung mit 2400 baud
	ldi		ZL, lo8(wait_send);			// startstring senden
	ldi		ZH, hi8(wait_send);			
	rcall	com_put_string				// startstring senden

main_loop:
;Batt test
	sbi		IO_REG(ADCSRA), ADSC   
batt_loop:
	sbic	IO_REG(ADCSRA), ADSC
	rjmp	batt_loop
	clc
	in		INT_REG_L, ADCL
	in		INT_REG_H, ADCH
	subi	INT_REG_L, lo8(BATT_MIN)
	sbci	INT_REG_H, hi8(BATT_MIN) 
	brcc	batt_ok						
//	versorgungs-spannung zu gering
	sbi		IO_REG(PORTD), PD6
	rjmp ende
batt_ok:

;schleifen kopf
LDI r19,255
verzoeg111:
LDI r18,255
verzoeg11:
LDI r17,255
verzoeg1:


// Was da ?
rcall	wait_serial					// warte auf ein zeichen vom com-port
cpi		CHAR_GET_REG, STARTZEICHEN	// war es das startzeichen?
breq	start_rec					// ja, dann startet die datenübertragung


;Schleifen Fuß
DEC r17				
BRNE verzoeg1		
DEC r18
BRNE verzoeg11
DEC r19
BRNE verzoeg111
rjmp start_prog
	
// Speichern
start_rec:
	sbi		IO_REG(PORTB), PB0			// led on IR-Diode
	sbi		IO_REG(PORTD), PD2			// led on Status
	clr		temp1						
	sts		page_adr, temp1				// flash-page-adress mit 0 initialisieren
	sts		page_adr+1, temp1			// programm wird immer ab adresse 0 gespeichert

	rcall	flash_get					// flashdaten einlesen

	cbi		IO_REG(PORTB), PB0			// led off
	cbi		IO_REG(PORTD), PD2			// led off
	sbi		IO_REG(PORTD), PD6			// led on
	rcall	wait_serial					// wartezeit eine sekunde
	cbi		IO_REG(PORTD), PD6			// led off
	ldi		ZL, lo8(flash_ok);			// startstring senden
	ldi		ZH, hi8(flash_ok);			
	rcall	com_put_string				// startstring senden


start_prog:
clr		ZL							// adresse 0 = reset vector
clr		ZH
ijmp 								// indirect jump zum reset vector


 *** END *** 
ende:
rjmp ende
def_asm.h:
Code:
#define BIT(n) (1<<(n))
#define IO_REG(n) _SFR_IO_ADDR(n)

#define sbi(p,b) p|=(1<<(b))
#define cbi(p,b) p&=(~(1<<(b)))

/*************************
	registerdefinitionen
**************************/
#define CHAR_GET_REG r24	// register für char-rückgabe 
#define CHAR_PUT_REG r25	// register für char-übergabe
#define CHAR_RET_REG r24	// register für char-rückgabe 

#define INT_REG_H r25		// register für int high byte
#define INT_REG_L r24		// register für int low  byte

#define temp1 r16			// arbeitsregister
#define temp2 r17
#define temp3 r18
#define temp4 r19

#define STARTZEICHEN ':'	// startzeichen für einen record
#define SEKUNDE 2			// für zeitschleife

#define MAXRECORDS 17		// wert für maximale anzahl daten im record

#define BATT_MIN 810  		// minimalster batterie-wert ca. 4,5V
#define BAUDRATE 520		// UBRR Wert für Baudrate 2400
Wenn ich auf kompilieren gehe kommt folgende Message:
GCC plug-in: Error: Object file not found on expected location D:\Eigene Dateien\schule\elektro\Asuro\c-programme\bootloader\default\bootloader.elf

Und folgendes Buildprotokoll:
Build started 23.2.2008 at 17:35:14
avr-gcc.exe -mmcu=atmega168 -mmcu=atmega168 -Wall -gdwarf-2 -O0 -fsigned-char -MD -MP -MT asm_main.o -MF dep/asm_main.o.d -x assembler-with-cpp -Wa,-gdwarf2 -c ../asm_main.s
../asm_main.s: Assembler messages:
../asm_main.s:14: Error: number must be less than 64
../asm_main.s:16: Error: number must be less than 64
../asm_main.s:18: Error: number must be less than 64
../asm_main.s:22: Error: number must be less than 64
../asm_main.s:24: Error: number must be less than 64
../asm_main.s:26: Error: number must be less than 64
../asm_main.s:33: Error: number must be less than 64
../asm_main.s:35: Error: number must be less than 64
../asm_main.s:37: Error: number must be less than 64
../asm_main.s:41: Error: number must be less than 64
../asm_main.s:43: Error: number must be less than 64
../asm_main.s:45: Error: number must be less than 64
../asm_main.s:59: Error: number must be less than 64
../asm_main.s:62: Error: number must be less than 64
../asm_main.s:112: Error: number must be less than 32
../asm_main.s:114: Error: number must be less than 32
../asm_main.s:117: Error: number must be less than 64
../asm_main.s:118: Error: number must be less than 64
../asm_main.s:177: Error: junk at end of line, first unrecognized character is `*'
make: *** [asm_main.o] Error 1
Build succeeded with 0 Warnings...
Ich habe keine Idee, was ich machen kann.
Habt ihr noch eine Idee?