Comunicații de date

Previzualizare referat:

Extras din referat:

Se consideră o structură hardware constînd din două sisteme de dezvoltare echipate cu

microcontrolere de tip 80C552. Acest tip de microcontroler integrează în cip facilităţile

hardware necesare pentru a comunica pe o magistrală serială în standard I2C. Acest hardware

are structura unui automat cu stări finite, exploatabil prin intermediul unor registre ale

microcontrolerului. Modul de exploatare este descris pe larg în paragraful 2.

Se cere să se lege între ele două sisteme, unul care funcţionează ca master şi unul care

funcţionează ca sclav. Pentru fiecare dintre sisteme se va scrie un program, în limbaj C, care

să permită comunicaţia între cele două sisteme astfel:

1. La începutul rulării aplicaţiei (după reset), fiecare modul iniţializează interfaţa

I2C.

2. După iniţializare, sistemul master intră în modul transmiţător şi transmite către

sclav două şiruri de octeţi. Aceste şiruri sînt preluate din memorie, unde se

presupune că au fost declarate prin program, ca constante. Sistemul sclav va

recepţiona aceste şiruri de octeţi şi le va memora într-un buffer. Transmisia celor

două şiruri se va face ca o operaţie indivizibilă, prin generarea unui start repetat

după transmiterea primului şir.

3. După terminarea transmisiei de către master, acesta va trece în mod receptor, iar

sclavul va trece în mod transmiţător. Acum sistemul sclav va transmite două şiruri

de octeţi, iar sistemul master le va recepţiona, deasemenea cu start repetat.

Apariţia unei erori de magistrală va avea ca efect abandonarea operaţiei curente (de

transmitere, respectiv de recepţie) şi încercarea de reluare a ei. Deoarece în sistem există un

singur master, apariţia unei stări de pierdere a arbitrării va fi tratată la fel ca o eroare.

Deasemenea, absenţa semnalului de acknoledge de la sclav va fi tratată ca eroare. Încercarea

de repetare a transferului se va face de trei ori, după care se va aborta întreaga sesiune de

comunicaţie.

Sistemele pe care se va implementa această aplicaţie sînt concepute în principal ca platformre de dezvoltare şi testare a aplicaţiilor. Aceasta înseamnă că dispun de resurse mai mari decît ale unui sistem dedicat (embedded) dar mai mici decît ale unui calculator PC.

De regulă, astfel de aplicaţii de dezvoltă, la nivel software, pe un calculator PC pe care rulează un crosscompilator. Acesta generează cod obiect care va fi transportat, de obicei printr-o cale de comunicaţie serială (RS232), pe sistemul ţintă.

Compilatorul C pentru microcontrolerul 80552 recunoaşte numele registrelor SFR şi ale biţilor din aceste registre. Ele sînt asimilate unor variabile predefinite şi pot apărea în expresii şi în instrucţii de atribuire

sînt instrucţii valide.

Pentru interfaţa cu dispozitivele de intrare-ieşire presupunem că sînt disponibile două funcţii de bibliotecă care au următoarele prototipuri:

unsigned char citeste(void);

void scrie(unsigned char);

Prima funcţie citeşte starea tastaturii şi returnează un cod ASCII, dacă este apăsată o tastă, respectiv valoarea 0, dacă nu este apăsată nici o tastă. Există 12 taste care au însemnele 0,1,2,3,4,5,6,7,8,9,*,#, respectiv codurile ASCII 0x30, 0x31, 0x32 etc.

A doua funcţie afişează un caracter pe un dispozitiv de afişare 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.

Observații:

Universitatea “Politehnica” Timişoara Facultatea de Automatică şi Calculatoare

Departamentul de Automatică şi Informatică Aplicată

Descarcă referat

Pentru a descărca acest document,
trebuie să te autentifici in contul tău.

Structură de fișiere:
  • Comunicatii de Date.docx
Alte informații:
Tipuri fișiere:
docx
Nota:
8/10 (1 voturi)
Nr fișiere:
1 fisier
Pagini (total):
8 pagini
Imagini extrase:
8 imagini
Nr cuvinte:
1 291 cuvinte
Nr caractere:
7 856 caractere
Marime:
16.99KB (arhivat)
Publicat de:
NNT 1 P.
Nivel studiu:
Facultate
Tip document:
Referat
Domeniu:
Limbaje de Programare
Predat:
la facultate
Materie:
Limbaje de Programare
Sus!