Ich versuche gerade das UART beispiel für meinen atmaga162 umzubastel
und irgendwie scheint URXaddr im "m162def.inc" nict vorhanden zus
sein...
Jedenfalls bekomme ich folgende fehler
F:\#Daten\gps\gps_0\gps_0.asm(21): error: Use of undefined or forward
referenced symbol 'URXCaddr' in .org
F:\#Daten\gps\gps_0\gps_0.asm(22): error: Overlap in .cseg: addr=0x0
conflicts with 0x0:0x1
alles was ich gemacht hab is das .include "m8def.inc" in .include
"m162def.inc" umgewandelt...
Hat jemand ne ahnung was ich falsch mache? Langsam bin ich nämlich am
verzweifeln :-(
hier nochmal mein code
.include "m162def.inc"
.def temp = R16
.equ F_CPU = 4000000 ; Systemtakt in Hz
.equ BAUD = 9600 ; Baudrate
; Berechnungen
.equ UBRR_VAL = ((F_CPU+BAUD*8)/(BAUD*16)-1) ; clever runden
.equ BAUD_REAL = (F_CPU/(16*(UBRR_VAL+1))) ; Reale Baudrate
.equ BAUD_ERROR = ((BAUD_REAL*1000)/BAUD-1000) ; Fehler in Promille
.if ((BAUD_ERROR>10) || (BAUD_ERROR<-10)) ; max. +/-10 Promille
Fehler
.error "Systematischer Fehler der Baudrate grösser 1 Prozent und damit
zu hoch!"
.endif
.org 0x00
rjmp main
.org URXCaddr ; Interruptvektor für
UART-Empfang
rjmp int_rxc
; Hauptprogramm
main:
; Stackpointer initialisieren
ldi temp, LOW(RAMEND)
out SPL, temp
ldi temp, HIGH(RAMEND)
out SPH, temp
; Port D = Ausgang
ldi temp, 0xFF
out DDRD, temp
; Baudrate einstellen
ldi temp, HIGH(UBRR_VAL)
out UBRRH, temp
ldi temp, LOW(UBRR_VAL)
out UBRRL, temp
; Frame-Format: 8 Bit
ldi temp, (1<<URSEL)|(3<<UCSZ0)
out UCSRC, temp
sbi UCSRB, RXCIE ; Interrupt bei Empfang
sbi UCSRB, RXEN ; RX (Empfang) aktivieren
sei ; Interrupts global
aktivieren
loop:
rjmp loop ; Endlosschleife
; Interruptroutine: wird ausgeführt sobald ein Byte über das UART
empfangen wurde
int_rxc:
push temp ; temp auf dem Stack sichern
in temp, UDR ; empfangenes Byte lesen,
; dadurch wird auch der
Interrupt gelöscht
out PORTD, temp ; Daten ausgeben
pop temp ; temp wiederherstellen
reti ; Interrupt beenden
Also alles haarklein wie im bsp...
Hi Wie kommst du darauf, das der Interrupt 'URXCaddr' heisst? MfG Spess
Hi Nur als Tipp: Der ATMega162 hat 2 UARTs. MfG Spess
ein bissel denken sollte man natürlich auch und dran denken,d ass der atmega 2 usart SChnittstellen hat >.<
da war jemand schneller XD vielen dank auf jeden fall für die schnelle antwort... er schreibt jetzt brav is EEPROM allerdings wie ich glaube nur schrott ^^ der Uart0 hängt jetzt an nem skytraq Venus5 GPS modul und empfängt fleißig daten über den Tx allerdings nix sinnvolles wie mir scheint. Ich hab im forum schon was gelesen von wegen man muss was mit den fusebits machen damit er auch schön mit der eingestellten frq arbeitet das werd ich mir gleich ma zu gemüte führen :-)
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.