Wann out und wann sts benutzen?

Gast #567126
Lesenswert?
• ▲
▼
Hallo zusammen,

bei der Programmierung des MIDI Interfaces für meine Yamaha Orgel, ist 
mir aufgefallen das ich manche Einstellungen mit sts schreiben muss und 
manche mit out. Hier am Beispiel des externen Interuptes.
1
    ; Set EXTINT0
2
    ldi temp, (3<<ISC00)     ; Enable rising edge of INT0
3
    sts EICRA, temp
4
    
5
    ; Enable INT0    
6
    ldi temp, (1<<INT0)    ; Enable INT 0
7
    out EIMSK, temp

Ich verwende den mega88 und habe auch schon gelesen das der erweiterte 
I/O Bereich per in/out erreichbar ist. Welche Addressen sind das beim 
mega88?

Ferner habe ich das Problem das bei der Initialisierung des UART0 das 
einschalten des TX ein kopieren der Daten in UBR0H zur Folge hat.
Das heisst setzen des UCSR0B, danach ist UBRR0H identisch.
1
        ; Set Baudrate 
2
        ldi temp, LOW(UBRRVAL)
3
        sts UBRR0L, temp
4
        ldi temp, HIGH(UBRRVAL)
5
        sts UBRR0H, temp
6

7
        ; Frame-Format: 8 Bit
8
        ldi temp, (1<<UMSEL00)|(3<<UCSZ00)
9
        sts UCSR0C, temp
10
    
11
        ; Enable TX
12
        ldi temp, (1<<TXEN0)
13
        sts UCSR0B,temp

Muss ich hier auch einen anderen Befehl zum setzen des TXEN benutzen? 
Meine Versuche funktionierten alle nicht!

Jeder Rat ist willkommen.

Gruss

Roman
#567136
Lesenswert?
• ▲
▼
Schau mal ins Datenblatt. Am Ende des Datenblatts ist das Register 
Summary. Da kann man sehr schön sehen, welche Register zum normalen und 
welche zum extended I/O-Space gehören. Die Register, bei denen 
zusätzlich zur RAM-Adresse (in Klammern) noch eine Register-Adresse 
angegeben ist (0x00 bis 0x3F) sind per in und out ansprechbar. Alles 
darüber nur über lds und sts.

EDIT: Also alles bis zu dem dicken Strich in der Tabelle oberhalb vom 
SREG ist per in und out ansprechbar...
Gast #567166
Lesenswert?
• ▲
▼
Danke Johannes,

das ging aber schnell. Somit kann ich also über die m88def.inc festlegen 
ob ich die ASCR Adresse 0x30 mit out oder als 0x50 mit sts ansprechen 
will.

Hast Du eine Idee warum das mit dem setzen des TXEN nicht klappt. Per 
SBI komme ich da ja nicht hin. Also das ganze Register setzen und per 
sts hoch?

Gruss

Roman
Gast #567184
Lesenswert?
• ▲
▼
Probiers damit:
1
; ---------------------
2
; UART0 initialisieren
3
; ATMEGA 88
4
; ---------------------
5
USART_init:
6
cli            ; Interrupts sperren
7
ldi  r16, LOW((clock/(16*baudrate))-1)  ; Baudrate berechnen..
8
ldi  r17, HIGH((clock/(16*baudrate))-1)
9
sts  UBRR0L, r16        ; ...und setzen
10
sts  UBRR0H, r17
11

12
lds  r16, UCSR0B
13
sbr  r16, (1<<RXCIE0)      ; RX-Interrupt enable
14
sbr  r16, (1<<RXEN0)|(1<<TXEN0)
15
cbr  r16, (1<<UCSZ02)      ; 8 datenbits
16
sts  UCSR0B, r16
17

18
lds  r16, UCSR0C
19
cbr  r16, (1<<UCPOL0)      ; asyncron
20
cbr  r16, (1<<UMSEL01)|(1<<UMSEL00)    
21
cbr  r16, (1<<UPM01)|(1<<UPM00)    ; no parity
22
cbr  r16, (1<<USBS0)        ; 1 stopp-bit
23
cbr  r16, (1<<UCSZ02)      ; 8 datenbits
24
sbr  r16, (1<<UCSZ01)|(1<<UCSZ00)
25
sts  UCSR0C, r16


LG EC
Gast #567259
Lesenswert?
• ▲
▼
Danke an alle für die vielen Antworten. Vor allen Dingen die Macros 
scheinen Spitze zu sein, wenn ich sie denn dann verstanden habe ;-).

read-modify-write wie Johannes schon ausführte, allerdings ohne Stress 
wo steht das Register.

Danke und Gruss

Roman

Antwort schreiben

Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt. Bitte hier nur auf die ursprüngliche Frage antworten, für neue Fragen einen neuen Beitrag erstellen.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.