X-Pointer auf Ramstart zurücksetzen

Gast #257599
Lesenswert?

hallo,

habe ein Problem mit progammieren von Assembler(Atmega8)
Ich lese einen String in den SRAM und will ihn ausfiltern und über Uart
weitersenden.

Wie bekomme ich den X-Pointer nach dem einlesen in den Ram wieder an
den
Ram-Anfang

,damit ich mit vergleichen beginnen kann?
Gast #257602
Lesenswert?

habe es umgesetzt (siehe Senden:),aber Work_pad zeigt weiter
Fehlermeldungen. Kann das Problem noch woanders liegen,oder kann es
auch am Programm Work_Pad liegen?
Habe Programm Mal angehängt,können aber jetzt Fehler durch rumprobieren
drinsein.



;----------------------------------------------------------------------+
.include    "AVR.H"
.equ        SRAM_START,0x60
;----------------------------------------------------------------------- 
-
;Reset and Interrupt vector             ;VNr.  Beschreibung
            rjmp    main                ;1     POWER ON RESET
            reti                        ;2     Int0-Interrupt
            reti                        ;3     Int1-Interrupt
            retI                        ;4     TC2 Compare Match
            reti                        ;5     TC2 Overflow
            reti                        ;6     TC1 Capture
            reti                        ;7     TC1 Compare Match A
            reti                        ;8     TC1 Compare Match B
            reti                        ;9     TC1 Overflow
            reti                        ;10    TC0 Overflow
            reti                        ;11    SPI, STC Serial Transfer
Complete
            reti                        ;12    UART Rx Complete
            reti                        ;13    UART Data Register
Empty
            reti                        ;14    UART Tx Complete
            reti                        ;15    ADC Conversion Complete
            reti                        ;16    EEPROM Ready
            reti                        ;17    Analog Comparator
            reti                        ;18    TWI (IC) Serial
Interface
            reti                        ;19    Store Program Memory
Ready
;----------------------------------------------------------------------- 
-
;Start, Power ON, Reset
main:       ldi     r16,hi8(RAMEND)
            out     SPH,r16
            ldi     r16,lo8(RAMEND)     ;Stack Initialisierung
            out     SPL,r16             ;Init Stackpointer
            sbi     UCSRB,4             ;UCR=UCSRB=0x0B RXEN=Bit4 RX
aktivieren
            sbi     UCSRB,3             ;UCR=UCSRB=0x0B UDRE=Bit3 TX
aktiv
            ldi     r16,3686400/(9600*16)-1 ;Baudrate 9600 einstellen
            out     UBRRL,r16
            ldi     XL,low(SRAM_START)
            ldi     XH,high(SRAM_START)
            ldi     r18,20
;----------------------------------------------------------------------- 
-
mainloop:   wdr
            rcall   Empfangen
            rcall   Senden

            rjmp    mainloop
;----------------------------------------------------------------------- 
-
Empfangen:  sbis    UCSRA,7             ;USR=UCSRA=0x0B RXC=Bit7
            rjmp    Empfangen           ;warten, bis UDR bereit
            in      r16,UDR
            st      x+,r16
            ret                         ;zurück zum Hauptprogramm
;----------------------------------------------------------------------- 
-
Senden:     sbis    UCSRA,5             ;USR Bit5 =  UDRC
            rjmp    Senden              ;warten, bis UDR bereit
            ldi     XL,low(SRAM_START)
            ldi     XH,high(SRAM_START)
            st      x,r16
            ld      r16,x+
            out     UDR,r16
            ret                         ;zurück zum Hauptprogramm
;----------------------------------------------------------------------- 
-

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren