[Search] [Contact Us]
8052.it - Il sito web italiano dei microcontrollori 8051/52 e derivati  
 Home Page 
FAQ

Sponsor di 8052.it
PRECMA S.r.l.

Tutorial
µC Family
FAQ
Strumenti di Sviluppo
Libri
Bookmarks
Mailing List Forum
Download Area

Prodotti


Il sito 8052.it e' in continua evoluzione: se avete suggerimenti o richieste contattateci




L'autore

 Famiglia   Libri   Bookmarks   Tutorial   Sviluppo   Prodotti 
 Official FAQ   I2C 

8052 FAQ
Le FAQ sono "Frequently Asked Questions", cioe' domande poste frequentemente su di un argomento, complete di risposte.

In questa sezione sono presentate sia FAQ internazionali, sia le FAQ di 8052.it
 
FAQ Base
FAQ Tools
FAQ Interrupts
FAQ Input/output
FAQ Software
FAQ Generiche


Avete una domanda che ritenete sia da aggiungere alle FAQ? Comunicatecela!
 


Base

Cos'e' un microcontrollore 8052? Cos'e' un microcontrollore derivato 8052?
Un microcontrollore e' un circuito integrato programmabile (microprocessore) che ha a bordo alcune periferiche per uso embedded, come timers, RAM, ROM, A/D converter, contatori, ecc.
Un microcontrollore 8052 e' un microcontrollore che supporta il set di istruzioni Intel MCS-51. Le caratteristiche di base sono: 8 bit internal bus, indirizzamento possibile di 64Kb di ROM e RAM esterne multiplexate sullo stesso bus, architettura a registri, processore booleano.
Un microcontrollore derivato 8052 e' un microcontrollore 8052 che oltre a supportare il set di istruzioni Intel MCS-51 offre funzionalita' in piu' rispetto all'originale (piu' periferiche, funzionamento piu' veloce, flash ROM, piu' RAM, ecc.). Vedi la sezione Famiglia 8052
 
Cos'ho bisogno per sviluppare progetti con 8052?
Vedi la sezione Sviluppo
 
Sono un programmatore Visual Basic/Visual C++/Delphi/ecc.: sara' difficile per me programmare per 8052? Posso usare questi compilatori?
Per progettare sistemi embedded e' opportuno avere una buona conoscenza di elettronica, quantomeno digitale, oltre che di informatica/programmazione. Quindi un puro programmatore Windows potrebbe avere difficolta' ad avvicinarsi al mondo embedded, se non assistito dall'aiuto di un elettronico. Chi programma in C si trovera' piu' facilitato rispetto a chi usa VisualBasic, C++ o Delphi, Java o altri linguaggi orientati agli oggetti. In ogni caso nel mondo embedded la parola "Visual" non ha senso: i microcontrollori 8 bit hanno raramente un sistema operativo, e praticamente mai un'interfaccia grafica. E' essenziale conoscere bene l'Assembler. Per programmare i sistemi 8052 e' necessario utilizzare dei compilatori specifici per tale famiglia di microcontrollori, non e' possibile usare Visual Basic o Visual C++ o simili.
 
Si puo' usare C++ per programmare 8052? E Java?
I linguaggi orientati agli oggetti non trovano facile terreno nei piccoli microprocessori ad 8 bit degli 8052: questo tipo di approccio alla programmazione infatti ha bisogno di essere supportato dalla presenza di un sistema operativo e grandi quantita' di memoria RAM, cose che non si possono avere in un sistema tipico 8052. E' consigliabile abbandonare l'idea di usare questi linguaggi, anche se alcuni esperimenti su Java sono in corso nella comunita' 8052. Vedi la sezione Linguaggi
 
Tools

Cosa sono un interprete, un compilatore e un assembler? Che significa cross-assembler e cross-compiler? Cos'e' un linker?
Un programma interpretato e' un programma il cui codice sorgente viene letto riga per riga ad ogni esecuzione, e trasformato "al volo" in linguaggio macchina eseguibile. Il programma che si occupa di questo lavoro viene detto interprete. Il BASIC e' tipicamente un linguaggio interpretato. Spesso i linguaggi interpretati piu' evoluti usano uno pseudo-codice, cioe' non leggono sempre direttamente il file di testo del sorgente, ma ne generano uno intermedio piu' snello che poi leggono e interpretano. Questo rende le interpretazioni successive alla prima piu' veloci.

Un compilatore e' un programma che legge il codice sorgente da un file di testo e lo trasforma in liguaggio macchina eseguibile. Il linguaggio C e' tipicamente un linguaggio compilato. Spesso i compilatori generano codice assembler che poi ha bisogno a sua volta di essere "assemblato".

Un assembler e' un compilatore per linguaggio Assembler, che e' il linguaggio base dei microprocessori. Anch'esso legge codice sorgente da un file di testo e lo trasforma in linguaggio macchina eseguibile. Il linguaggio macchina eseguibile e' una sequenza di numeri che corrispondono alle istruzioni e argomenti, che di solito vengono visualizzati in esadecimale. Ad ogni istruzione assembler corrisponde un codice esadecimale di istruzione.

Un Linker e'  un programma che permette di creare un programma univoco a partire da una o piu' parti pre-compilate del programma stesso. I compilatori e gli assembler offrono la possibilita' (gli assembler non sempre, ma spesso) di non allocare in maniera assoluta le variabili e il codice, cioe' di non definirne imediatamente l'indirizzo preciso: questo permette poi ad un programma linker di assegnare gli indirizzi delle variabili e del codice valutando al meglio l'utilizzo delle risorse del microcontroller.

Il prefisso "cross" legato ad assembler e compiler sta a significare che quei programmi producono codice che gira su microprocessori diversi da quelli su cui girano i compilatori/assembler stessi. Per esempio, si usano spesso assembler e compiler che girano su sistemi Intel x86 (i piu' comuni personal computer) ma producono codice che andra' eseguito su microcontrollori 8052.
 


E' meglio usare Assembler o C per programmare 8052?
Questa domanda puo' generare accese discussioni tra i sostenitori delle due fazioni, che spesso appaiono piu' che altro come difese di posizioni religiose.

In linea di massima bisogna tenere conto che:

Un compilatore C e' un programma complesso, molto piu' complesso di un Assembler. Quindi e' piu' probabile che un compilatore C contenga bug piuttosto che un assembler. Quindi se si vuole usare il C, e' opportuno procurarsi un ottimo compilatore, notoriamente affidabile.
Se si e' un progammatore abituato all'assembler si trovera' il C ostico, e viceversa. Ma questo non e' colpa del C o dell'assembler ma semplicemente delle proprie abitudini.
I sorgenti C sono di piu' facile lettura e manutenzione (se conoscete il C, ovviamente)
Il C e' un linguaggio piu' difficile da apprendere, ma piu' semplice da usare
I buoni compilatori C scrivono codice assembler migliore dei buoni programmatori assembler
Usando il C e' piu' facile apprendere buone abitudini di programmazione, come la modularita'
Usando l'assembler si comprendono meglio le caratteristiche hardware del microcontrollore
E' difficile controllare nei dettagli quanto prodotto da un compilatore C
Se provenite da esperienze di programmazione su PC, vi troverete meglio con il C
Se provenite da esperienze di progettazione elettronica, vi troverete meglio con l'assembler
Molti assembler e compilatori C offrono la possibilita' di essere usati contemporaneamente sullo stesso progetto
Sapere l'assembler aiuta ad usare il C in maniera piu' efficiente
Sapere il C aiuta ad usare l'assembler in maniera piu' chiara
La conclusione e' che se sapete usare entrambi, potete sfruttare i pregi di entrambi usando l'uno o l'altro a seconda delle esigenze specifiche.
 
Quali assembler e compilatori C esistono per 8052? Ce ne sono gratuiti?
Vedi la sezione Linguaggi
Interrupts

Cos'e' un interrupt? Cos'e' un vettore di interrupt?
Un interrupt e' una parte di codice che interrompe il normale flusso del programma in maniera asincrona, viene eseguita, e quindi ritorna al normale flusso del programma dove era stato interrotto. Serve ad eseguire operazioni in corrispondenza di eventi che non sono temporalmente prevedibili in fase di progettazione, come ad esempio l'overflow di un timer o la fine di una conversione A/D o il cambiamento di livello logico di un pin, o la ricezione di un byte seriale...
La gestione degli interrupt nei microcontrollori 8052 avviene attraverso un "vettore di interrupt", che e' una zona di memoria ROM a cui il programma salta (jump) automaticamente nell'evenienza di un interrupt. Ad ogni interrupt e' assegnato un preciso indirizzo di jump, detto appunto "vettore di interrupt", diverso dagli altri. Da questo indirizzo puo' iniziare l'esecuzione dei codice relativo all'interrupt. Al termine del codice relativo all'interrupt, l'istruzione specifica RETI (RETurn Interrupt) si occupa di ricominciare l'esecuzione del programma nel punto in cui era stato interrotto.
 
Cos'e' la priorita' di un interrupt?
Se e' necessario stabilire che un interrupt possa interromperne un altro, perche' ha bisogno di essere eseguito piu' in fretta, e' possibile assegnare ad ogni interrupt una priorita'. I microcontrollori 8052 base hanno due livelli di priorita' (ALTA e BASSA), mentre alcune versioni di derivati 8052 ne hanno molte di piu'.
Input/Output

Come si legge/scrive un pin di un 8052?
Si puo' leggere o scrivere un pin 8052 leggendo/scrivendo il suo SFR (Special Function Register) latch. Ogni porta di un 8052, che tipicamente e' composta da 8 pin, ha un latch SFR che ne riflette lo stato. Quindi per leggere la porta P1 e' suffciente un'istruzione come MOV A, P1.
Attenzione: gli 8052 hanno un sistema di pull-up debole sui loro pin di ingresso/uscita. In questo modo non e' necessario assegnare ad un pin la funzione I/O, ma il pin puo' essere contemporaneamente di I/O: se tirato basso dall'esterno e' un input, altrimenti e' un output. Dall'esterno e' possibile solo tirare bassi i pin, non e' possibile tirarli alti.
 
Qual'e' lo stato iniziale default dei pin 8052?
Al boot i pin di un 8052 standard sono tutti alti.
  
Software

Perche' l'assembler produce un errore su un PUSH/POP dell'accumulatore?
Un errore comune e' scrivere "POP A" o "PUSH A", entrambe sintassi errate. Il simbolo "A" e' usato esclusivamente per indicare l'accumulatore all'interno di istruzioni assembler che gia' di per se' sanno di dover usare l'accumulatore. Per esempio, l'istruzione "RL A" (Rotate Left Accumulator) NON usa il paramtro "A" come effettivo argomento: il codice macchina di tale istruzione e' UN SOLO byte che significa appunto "Rotate Left Accumulator". Il linguaggio assembler utilizza la sintassi RL A esclusivamente per rendere agli umani piu' facile capire l'istruzione.
La sintassi "A" per l'accumulatore non puo' essere usata quando va specificato l'indirizzo vero e proprio dell'accumulatore all'istruzione, come nel caso di PUSH e POP. In questo casi bisogna usare la sintassi "ACC": PUSH ACC o POP ACC.
 
Come faccio ad usare numeri floating point?
I buoni compilatori C sono in grado di compiere operazioni in virgola mobile. Esistono anche librerie (spesso costose) per l'uso dei floating point in asssembler. I floating point sono molto avidi di risorse ROM/RAM e temporali: prima di usarli e' opportuno valutare attentamente ogni altra soluzione possibile.
 
C'e' modo di leggere il valore del Program Counter?
Il "Program Counter" e' un contatore 16 bit in cui e' memorizzato continuamente l'indirizzo dell'istruzione in esecuzione. In molti assembler il simbolo "$" si riferisce all'indirizzo dell'istruzione corrente, per cui per esempio l'istruzione JMP $ risulta in un loop infinito di salti all'indirizzo di JMP.
 
Generiche

Su puo' implementare TCP/IP su un 8052?
Si', e' possibile. Alcuni RTOS commerciali per 8052 per esempio lo implementano (CMX).
 
Si puo' implementare USB o CAN su un 8052?
Si'. Alcuni derivati 8052 hanno a bordo periferiche USB (Cypress) e CAN.
 
Si puo' usare un 8052 per le smart cards?
Si'.  Le Smart Cards usano uno standard specificato nelle ISO-7816. Si puo' creare un intefaccia tra una smart card e un 8052 usando i pin di I/O.
 
Si puo' usare un 8052 per un lettore bar-code?
Si'. Puo' essere un algoritmo complicato, ma e' possibile: un sensore ottico legge le "barre" e le comunica al micro, che ne deve valutare i pieno/vuoti.
 
Si puo' interfacciare un 8052 ad un hard disk IDE?
Si'. In effetti il primo Hard Disk che ho posseduto, un Seagate ST-157A da 40MB montato su di un Dell 386, era controllato da un 8052.
 
Si puo' usare un 8052 per connessioni telefoniche?
Si', anche se e' opportuno usare un chip esterno come MT8880 (Mitelper) per il dialing.
 
E' possibile usare Linux per lo sviluppo 8052?
Si'. Usando un emulatore DOS come "dosemu" e' possibile utilizzare qualsiasi compilatore e assembler originario DOS:
Using Keil C51 and A51 under Linux

Inoltre il compilatore C SDCC (free) e' disponibile per sistemi UNIX e puo' essere usato per 8052.
 


8052.it
FAQ
 Famiglia   Libri   Bookmarks   Tutorial   Sviluppo   Prodotti 
 Official FAQ   I2C 


Site made with Sworg - Simple Web Organizer
 
©Copyright 2001-Today PRECMA S.r.l.
Tutti i diritti riservati