ATMega88 USART / Baudrateneinstellung Servus an alle, suche Hilfe bei der Einstellung der Baudrate bei einem ATMega88 mit einer externen Taktfrequenz von 20MHz. Ich versuche mich gerade in Assembler, mit den anderen Programmiersprachen habe ich wenig Probleme. Mit Assembler versteht halt man mehr - denk ich mal. Folgendes Problem: ATMega88 auf STK500. Programmierung in Assembler mit AVR-Studio. Die Baudrate wird beim ATMega88 über die beiden Register UBRR0H ($C5) und UBRRH0L ($C4) eingestellt. Mein Code dazu sieht wie folgt aus: .include "m88def.inc" .equ CLOCK = 20000000 .equ BAUD = 9600 .equ UBRRVAL = CLOCK/(BAUD*16)-1 ; Baudrate einstellen ldi r16, LOW(UBRRVAL) out UBRR0L, r16 ldi r16, HIGH(UBRRVAL) out UBRR0H, r16 Bei "out UBRR0L, r16" bekomme ich die Fehlermeldung "illegal argument type or count". Die Lösung ist mit Sicherheit einfach, ich habe in der Doku und hier im Forum bis jetzt leider nichts gefunden. Danke für Hilfe, Wolfram Der Fairniss halber weise ich darauf hin, daß ich den gleichen Beitrag im roboternetz poste.
Hallo, bei meinem mega8 heissen die register UBRRL und UBRRH. Damit klappts bei mir einwandfrei. gruss Andy
ICh habe die Includefiles verglichen, beim mega8 heißen sie UBRRL und UBRRH, beim mega88 aber leider so wie beschrieben UBRR0L und UBRR0H. Wäre der Name falsch, müßte der Assembler eine "undefined variable referenced" bringen. Trotzdem Danke.
Hallo,
das Problem ist das der Bereich der normalen Ports nicht mehr für alle
Spezialports gereicht hat. Somit hat man einige Ports in den Rambereich
gemappt. Siehe m88def.inc :
;***** MEMORY MAPPED I/O REGISTER DEFINITIONS (&FF-$60) ************
.equ  UDR0       =$C6
.equ  UBRR0H     =$C5
.equ  UBRR0L     =$C4
.equ  UCSR0C     =$C2
.equ  UCSR0B     =$C1
.equ  UCSR0A     =$C0
.equ  TWAMR      =$BD
.equ  TWCR       =$BC
.equ  TWDR       =$BB
.equ  TWAR       =$BA
.equ  TWSR       =$B9
.equ  TWBR       =$B8
.equ  ASSR       =$B6
.equ  OCR2B      =$B4
.equ  OCR2A      =$B3
.equ  TCNT2      =$B2
.equ  TCCR2B     =$B1
.equ  TCCR2A     =$B0
.equ  OCR1BH     =$8B
.equ  OCR1BL     =$8A
.equ  OCR1AH     =$89
.equ  OCR1AL     =$88
.equ  ICR1H      =$87
.equ  ICR1L      =$86
.equ  TCNT1H     =$85
.equ  TCNT1L     =$84
.equ  TCCR1C     =$82
.equ  TCCR1B     =$81
.equ  TCCR1A     =$80
.equ  DIDR1      =$7F
.equ  DIDR0      =$7E
.equ  ADMUX      =$7C
.equ  ADCSRB     =$7B
.equ  ADCSRA     =$7A
.equ  ADCH       =$79
.equ  ADCL       =$78
.equ  TIMSK2     =$70
.equ  TIMSK1     =$6F
.equ  TIMSK0     =$6E
.equ  PCMSK2     =$6D
.equ  PCMSK1     =$6C
.equ  PCMSK0     =$6B
.equ  EICRA      =$69
.equ  PCICR      =$68
.equ  OSCCAL     =$66
.equ  PRR        =$64
.equ  CLKPR      =$61
.equ  WDTCSR     =$60
Somit sollte dann folgender Code funzen:
.include "m88def.inc"
.equ CLOCK = 20000000
.equ BAUD = 9600
.equ UBRRVAL = CLOCK/(BAUD*16)-1
    ; Baudrate einstellen
    ldi r16, LOW(UBRRVAL)
    sts UBRR0L, r16
    ldi r16, HIGH(UBRRVAL)
    sts UBRR0H, r16
Habe es aber nicht getestet!
Gruß Topsoft
  Beim Mega88 liegt wie bei den Mega64/128-ern ein Teil der I/O-Ports ausserhalb von 0..63, d.h. ist nur mit LDS/STS nicht aber mit IN/OUT adressierbar.
Danke Topsoft und A.K., das war´s, ich hatte noch im Includefile gestöbert, da ist mir auch aufgefallen, daß die Register in den Memory gemappt sind. Die Assemblerbefehle dazu haben mir aber gefehlt. Ich dank euch für eure Hilfe. Wenn man vor der Kiste sitzt und manchmal an wirklich einfachen Problemen scheitert, frustriert das schon. Aber jeder hat mal klein angefangen, man quält sich halt durch. Ich möcht´s ja auch verstehen. Thank´s bis zum nächsten mal, Wolfram
Danke Topsoft nach 2 Tagen suchen war dieser Tip Goldwert Marco
Hallo zusammen,
Ich komme noch nicht weiter mit dem anbei Frame-Format Code,
include "m88def.inc"
.def temp = r16
.equ CLOCK = 3690000
.equ BAUD = 9600
.equ UBRRVAL = CLOCK/(BAUD*16)-1
; Baudrate einstellen
        ldi temp, LOW(UBRRVAL)
        sts UBRR0L, temp
        ldi temp, HIGH(UBRRVAL)
        sts UBRR0H, temp
; Frame-Format: 8 Bit
        ldi temp, (1<<UMSEL01)|(3<<UCSZ00)
        sts UCSR0C, temp
        sbi UCSR0B,TXEN0                  ; TX aktivieren
wie kann ich also TX aktivieren????
vielen Dank im voraus
Benites
  Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
  
  Bestehender Account
  
  
  
  Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
  Noch kein Account? Hier anmelden.
 Thread beobachten
 Thread beobachten Seitenaufteilung abschalten
 Seitenaufteilung abschalten