Hallo,
aus der 51er-Welt habe ich bei Soft-SPI immer mit Hilfe des Befehls MOV
C,Px.x gearbeitet.
Sieht also so aus:
1
g16b4:
2
RLC A ; zuerst MSB
3
MOV P1.1,C ; Ausgabedaten bereitstellen
4
CLR P1.0 ; Takt auf Low
5
SETB P1.0 ; Takt auf High, schieben
6
DJNZ R3,g16b4
Jetzt suche ich eine performante Möglichkeit der Umsetzung in AVRASM,
stehe voll auf dem Schlauch und brauch einen Blindenhund.
Die Variante:
1
ldi temp2, 8
2
spi_out2:
3
rol temp1
4
sbi spi_port, spi_data
5
brcs spi_out4
6
cbi spi_port, spi_data
7
spi_out4:
8
sbi spi_port, spi_clk
9
cbi spi_port, spi_clk
10
dec temp2
11
brne spi_out2
ist doch wohl noch etwas ungeschickt und langsam und muss doch eleganter
zu lösen sein. Speziell stört mich auch das Gewackel auf spi_data bei
0-Bits, da ich dort auf Grund einer Fehlersuche mit dem LA dran bin.
Kann mir da bitte mal jemand weiterhelfen?
Gruß
Thomas
Thomas P. schrieb:> ist doch wohl noch etwas ungeschickt und langsam und muss doch eleganter> zu lösen sein.
Das ist schon die optimalste Variante.
Bit-MOV hat der AVR nicht.
Thomas P. schrieb:> Speziell stört mich auch das Gewackel auf spi_data bei> 0-Bits
Dann brauchst Du noch ein RJMP.
Peter
Hi
>Thomas P. schrieb:>> Speziell stört mich auch das Gewackel auf spi_data bei>> 0-Bits>Dann brauchst Du noch ein RJMP.
oder ein zusätzliches Register:
Peter Dannegger schrieb:> Thomas P. schrieb:>> Speziell stört mich auch das Gewackel auf spi_data bei>> 0-Bits>> Dann brauchst Du noch ein RJMP.
Danke für die Unterstützung, bin ich doch nicht ganz so doof wie
angenommen.
Ja, das Wackeln ist dann weg, aber zeitlich wird das ja noch länger.
So schön die AVRs auf manchen Gebieten (Timer) auch sind, ich sehne mich
immer öfter zu den 51ern zurück. Von der Benutzbarkeit der Register
angefangen bis hin zum Befehlssatz.
Thomas
Hi
>Scheint also nicht schneller zu gehen, das war das Ziel.
Nein. Nur die Laufzeit ist bei H und L konstant. Acht Befehle für die
Schleife durfte das Minimum sein. Andererseits sind das etwa 800 kHz
SPI-Takt bei 8 MHz Controllertakt. Für viele Anwendungen ausreichend.
MfG Spess
Thomas P. schrieb:> Ja, das Wackeln ist dann weg, aber zeitlich wird das ja noch länger.> So schön die AVRs auf manchen Gebieten (Timer) auch sind, ich sehne mich> immer öfter zu den 51ern zurück.
Naja, RICS-CPUs sollte man doch besser in C programmieren.
Ich hab auch lange Zeit den AT89C2051/4051 benutzt.
Aber ich bin faul, wenn ich am Layout sparen kann. Und extra Quarz und
Reset ranzupappen spart man beim AVR.
Wenn die Atmel 8051-Sektion auch 8-, 14-, 20-, 28-Pinner mit haufenweise
interner Peripherie rausgebracht hätte, würde ich 8051 vorziehen.
Peter
Peter Dannegger schrieb:> Thomas P. schrieb:>> Ja, das Wackeln ist dann weg, aber zeitlich wird das ja noch länger.>> So schön die AVRs auf manchen Gebieten (Timer) auch sind, ich sehne mich>> immer öfter zu den 51ern zurück.>> Naja, RICS-CPUs sollte man doch besser in C programmieren.
Da bin ich zu doof zu. Den Anlauf habe ich schon genommen, aber wenn ich
bei Problemen dann immer den Ratschlag bekomme im Assemblerlisting
nachzusehen, dann kann ich auch gleich in Assembler programmieren.
> Ich hab auch lange Zeit den AT89C2051/4051 benutzt.> Aber ich bin faul, wenn ich am Layout sparen kann. Und extra Quarz und> Reset ranzupappen spart man beim AVR.
Faul bin ich auch, aber die beiden Punkte sind schnell erledigt und wenn
man mit AVRs und deren seriellen Schnittstelle hantiert, braucht man den
Quarz sowieso.
Mich nervt so langsam wirklich der grottige Befehlssatz der AVRs und die
eingeschränkte Verwendbarkeit der Register.
> Wenn die Atmel 8051-Sektion auch 8-, 14-, 20-, 28-Pinner mit haufenweise> interner Peripherie rausgebracht hätte, würde ich 8051 vorziehen.
Leider werden wir da nicht erhört....
Thomas