mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik Wann out und wann sts benutzen?


Autor: Roman (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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.
    ; Set EXTINT0
    ldi temp, (3<<ISC00)     ; Enable rising edge of INT0
    sts EICRA, temp
    
    ; Enable INT0    
    ldi temp, (1<<INT0)    ; Enable INT 0
    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.
        ; Set Baudrate 
        ldi temp, LOW(UBRRVAL)
        sts UBRR0L, temp
        ldi temp, HIGH(UBRRVAL)
        sts UBRR0H, temp

        ; Frame-Format: 8 Bit
        ldi temp, (1<<UMSEL00)|(3<<UCSZ00)
        sts UCSR0C, temp
    
        ; Enable TX
        ldi temp, (1<<TXEN0)
        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

Autor: Johannes M. (johnny-m)
Datum:

Bewertung
0 lesenswert
nicht 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...

Autor: Roman (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Johannes M. (johnny-m)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Bitzugriff mit sbi/cbi (und auch mit den Skip-Befehlen sbis/sbic) geht 
nur für die unteren 32 Register (bis Register-Adresse 0x1F, da wo der 
andere dicke Strich ist). Alles darüber muss komplett geschrieben werden 
(bzw. Read-Modify-Write).

Autor: ecslowhand (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Probiers damit:
; ---------------------
; UART0 initialisieren
; ATMEGA 88
; ---------------------
USART_init:
cli            ; Interrupts sperren
ldi  r16, LOW((clock/(16*baudrate))-1)  ; Baudrate berechnen..
ldi  r17, HIGH((clock/(16*baudrate))-1)
sts  UBRR0L, r16        ; ...und setzen
sts  UBRR0H, r17

lds  r16, UCSR0B
sbr  r16, (1<<RXCIE0)      ; RX-Interrupt enable
sbr  r16, (1<<RXEN0)|(1<<TXEN0)
cbr  r16, (1<<UCSZ02)      ; 8 datenbits
sts  UCSR0B, r16

lds  r16, UCSR0C
cbr  r16, (1<<UCPOL0)      ; asyncron
cbr  r16, (1<<UMSEL01)|(1<<UMSEL00)    
cbr  r16, (1<<UPM01)|(1<<UPM00)    ; no parity
cbr  r16, (1<<USBS0)        ; 1 stopp-bit
cbr  r16, (1<<UCSZ02)      ; 8 datenbits
sbr  r16, (1<<UCSZ01)|(1<<UCSZ00)
sts  UCSR0C, r16


LG EC

Autor: ecslowhand (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Sorry, die Zeile für das UCSR0C-Register ist zu löschen !
cbr  r16, (1<<UCSZ02)      ; 8 datenbits

  

Autor: Axel R. (axelr) Flattr this
Datum:

Bewertung
0 lesenswert
nicht lesenswert

Autor: Roman (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
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.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.