SPI-Ausgabe AT89S8252

Gast #115452
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
#115453
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

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.