SPI kanssa 8051 ja 93C46

V

vikky

Guest
kukaan voi auttaa minua 2 ohjelman rajapinnat 93C46 kanssa 8051 käyttäen SPI protocol.Thank sinua.

 
u
didnt mainitsi joka 8051 perustuu valvoja ur käyttäen
teidän on haku, joka 8051 perustuu ohjaimessa on inbuilt SPI yksikkö.
AVR valvojat eli (ATmega16 jne. ..) ovat inbuilt SPI yksikkö joten voit interface SPI eeprom kuin programm on huolissaan sinun tulee määrittää joitakin SPI rekistereihin, jotta SPI viestintä

Jos käytät 8051 että
doesnt on SPI yksikkö sinun on työskenneltävä entistä ahkerammin.
ensimmäinen u on opittava SPI-protokollaa ja sen ajoitus digrams sitten kirjoittaa ohjelman toteuttamiseksi SPI-protokollan

Siksi on parempi käyttää ohjaimen inbuilt SPI yksikkö

 
Hei,
Vikky, kun luet tiedotteessa 93C46, ota keksiä pienen 8051 kokoonpanijalle ohjelman oma, jotta muut voivat auttaa sinua, vain yrittää, voit tehdä sen.

Terveisin,
Laktronics

 
kiitos sjerr4u ja laktronics varten replying.I am using 89V51rd2 jolla on SPI inbuilt vuonna it.I halua 2 tehdä päällikön kirjoittaa ja päällikön luetaan EEPROM ja lähettää sen 2 lcd.can u opas minulle 2 kirjoittaa ohjelma tästä.

 
i kokeiltu koodi näyttää sen, että hyperterminal.but i am saada roskat value.i antaa minun rutiini lukea ja write.Please oppaan minulle, miten edetä.

mitätön WR_BYTE (char EE_address, char EE_data)
(
SS = 1; / / Aseta pelimerkki valitse korkea
SPI_TX_CHAR (0x01); / /
käynnistys bittinen on bittinen 1,
/ / Note: 01 on op-koodi kirjoittaa, koska kaikki on oikein perusteltu
/ / 1 kuuluu toinen tavu on vasemmalla kanta (bit 7).
/ / The EE_address on ORed kanssa b'1000 0000 ".
EE_address | = 0x80;
SPI_TX_CHAR (EE_address);

/ / Osoite sijainti
SPI_TX_CHAR (EE_data);
SS = 0; / / Data
/ / On asetettava pelimerkin valitse alhainen aloittaa
/ / Sisäinen ohjelmakauden aikana.
)mitätön RD_BYTE (char EE_address)
(
SS = 1; / / Aseta pelimerkki valitse korkea
SPI_TX_CHAR (0x01);

/ / Käynnistä-bittinen on bittinen 1
EE_address = EE_address & 0xFD; / / bit 7 on 0 - voiSPI_TX_CHAR (EE_address);
/ / Muuta kello napaisuus 0
/ / The byte
/ / Lähetetään täällä on
don't care.
Spcr = spcr & 0xFB; / / Tuo siru valitse alhainen lopettaa
SS = 0; / / luetut komento
Spcr = spcr | 0x08; / / Return kello napaisuus 1

)

 
Hei,
On enemmän kuin mitä ovat tehneet.Vuonna Ensinnäkin,
en usko,
että tavallinen SPI voidaan käyttää tätä sovellusta, sillä komennot annetaan eivät byte suuntautuneita.Mielestäni sinun ei tarvitse tehdä bittinen tasolla SPI.

Voit kirjoittaa byte:

1.Ota siru valitse
2.Antaa 10 bit Kirjoita jotta komento (Ewen).
3.Poista siru valita, jotta se uudelleen.
4.Issue 10 bit Kirjoita komento myös 7-bittinen osoite.
5.Issue 8 bittinen tiedot bittivastineen 8 kellot.
6.Poista siru valintaan ja käyttöön uudelleen.
7.Odota kirjoittaa viivästyminen tai tarkista readybusy bittinen ja odota, kunnes valmis
8.Poista siru valintaan ja käyttöön uudelleen.
9.Issue Poista Ohjelmasuunnittelu komento (EWDS), jos ei enää kirjallisesti reqired.
9.Poista Chipselect.

Lukea byte:

1.Ota Chip valitse.
2.Issue 10 bit Lue ohjeita, myös osoite.
3.Lue 8bit tietojen yksi bittinen kerrallaan clocking 8 kertaa.
4.Poista chipselect.

Huomautuksia:
1.Kaikki komennot ja data bittiä antanut / lukenut MSB ensin.
2.Nouseva reuna kello strobes in / out kaikki bittiä.
3.Tiedot linja olisi vedetty suuri.
4.Org nastainen olisi maadoitettava tehdä 93C46 byte suuntautuneita.

Odottaa kovaa, mutta se voidaan tehdä.

Terveisin,
Laktronics

 
koska olen käyttäen 89v51rd2 jolla on inbuilt SPI siinä Luulin voi lähettää sen byte level.moreover on yksinomainen rekisteri SPDAT lähettämiseen data.please korjata, jos olen väärässä.

 
Hei,
Voit ehdottomasti lähettää tavun tasolla ja vain byte tasolla Otaksun?Mutta sinun täytyy lähettää 10 bit komento myös 7-bittinen osoite, käyttäen vain 10 kellot, miten aiotte tehdä, että käytät byte tasolla laitteisto on kysymykseni.

Terveisin,
Laktronics.

 
Olen yrittänyt nyt kahden 89v51rd2 yhden päällikön ja muiden kuin slave.i todettiin, että tietoja ei saada sisälle SPDAT.i ovat antaneet alla oleva koodi
tämä on päällikön
#
include <p89v51rd2.h>
#
include <uart.h>unsigned char d;

mitätön SPI_TX_CHAR (unsigned char d)
(

d = SPDAT;
DELAY (10);

)

mitätön SPI_INITMASTER ()
(

Spcr = 0x40;
)

mitätön tärkeimmät ()
(
SPI_INITMASTER ();

UART_INIT (9600,0);

SPI_TX_CHAR ( "A");
kun taas (1)
(
)

)
JA tämä on SLAVE
#
include <p89v51rd2.h>

#
include <uart.h>

#
define MOSI P1_5
#
define SS P1_4

unsigned char d;

mitätön SPI_INIT_SLAVE ()
(
SS = 0;
Spcr = 0x40;
)mitätön tärkeimmät ()
(
SPI_INIT_SLAVE ();

UART_INIT (9600,0);if (SPSR == 0x80)

(
TX_CHAR (SPDAT);
)
kun taas (1)
(
)
)
kun sitä ei saada sisälle SPDAT miten odotan sen 2 tavoittaa slave.i myös liittää tekninen ja 89v51rd2 Tiedoksesi.
Anteeksi, mutta sinun on kirjautumistunnuksen nähdäksesi tämän liitäntävaatimuksia

 
i pystyi kirjoittamaan sen päällikön mutta en voinut tehdä orja näyttö it.any ehdotuksia?

 
Hei,
Yhteenliittäminen SPI Master ja Slave yksikkö on seuraavanlainen:

1.Interconnect seuraavat signaaleja Master ja slave

MOSI on MOSI
MISO on MISO ja
SCK on SCK
Liitä SS-päällikön on Vdd ja
SS-of orja vss.

2.Kantavuus spcr päällikön kanssa 52h (SCK = fosc/64) ja
Spcr Orjatyöntekijöiden 42; SCK olisi sama.

3.Kantavuus SPIDATA päällikön kanssa tavu on lähetetty, se herättää SPI välittää automaattisesti.Odota SPIF on asetettu päällikköä löytää, kun tietojen siirto on ohi.Vapaa SPIF ja voit ladata seuraavan tavu.

4.Käytössä orja Etsi SPIF voidaan asettaa ja sitten lukea SPIDATA ja tyhjentää SPIF bit.

5.Sinun orja olisi valmis vastaanottamaan tietoja ennen päällikön aloittaa lähetyksen, tai voit menettää tavu.

