mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik SPI-Ausgabe AT89S8252


Autor: Stefan (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo zusammen,

ich möchte mit der SPI Funktion meines at89s8252
am mosi Pin (P1.5) seriell ein Byte ausgeben, das
ganze soll zu test- und verständnisszwecken
fortlaufend geschehen(immer das selbe Byte)
ich mache das ganze ohne interrupt, stattdessen im
polling-betrieb.

Mein beigefügtes Programm funktioniert nicht ganz,
wennn ich das ganze im debugmodus laufen lasse
(Keil) dann wird die SPI Funktion zwar initialisiert, und
nach 45 mal klicken wird auch das spif interrupt flag gesetzt
obwohl das spdr data register nie beschrieben wurde, was ja
falsch ist....welcher programmteil funktioniert da bei mir nicht?
wieso bekomm ich mein byte nicht ins spdr register geschrieben?

vielen dank für eure Hilfe

(hoffe mal das ralf das liest, der hat mir schon viel weitergeholfen:)

hier mein programm:
$nomod51

#include <AT898252.H>



transmit_completed BIT SPIF_        /* SPI Interrupt Flag 0x80 */
data_to_send DATA 10111101b        ; zu sendendes byte


org 0000h


clr transmit_completed
clr WCOL_                    /* SPI Write Collision Flag */
mov p1,00h

mov SPCR,#01011011b  ;Initialisierung des SPI Port

loop: mov spdr,data_to_send
     jnb transmit_completed,$
     clr transmit_completed
     call loop

;writing to the spi data register(spdr)of the master cpu starts
;the spi clock generator and the data written shifts out of the
;mosi pin

end

Autor: Peter Dannegger (peda)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Du weißt schon, daß Du Dich soeben mitten in ein Wespennest gesetzt hast
?

Haufenweise neue Threads für die gleiche Frage, das gehört sich einfach
nicht.


Aber Du solltest zuerst mal die 8051 Hardwarebeschreibung und
Instructionset durchlesen:

"mov p1,00h" macht erstmal nicht das was Du erwartest und wenn, dann
wäre es falsch.

Lies Dir mal speziell die Portbeschreibung durch. Die meisten
Zusatzfunktionen sind UND-verknüpft, d.h. eine 0 zu setzen, sperrt
diese.

Und die anderen Antworten hast Du Dir ja noch nicht mal durchgelesen
und den "call"-Fehler immer noch drin gelassen.

Wirst Dir wohl auch diese nicht durchlesen, da mache ich jetzt lieber
Schluß.


Peter

Autor: Stefan (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
die hab ich sehr wohl durchgelesen.

ENTSCHULDIGE VIELMALS DASS ICH MICH ALS ANFÄNGER NOCH NICHT SO GUT AUS
KENNE!!!!!!!!!!!!!!

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.