teslanikola
06.11.2006, 22:26
Hallo, ich hab ein mittelschweres Problem:
ich bekomme den USART0 im M88 einfach nicht zum laufen, bekomme beim Compalieren immer den Fehler:
...\Theseus.asm(68): error: Operand 1 out of range: 0xc5
und das ganze immer dort wo ich daten in die Steuerregister des USARTs schreibe oder Daten daraus lese oder Daten in den Datenport schreibe.
Was mache ich falsch?
hier der Code:
;################################################# ##################################
;# #
;# THESEUS #
;# ---------- #
;# #
;# Microcontroller: ATMEGA88 #
;# Quarz: 7.3728 MHz #
;# #
;# Autor: Denis Bethäuser #
;# www.elektronik4freaks.de.tk #
;# denis.bethaeuser@gmx.de #
;# #
;################################################# ##################################
;----[ µC Includefiles I ]----------------------------------------------------------
.include "m88def.inc"
;----[ Register Def. / Alias Def. ]-------------------------------------------------
.def tmp = r16 ; Universalregister 1 ( zT Low-Byte )
.def tmp2 = r17 ; Universalregister 2 ( zT High-Byte )
.equ clock = 7372800
.equ baud = 9600
.equ ubrrval = clock/(baud*16)-1
;----[ Interrupt-Vektoren ]---------------------------------------------------------
.org 0000 ; Zum Programmbeginn springen
rjmp reset
.org OVF1addr
rjmp reset
;----[ STACK-Pointer und Z-Pointer Einrichten ]-------------------------------------
reset: ; Programm beginnt
ldi tmp, high(ramend) ; High-Byte in Stackpointer schreiben
out SPH, tmp
ldi tmp, low(ramend) ; Low-Byte in Stackpointer schreiben
out SPL, tmp
;----[ I/O Einstellungen ]----------------------------------------------------------
;----[ UART Einstellungen ]---------------------------------------------------------
ldi tmp, high(ubrrval) ; Baudrate-Highbyte schreiben
out UBRR0H, tmp
ldi tmp, low(ubrrval) ; Baudrate-Lowbyte schreiben
out UBRR0L, tmp
ldi tmp, (1<<RXEN0)|(1<<TXEN0) ; Empfang-Inter., Senden + Empfangen aktiv.
out UCSR0B, tmp
ldi tmp, (1<<USBS0)|(3<<UCSZ00) ; Datenformat: 8N1
out UCSR0C, tmp
/*----[ ADC Einstellungen ]----------------------------------------------------------
ldi tmp, (1<<REFS0)|(1<<ADLAR) ; Referenz = Vcc, 8 Bit-Modus, ADC0
out ADMUX, tmp
ldi tmp, (1<<ADEN)|(1<<ADATE)|(1<<ADSC)|(1<<ADPS1)
out ADCSR, tmp ; Frei, Start Conver., Tackt=Clock/4
*/
sei
;####[ Hauptprogramm ]################################################## ############
main:
rjmp main
;################################################# ##################################
;---[ RS232 Sendesubroutine ]-------------------------------------------------------
send:
sbis UCSR0A, UDRE0 ; Warte bis Sendepuffer leer
rjmp send
out UDR0, tmp ; Byte im Arbeitsregister senden
ret
Bitte Helft mir, beim Mega8 klapts ( mit entsprechenden Register versteht sich ) aber warum hier nede, bin am abschnallen!!!!!!
ich bekomme den USART0 im M88 einfach nicht zum laufen, bekomme beim Compalieren immer den Fehler:
...\Theseus.asm(68): error: Operand 1 out of range: 0xc5
und das ganze immer dort wo ich daten in die Steuerregister des USARTs schreibe oder Daten daraus lese oder Daten in den Datenport schreibe.
Was mache ich falsch?
hier der Code:
;################################################# ##################################
;# #
;# THESEUS #
;# ---------- #
;# #
;# Microcontroller: ATMEGA88 #
;# Quarz: 7.3728 MHz #
;# #
;# Autor: Denis Bethäuser #
;# www.elektronik4freaks.de.tk #
;# denis.bethaeuser@gmx.de #
;# #
;################################################# ##################################
;----[ µC Includefiles I ]----------------------------------------------------------
.include "m88def.inc"
;----[ Register Def. / Alias Def. ]-------------------------------------------------
.def tmp = r16 ; Universalregister 1 ( zT Low-Byte )
.def tmp2 = r17 ; Universalregister 2 ( zT High-Byte )
.equ clock = 7372800
.equ baud = 9600
.equ ubrrval = clock/(baud*16)-1
;----[ Interrupt-Vektoren ]---------------------------------------------------------
.org 0000 ; Zum Programmbeginn springen
rjmp reset
.org OVF1addr
rjmp reset
;----[ STACK-Pointer und Z-Pointer Einrichten ]-------------------------------------
reset: ; Programm beginnt
ldi tmp, high(ramend) ; High-Byte in Stackpointer schreiben
out SPH, tmp
ldi tmp, low(ramend) ; Low-Byte in Stackpointer schreiben
out SPL, tmp
;----[ I/O Einstellungen ]----------------------------------------------------------
;----[ UART Einstellungen ]---------------------------------------------------------
ldi tmp, high(ubrrval) ; Baudrate-Highbyte schreiben
out UBRR0H, tmp
ldi tmp, low(ubrrval) ; Baudrate-Lowbyte schreiben
out UBRR0L, tmp
ldi tmp, (1<<RXEN0)|(1<<TXEN0) ; Empfang-Inter., Senden + Empfangen aktiv.
out UCSR0B, tmp
ldi tmp, (1<<USBS0)|(3<<UCSZ00) ; Datenformat: 8N1
out UCSR0C, tmp
/*----[ ADC Einstellungen ]----------------------------------------------------------
ldi tmp, (1<<REFS0)|(1<<ADLAR) ; Referenz = Vcc, 8 Bit-Modus, ADC0
out ADMUX, tmp
ldi tmp, (1<<ADEN)|(1<<ADATE)|(1<<ADSC)|(1<<ADPS1)
out ADCSR, tmp ; Frei, Start Conver., Tackt=Clock/4
*/
sei
;####[ Hauptprogramm ]################################################## ############
main:
rjmp main
;################################################# ##################################
;---[ RS232 Sendesubroutine ]-------------------------------------------------------
send:
sbis UCSR0A, UDRE0 ; Warte bis Sendepuffer leer
rjmp send
out UDR0, tmp ; Byte im Arbeitsregister senden
ret
Bitte Helft mir, beim Mega8 klapts ( mit entsprechenden Register versteht sich ) aber warum hier nede, bin am abschnallen!!!!!!