6.Olet kääntänyt tietojen luovutus on TX rutiinitilanteissa, tehdä SPIDATA = d ladata SPI reg tietoja 'd'

Sinun pitäisi pystyä huolehtimaan kaikista koodausstandardien näkökohdat ja oikeellisuuden kieltä, en voi auttaa sinua tässä asiassa.

Terveisin,
LaktronicsLisätty jälkeen 30 minuuttia:Hei,
Myös, SPI, vain päällikkö voi siirtää tietoja, joten jos haluat silmukan takaisin tietoja, Master on tehdä toisen harjoitustestien TX lukemaan saanut tietoja, OR, sinun täytyy vaihtaa Master / Slave roolit laitteiden , mutta synkronointi voi olla ongelma.Poiskitkentään SPIF välillä on tärkeää.Afterall, SPI on vain takaisin takaisin kytketty kaksivuorotyössä rekisterit, siirtyy täysin hallinnassa Master.

Terveisin,
Laktronics

 
kiitos reply.the arvo on päästä sisälle kun tilaajajohtoihin orja vaan undefined tietoja saa displayed.i am lähettämällä minun päivitetty koodi viite.
päällikön

#
include <p89v51rd2.h>
#
include <uart.h>
#
define MOSI P1_5
unsigned char d;

mitätön SPI_TX_CHAR (unsigned char d)
(

SPDAT = d;
while (! (SPSR & (1 <<SPSR | 0x80)));)

mitätön SPI_INITMASTER ();
(
Spcr = 0x52;
)
mitätön tärkeimmät ()
(
SS = 1;
UART_INIT (9600,0);
SPI_INITMASTER ();kun taas (1)
(
if (P3_2 == 0)
SPI_TX_CHAR ( "A");
)

)

FOR SLAVE

#
include <p89v51rd2.h>

#
include <uart.h>
#
include <lcd.h>
#
include <delay.h>
#
define MOSI P1_5
#
define SS P1_4
#
define MISO P1_6

unsigned char RXED;

mitätön SPI_INIT_SLAVE ()
(
SS = 0;
Spcr = 0x42;
)

unsigned char SPI_SlaveReceive (void)
(

while (! (SPSR & (1 <<SPSR | 0x80)));

palata SPDAT;
)
mitätön tärkeimmät ()
(
SS = 0;
SPI_INIT_SLAVE ();
MISO = 0;

UART_INIT (9600,0);kun taas (1)

(
RXED = SPI_SlaveReceive ();
TX_CHAR (RXED);
)

)
Olen myös antanut piiri yhteys oikealla tavalla.

 
Hyvä uutinen atlast.was voitava 2 kommunikoida kahden devices.now takaisin EEPROM-ohjelma ...
[/ lainaus] Voit ehdottomasti lähettää tavun tasolla ja vain byte tasolla Otaksun?Mutta sinun täytyy lähettää 10 bit komento myös 7-bittinen osoite, käyttäen vain 10 kellot, miten aiotte tehdä, että käytät byte tasolla laitteisto on kysymykseni.

kanisteri u antaa minulle mitään ratkaisua 4 tämän ongelman?

 
Hei,
Hyvä tietää, että voit kommunikoida kahden mikros.Uskon, että rajapinnat EEPROM, on parempi käyttää bittinen tasolla SPI käyttäen satama bittiä, koska se edellyttää muiden EU-tavuisille tasolla SPI.Voidaan voit pakata bittiä naapurimaista tavua, ja ne sisältävät eräitä harjoitustestien bittiä, jotta se byte tasolla ja käyttää laitteistoa SPI, mutta mielestäni se on kömpelö käsitellä ja ylimääräinen dummy bittiä saattaa antaa joitakin ongelma myös ,..... I en tiedä.

Joten suosittelen,
että voit käyttää bittinen tasolla SPI käyttäen samaa SPI bittiä yleisiä tarkoitukseen bittiä.
Voit siirtää SPI lähettää / vastaanottaa rutiini viitteellä:
ftopic305246.html.Voi olla sinun pitäisi kiittää Tesion ja antaa hänelle 7 pistettä hänen panoksestaan tietojenvaihtofoorumiin ja käyttää rutiinia hakemukseen.Täällä voit valikoivasti valvoa määrä bittejä lähetetään ja helposti mukauttaa hakemukseenne.

Huomaa, että sinun ei tarvitse lähettää minulle pisteitä jokaisesta minun vastausta.

Terveisin,
Laktronics

 
kun minulla on SPI inbuilt minun valvojan ja kun olen rekisteristä kuljettaa minun bittiä joka huolehtii kello Ajattelin, että olisi easier.now ongelma on minulla on 9 bittiä kuljettaa myös minun opcodes ja addressing.any ehdotuksia? i on myös liitetty tekninen ja eeprom.tension 's-ohjelman ... Minun täytyy nähdä sitä huomenna.
Anteeksi, mutta sinun on kirjautumistunnuksen nähdäksesi tämän liitäntävaatimuksia

 
Hei,
Yah, se näyttää outo minulle liikaa, mutta minulla ei ole parempaa ehdotusta tällä hetkellä.Myös huomaa, että EEPROM-komento on pitkälti aloittaa bittinen seurasi kaksi bittinen opcode ja 7-bittinen osoite, joka tekee siitä 10 bit komento kokonaismäärästä.

Terveisin,
Laktronics

 
Toinen hyvä uutinen .. nyt voin kirjoittaa ja lukea päällikön ja näyttää sen kahden microcontrollres.but EEPROM ei ole vielä working.There on tyhjä tiedot displayed.This on minun päivitetty koodi ... mitään ehdotuksia?

#
include <p89v51rd2.h>
#
include <delay.h>
#
include <SPI.h>
#
include <uart.h>

#
define MOSI P1_5
#
define MISO P1_6
#
define SCK P1_7
#
define SS P1_4

unsigned char DAT, d, data1;mitätön SPI_MasterInit (void)
(
/ * Aseta MOSI ja SCK ja SS (-) tuotokseksi, kaikki muut panos * /
P1 = (1 <<P1_7) | (1 <<P1_5) | (1 <<P1_4);
/ * Ota SPI, Master,
aseta kello korko fck/128 * /
Spcr = 0x52;

)
unsigned char SPI_TX_CHAR (unsigned char d)
(
unsigned char data1;
SPDAT = d;
while (! (SPSR & (1 <<SPSR | 0x80)));
/ / Return tiedot rekisteriin
data1 = SPDAT;
palata data1;

)

mitätön ERASE ()
(
SS = 0;
SPI_TX_CHAR (0x03);
SPI_TX_CHAR (0xFF);

SS = 1;
)
unsigned char SPI_SlaveReceive (void)
(
/ * Odota vastaanotto täydellinen * /
while (! (SPSR & (1 <<SPSR | 0x80)));
/ * Return tiedot rekisteriin * /
palata SPDAT;
)
mitätön Ewen ()
(

SS = 1;
/ / Varmista, CS on korkea
/ / Käynnistä-bit on bit1,
data1 = SPI_TX_CHAR (0x02);
/ / 00 on opcode varten Ewen
data1 = SPI_TX_CHAR (0x60); / / 0110 (6) tarvitaan
/ / Ewen 0's eivät välitä
SS = 0; / / 5 lsb osoite bittiä
/ / Tuo siru valitse linja alhainen alkaa
/ / EEPROM sisäinen kirjoittaa sykli
) / / On odotettava 5 ms sisäisen kierron loppuunmitätön WR_BYTE (char EE_address, char EE_data)
(
SS = 1; / / Aseta pelimerkki valitse korkea
data1 = SPI_TX_CHAR (0x02); / /
käynnistys bittinen on bittinen 1,
/ / Note: 01 on op-koodi kirjoittaa, koska kaikki on oikein perusteltu
/ / 1 kuuluu toinen tavu on vasemmalla kanta (bit 7).
/ / The EE_address on ORed kanssa b'1000 0000 ".

data1 = SPI_TX_CHAR (EE_address);

/ / Osoite sijainti
data1 = SPI_TX_CHAR (EE_data);

/ / Tiedot
SS = 0; / / on asetettava pelimerkin valitse alhainen aloittaa
/ / Sisäinen ohjelmakauden aikana.
)unsigned char RD_BYTE (char EE_address)
(

unsigned char data1;

SS = 1;
P1 = (1 <<P1_6); / / Aseta pelimerkki valitse korkea
data1 = SPI_TX_CHAR (0x03); / / Käynnistä-bittinen on bittiset 1 / / bit 7 on 0 - voi

data1 = SPI_TX_CHAR (EE_address);
/ / Muuta kello napaisuus 0
data1 = SPI_TX_CHAR (0x00);
if (MISO == 0)
(

data1 = SPI_SlaveReceive ();
/ / The byte
) / / Siirtää tästä on
don't care.palata data1;

)

