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
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...
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
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).
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