- MultiPlus Wechselrichter Insel und Nulleinspeisung Conrad         
Ergebnis 1 bis 7 von 7

Thema: AVRMEGA88 und USART

  1. #1
    Erfahrener Benutzer Roboter Experte
    Registriert seit
    19.02.2005
    Alter
    36
    Beiträge
    470

    AVRMEGA88 und USART

    Anzeige

    E-Bike
    Hallo, ich hab ein mittelschweres Problem:

    ich bekomme den USART0 im M88 einfach nicht zum laufen, bekomme beim Compalieren immer den Fehler:

    ...\Theseus.asm(6: 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:

    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!!!!!!

  2. #2
    Erfahrener Benutzer Fleißiges Mitglied
    Registriert seit
    01.03.2006
    Beiträge
    138
    hast schonmal ins datenblatt gesehen der m8 und m88 haben zwar viele gemeinsamkeiten aber vielleicht ist grade da was anderst.

    mfg

  3. #3
    Erfahrener Benutzer Roboter Experte
    Registriert seit
    19.02.2005
    Alter
    36
    Beiträge
    470
    Ich hangel mich seit ne halben stunde durchs Datenblatt und die Register stimmen ( hab ich ja geändert ) aber ich kann die nicht beschreiben, die Register stehen auch im Includefile also muss das passen.

  4. #4
    Erfahrener Benutzer Robotik Einstein
    Registriert seit
    08.05.2005
    Ort
    Issum
    Alter
    52
    Beiträge
    2.236
    Zufälligerweise lese ich woanders vom gleichem Problem Bist Du das ?

    Du mußt die Register genauso ansprechen, wie RAM mit sts dann klappt es auch...

    Gruß Sebastian
    Software is like s e x: its better when its free.
    Linus Torvald

  5. #5
    Erfahrener Benutzer Roboter Experte
    Registriert seit
    19.02.2005
    Alter
    36
    Beiträge
    470
    Um ehrlich zu sein: Ja.

  6. #6
    Erfahrener Benutzer Robotik Einstein
    Registriert seit
    08.05.2005
    Ort
    Issum
    Alter
    52
    Beiträge
    2.236
    He,He dann mach es auch so
    Operand 1 out of range: 0xc5
    0xc5 wo bist Du da im Ram ?

    versuch mal mit
    Code:
    ldi R16,(1<<RXEN0)|(1<<TXEN0)
    sts UCSR0B, R16
    Das sollte klappen meiner Meinung nach...

    Gruß Sebastian
    Software is like s e x: its better when its free.
    Linus Torvald

  7. #7
    Erfahrener Benutzer Roboter Experte
    Registriert seit
    19.02.2005
    Alter
    36
    Beiträge
    470
    genau so hab ichs gemacht, aber im Simulator tut sich in den entsprechenden I/os absulut nix, das find ich ja so komisch

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •  

LiFePO4 Speicher Test