Comunicatii de Date

Extras din referat Cum descarc?

Se considera o structura hardware constind din doua sisteme de dezvoltare echipate cu
microcontrolere de tip 80C552. Acest tip de microcontroler integreaza in cip facilitatile
hardware necesare pentru a comunica pe o magistrala seriala in standard I2C. Acest hardware
are structura unui automat cu stari finite, exploatabil prin intermediul unor registre ale
microcontrolerului. Modul de exploatare este descris pe larg in paragraful 2.
Se cere sa se lege intre ele doua sisteme, unul care functioneaza ca master si unul care
functioneaza ca sclav. Pentru fiecare dintre sisteme se va scrie un program, in limbaj C, care
sa permita comunicatia intre cele doua sisteme astfel:
1. La inceputul rularii aplicatiei (dupa reset), fiecare modul initializeaza interfata
I2C.
2. Dupa initializare, sistemul master intra in modul transmitator si transmite catre
sclav doua siruri de octeti. Aceste siruri sint preluate din memorie, unde se
presupune ca au fost declarate prin program, ca constante. Sistemul sclav va
receptiona aceste siruri de octeti si le va memora intr-un buffer. Transmisia celor
doua siruri se va face ca o operatie indivizibila, prin generarea unui start repetat
dupa transmiterea primului sir.
3. Dupa terminarea transmisiei de catre master, acesta va trece in mod receptor, iar
sclavul va trece in mod transmitator. Acum sistemul sclav va transmite doua siruri
de octeti, iar sistemul master le va receptiona, deasemenea cu start repetat.
Aparitia unei erori de magistrala va avea ca efect abandonarea operatiei curente (de
transmitere, respectiv de receptie) si incercarea de reluare a ei. Deoarece in sistem exista un
singur master, aparitia unei stari de pierdere a arbitrarii va fi tratata la fel ca o eroare.
Deasemenea, absenta semnalului de acknoledge de la sclav va fi tratata ca eroare. Incercarea
de repetare a transferului se va face de trei ori, dupa care se va aborta intreaga sesiune de
comunicatie.
Sistemele pe care se va implementa aceasta aplicatie sint concepute in principal ca platformre de dezvoltare si testare a aplicatiilor. Aceasta inseamna ca dispun de resurse mai mari decit ale unui sistem dedicat (embedded) dar mai mici decit ale unui calculator PC.
De regula, astfel de aplicatii de dezvolta, la nivel software, pe un calculator PC pe care ruleaza un crosscompilator. Acesta genereaza cod obiect care va fi transportat, de obicei printr-o cale de comunicatie seriala (RS232), pe sistemul tinta.
Compilatorul C pentru microcontrolerul 80552 recunoaste numele registrelor SFR si ale bitilor din aceste registre. Ele sint asimilate unor variabile predefinite si pot aparea in expresii si in instructii de atribuire
sint instructii valide.
Pentru interfata cu dispozitivele de intrare-iesire presupunem ca sint disponibile doua functii de biblioteca care au urmatoarele prototipuri:
unsigned char citeste(void);
void scrie(unsigned char);
Prima functie citeste starea tastaturii si returneaza un cod ASCII, daca este apasata o tasta, respectiv valoarea 0, daca nu este apasata nici o tasta. Exista 12 taste care au insemnele 0,1,2,3,4,5,6,7,8,9,*,#, respectiv codurile ASCII 0x30, 0x31, 0x32 etc.
A doua functie afiseaza un caracter pe un dispozitiv de afisare cu cristale lichide.
#include <reg552.h>
#include <ap_lib.h>
char slv=0xA;
char key;
void initializare()
{
//initializez S1CON
//setare rata de transfer 16 MHz
ENS=1; //pentru validarea SIO1
STA=0;//se reseteaza
STO=0;//se reseteaza
SI=0;//se reseteaza
AA=1;//se seteaza
CR0=0;//cei trei biti
CR1=0;//sunt pozitionati pentru
CR2=0;//rata de transfer dorita
}
//trimitere tasta incrementata
void slave_send()
{
S1ADR=slv<<1;//adresa slave
while (1)
{
if (SI)//testare SI
{
switch(S1STA)//se analizeaza starea curenta
{
case 0x0://eroare de comunicatie pe bus
lcd_Write(1, "*");//se afiseaza caracterul asterisc
break;
case 0xA8://SLA+R receptionat;ACK receptionat
S1DAT=key;//data transmisa
STO=0;
AA=1;
break;
case 0xB0://arbitrare pierduta
break;
case 0xB8://data transmisa;ACK receptionat de la master
S1DAT=key;
STO=0;
AA=1;
break;
case 0xC0://data transmisa;NOT_ACK receptionat
STA=0;
STO=0;
AA=1;
break;
case 0xC8://identic cu starea C0H
STA=0;
STO=0;
AA=1;
break;
}
SI=0;//resetare SI
}
}
}
// citeste data transmisa de master
void slave_receive()
{
S1ADR=slv<<1;//adresa slave
AA=1;//modul slave receptor.


Fisiere in arhiva (1):

  • Comunicatii de Date.docx

Imagini din acest proiect Cum descarc?

Promoție: 1+1 gratis

După plată vei primi prin email un cod de download pentru a descărca gratis oricare alt referat de pe site.Vezi detalii.


Descarcă aceast referat cu doar 4 € (1+1 gratis)

Simplu și rapid în doar 2 pași: completezi adresa de email și plătești. După descărcarea primului referat vei primi prin email un alt cod pentru a descărca orice alt referat.

1. Numele, Prenumele si adresa de email:

Pe adresa de email specificata vei primi link-ul de descarcare, nr. comenzii si factura (la plata cu cardul). Daca nu gasesti email-ul, verifica si directoarele spam, junk sau toate mesajele.

2. Alege modalitatea de plata preferata:


* La pretul afisat se adauga 19% TVA, platibil in momentul achitarii abonamentului / incarcarii cartelei.

Hopa sus!