help needed in AT89C4051

V

vinash

Guest
Salve,
Sono un nuovo comer al campo di microcontrollori e di fare alcune semplici progetti per acquisire familiarità con microcontrollori.Attualmente i am intraprendere utilizzando il AT89C4051 come ADC.Sono effettivamente cercando di utilizzare l'applicazione note fornite dal seguente sito web:
h ** p: / / www.atmel.com/dyn/resources/prod_documents/DOC0524.PDF
Sarebbe molto utile se qualcuno di aiutarmi con la codifica (C-programma) per l'applicazione.Ho provato un paio di volte, ma hanno fallito.Il vostro aiuto sarebbe apprezzato greaatly.
L'ho fatto per i collegamenti ADC conversione e aveva collegato la tensione positiva del segnale di 1,1 Pin.e ho scritto un programma molto semplice, che sarebbe in grado di lettura tensione di uscita sul LED.
Il programma è come segue:

# include <AT89x051.h>

char a [10] = (0x03, 0x13, 0x23, 0x33, 0x43, 0x53, 0x63, 0x73, 0x83, 0x93); / * La numerazione da 0-9 * /void main (void)

(int j, adc_data;
while (1) (

P1_1 = adc_data;
P1 = a [adc_data% 10];
for (j = 0; j <30000; j );

)
)Io faccio sempre ottenere uno zero sul mio display a LED, non importa come ho cambiato la tensione di ingresso, potrebbe per favore qualcuno help.I sono alle prese con questo per un paio di giorni.Grazie

 
Mi chiedo che cosa i dati memorizzati in adc_data e anche lo schema che si sta utilizzando.
Se si utilizza l'intera P1 (8 pin) per controllare il LED, dove è possibile ottenere la adc_data?
Inoltre, qual è il significato di P1_1 = adc_data?

 
Ho collegato il 8.2K resistenza a terra, invece di collegare direttamente al condensatore 30Pf come mostrato nel diagramma schmetic (nel sito dato).L'ho fatto in modo che ogni volta che il potere è in funzione, sarebbe dritto luce led anziché dover passare Se avessi collegato secondo le schmetic dato.

P1_1 = adc_data,
Quello che
sto cercando di fare è assegnare il 8 bit dati ricevuti dalla tensione di alimentazione (pin da 1,1) per l'indirizzo adc_data.

P1 = [adc_data% 10];
Sto cercando di uscita dei dati che vengono memorizzati in indirizzo per il LED adc_data connessioni.

Questo è tutto quello che sto cercando di do.I speranza voi sarebbe in grado di risolvere il mio problema.Grazie.

 
vinash ha scritto:

...

P1_1 = adc_data,

Quello che sto cercando di fare è assegnare il 8 bit dati ricevuti dalla tensione di alimentazione (pin da 1,1) per l'indirizzo adc_data.P1 = [adc_data% 10];

Sto cercando di uscita dei dati che vengono memorizzati in indirizzo per il LED adc_data connessioni.

...
 
Salve,
Grazie per l'aiuto,
in realtà
sono molto confuso su come leggere un input (ad esempio, come leggere la tensione di ingresso da P1.1) ho letto nella scheda tecnica, e ha dichiarato che, al fine di utilizzare una porta di ingresso , 1s scrivere solo per loro.Sarebbe bello se si è in grado di aiutarmi in this.I non sono sicuro di come anche per catturare i dati che si ottiene dalla P1.1.

 
Per fare un porto da porta di ingresso, scrivere 1s al porto.È inoltre possibile impostare un solo pin per essere elevato a fare il pin da pin.Ho fatto bene in questo AT89C51.

Comunque, ho una domanda, se la porta 1 è usato come porta di uscita, e voglio inviare a tutti i 1s a 8 LED utilizzando Porto 1, il controllore può farlo?Oppure si farà la porta 1 come porta di ingresso?Sto utilizzando AT89C51.

 
Hi Lekka,
Se questo è il caso, così dire, mi dò un comando come
P1 = 0x03,
non significa che io sia automaticamente utilizzando P1.0 e P1.1 come input e il resto dei pin di uscita?

 
Non sono sicuro di come si programma in C. sto utilizzando linguaggio assembly e l'assembler Asem51.

Per rendere la porta 1 come porta di ingresso, il codice è
MOV P1, # FFH

Per fare un unico codice PIN (ad esempio Pin 1,1) come input pin, il codice è
SETB P1.1