mitätön tärkeimmät ()
(

SS = 0;
UART_INIT (9600,0);

SPI_MasterInit ();
/ / ERASE ();
Ewen ();

WR_BYTE (0xAF, 'A');
DELAY (20);
kun taas (1)
(if (MISO == 1)
(

data1 = RD_BYTE (0x3F);
TX_CHAR (SPDAT);
)
)

)

 
Hei

Muuten voi u please suositella muita EEPROM jota voin tehdä helppoa SPI kanssa 89v51rd2.Thank Sinä.

 
Hi Vikky,
En ole oikeastaan ymmärtänyt ohjelma on löydetty mitään logiikkaa soveltaa laitteiston SPI oman sovelluksen, voit selvittää, miten lähetät kymmenen bittinen komento?Kun säikeen antanut minulle, ohjelma antaa CMOS on lähes ohjelmisto vastaa laitteiston SPI.Voit hieman muuttaa se lisäämällä silmukan hakemisto muuttujaksi toiminnon siten, että kutsuvan ohjelman voi määritellä määrä bittejä on siirtynyt pois.Kaikki, mitä sinun tarvitsee tehdä on toistuvia soittaa tämän funktion erilaiset tiedot bytes antaa komennon runko ja tietojen toimittamista EEPROM.Also muistaa, että bittiä on siirtynyt niin MSB ensin.Mielestäni nämä EEPROMS ovat syntyneet ennen laitteiston SPIs ollut saatavilla, joten ne eivät ole suunniteltu sitä byte suuntautuneita.
Nedless sanoa, että ohjelmisto SPI tulee sitoa jalostajan aikaan verrattuna on harware SPI.Mitä muuta haluat tehdä hakemuksesi.

Terveisin,
Laktronics

 
Olen lähettämällä 10-bittinen ohjeiden avulla SPDAT 2 times.it tapahtuu tällä

SPDAT = 0 0 0 0 0 0 START BIT OPCODE1
SPDAT = OPCODE2 A6 A5 A4 A3 A2 A1 A0

Olen voivat kirjoittaa tietoja, mutta en pysty lukemaan sitä, että D0 pin.i antaa minun koodi paljon selkeämpi sinun ymmärtävän.

#
include <p89v51rd2.h>
#
include <delay.h>
#
include <SPI.h>
#
include <uart.h>

#
define MOSI P1_5
#
define MISO P1_6
#
define SCK P1_7
#
define SS P1_4

unsigned char DAT, d, data1;mitätön SPI_MasterInit (void)
(
/ * Aseta MOSI ja SCK ja SS (-) tuotokseksi, kaikki muut panos * /
P1 = (1 <<P1_7) | (1 <<P1_5) | (1 <<P1_4);
/ * Ota SPI, Master,
aseta kello korko fck/128 * /
Spcr = 0x53;

)
unsigned char SPI_TX_CHAR (unsigned char d)
(

SPDAT = d;

while (! (SPSR & (1 <<SPSR | 0x80 )));// odottaa siirto valmispalata SPDAT;

)

