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.