L'idea è, si è impostato il porto o di un singolo pin alta, il porto o pin saranno porta di ingresso o pin.Senza questo, non è possibile ricevere i dati che li utilizzano.

 
Non so come questo funziona come uno schema ADC, quindi non posso rispondere come ottenere i dati.
Per l'ingresso, si dovrebbe essere vinash destra.Si può solo provare nel vostro circuito.
Come lei ha detto non è possibile visualizzare in LED, mi chiedo che cosa si scrive codice per controllare il tuo LED.Lei mente distacco è per noi?

 
HI Tofinkh,
Il programma che avevo scritto, è qui di seguito:

Ho anche caricato il file, fare attenzione a dare
un'occhiata e per favore non fatemi sapere se avete trovato alcun errore, thanks a lot, fare apprezzare molto il vostro aiuto

# include <AT89x051.h>

char a [10] = (0x07, 0x17, 0x27, 0x37, 0x47, 0x57, 0x67, 0x77, 0x87, 0x97);
char b [10] = (0x0F, 0x1F, 0x2F, 0x3f, 0x4F, 0x5F, 0x6F, 0x7F, 0x8F, 0x9F);
void ritardo (int count);
void main (void)

(
unsigned char adc_data;

P1 = 0x03; / / impostazione P1.0 e P1.1 come input e il resto del P1 come produzione
while (1) (
P1_1 = adc_data; / / leggere i dati (la tensione di ingresso) da P1.1 e conservarla in adc_data
ritardo (5);
P1 = P1 &0x03; / / set P1 ancora tale che P1.0 e P1.1 sono gli input e gli altri porti P1 sre uscita
P1 = a [adc_data% 10]; / / trovare il resto dei dati ottenuti, ad esempio se è 0x15,
mentre il resto è 1 quindi P1 & 0x03 = 1
/ / E [1] = 1 e quindi 1 sarà visualizzato
ritardo (5);
)
)void ritardo (int count)
(
int j;
for (j = 0; j <count; j ) (
continuare;
)
)

 
salve,

meglio controllare come ADC opere
all'interno di un documento prima.se volete mettere il valore da P1.1 e conservarla in adc_data, dovrebbe essere
adc_data = P1_1;

per la guida del segmento 7 LED,
devi abilitare il LED prima di inviare il valore, la P1.2 e P1.3 nello schema, consentire uno LED in una sola volta.Si prega di dare
un'occhiata anche sulla sua scheda.

 
HI,
avevo modificato il codice, e il nuovo codice è la seguente: e come lei ha ricordato P1.2 e P1.3 essere stato acceso ogni volta che il basso ha portato di interesse viene utilizzato.Avevo fatto anche oggi e io sono solo utilizzando uno portato a prova e per questo ho avuto sempre mantenuto basso P1.3 e P1.2 sempre alto in modo che solo uno ha portato viene utilizzato.Ma ancora i dont ottenere dati sul LED.speriamo che sarebbe in grado di aiutare.Grazie.

# include <AT89x051.h>

char a [10] = (0x07, 0x17, 0x27, 0x37, 0x47, 0x57, 0x67, 0x77, 0x87, 0x97);
char b [10] = (0x0F, 0x1F, 0x2F, 0x3f, 0x4F, 0x5F, 0x6F, 0x7F, 0x8F, 0x9F);
void ritardo (int count);
void main (void)

(
unsigned char adc_data, z;

P1 = 0x03; / / impostazione P1.0 e P1.1 come input e il resto del P1 come produzione
while (1) (
P3_7 = 0;
P1 = P1 &0x03; / / set P1 ancora tale che P1.0 e P1.1 sono gli input e gli altri porti P1 sre uscita
adc_data = P1_1; / / leggere i dati (la tensione di ingresso) da P1.1 e conservarla in adc_data
z = P1 &0x03;
z = a [adc_data% 10];
ritardo (5);
P1 = P1 &0x03;
P1 = a [adc_data]; / / trovare il resto dei dati ottenuti, ad esempio se è 0x15,
mentre il resto è 1 quindi P1 & 0x03 = 1
/ / E [1] = 1 e quindi 1 sarà visualizzato
ritardo (5);

)
)void ritardo (int count)
(
int j;
for (j = 0; j <count; j ) (
continuare;
)
)

 
vinash, come AT89C4051 non ha ancora una "reale" ADC, ADC in atto la vostra applicazione è composta da un confronto e di alcune semplici circuito RC.Devi leggere il documento prima che si desidera ottenere il valore analogico.Non dovrebbe essere fatto semplicemente digitando adc_data = P1_1.
Si prega di controllare con attenzione la tua domanda sulla prima nota.HTH

 
Hi Tofinhk,
Grazie per il vostro gentile aadvice, avrebbe tentato di fare qualcosa al riguardo.Ma comunque, veramente apprezzare per l'aiuto che ha reso

 

Welcome to EDABoard.com

Sponsor

Back
Top