mitätön ERASE ()
(
SS = 0;
SS = 1;
SPI_TX_CHAR (0x03); / / lähettämällä startbit ja ensimmäisen opcode
SPI_TX_CHAR (0xFF); / / toinen opcode ja osoite
SS = 0;
/ / Vedetty vähän välillä Viimeisin DI bittinen ja ack on saapuvat D0 nastainen
SS = 1;
while (! (1 <<MISO ));// tarkastuslentojen varattu lippu
SS = 0;
)
mitätön EWDS ()
(
SS = 0;
SS = 1;
SPI_TX_CHAR (0x02); / / lähettämällä startbit ja ensimmäisen opcode
SPI_TX_CHAR (0x00); / / toinen opcode ja osoite
SS = 0;

)
unsigned char SPI_SlaveReceive (void)
(
SPI_TX_CHAR (0x00);
/ * Odota vastaanotto täydellinen * /
while (! (SPSR & (1 <<SPSR | 0x80)));
/ * Return tiedot rekisteriin * /
palata SPDAT;
)
mitätön Ewen ()
(
SS = 0;
SS = 1;
/ / Varmista, CS on korkea
/ / Käynnistä-bit on bit1,
SPI_TX_CHAR (0x02); / / lähettämällä startbit ja ensimmäisen opcode
/ / 00 on opcode varten Ewen
SPI_TX_CHAR (0x60); / / toinen opcode ja osoite / / 0110 (6) tarvitaan
/ / Ewen 0's eivät välitä
SS = 0; / / 5 lsb osoite bittiä
DELAY (20); / / Tuo siru valitse linja alhainen alkaa
/ / EEPROM sisäinen kirjoittaa sykli
) / / On odotettava 5 ms sisäisen kierron loppuunmitätön WR_BYTE (char EE_address, char EE_data)
(
SS = 0;
SS = 1;
Ewen ();
SS = 0;
SS = 1;
/ / Aseta pelimerkki Sele / / ct korkea
SPI_TX_CHAR (0x02); / /
käynnistys bittinen on bittinen 1,
/ / Note: 01 on op-koodiSPI_TX_CHAR (EE_address);

/ / Osoite sijainti
SPI_TX_CHAR (EE_data);

SS = 0;
SS = 1;
while (! (1 <<MISO)); äänestyspaikkoja varten varattu lippu

while (! (SPSR & (1 <<SPSR | 0x80))); odottaa lähetyksen loppuun
/ / Tiedot
/ / SS = 0;
/ / SS = 1;
/ / EWDS ();
SS = 0;
/ / On asetettava pelimerkin valitse alhainen aloittaa
DELAY (20); / / sisäinen ohjelmakauden aikana.
)unsigned char RD_BYTE (char EE_address)
(

unsigned char data1;

SS = 0;
SS = 1;

P1 = (1 <<P1_6), jossa MISO syötteenä
/ / Aseta pelimerkki valitse korkea
SPI_TX_CHAR (0x03); startbit ja opcode / / Käynnistä-bittinen on bittinen 1

SPI_TX_CHAR (EE_address);

/ / Muuta kello napaisuus 0while (MISO! = 0); / / odottaa matala, D0
Spcr = spcr & 0x7F; / / muuttaminen kello napaisuus 0
data1 = SPI_TX_CHAR (0x00); / / lähettämällä harjoitustestien Tx ja käsittelyyn data1
Spcr = spcr | 0x80; / / muuttaminen kello napaisuus 1SS = 0;

DELAY (20);
palata data1;
)

mitätön tärkeimmät ()
(
unsigned char data2;
SS = 0;
UART_INIT (9600,0); / / intialising UART

SPI_MasterInit ();// Intialising päällikön
ERASE ();
kun taas (1)
(

WR_BYTE (0x8F, "D"), kirjallisestidata2 = RD_BYTE (0x0F);

TX_CHAR (data2); näyttävä arvo luetaan HyperTerminal

)

)
Viimeinen tavoite on lukea tietoja muisti laitteen ja näyttää sen hyperterminal.I ovat tehneet tämän onnistuneesti kahden 89v51rd2 Nyt haluan tehdä kanssa muisti device.IS minun valinta EEPROM ok? (93C46). Thanks auttanut minua koko ajan.

 

Welcome to EDABoard.com

Sponsor

Back
Top