ayuda necesaria en AT89C4051

V

vinash

Guest
Hola,
Yo soy un recién llegado al campo de los microcontroladores y de hacer algunos proyectos sencillos para familiarizarse con microcontroladores.Actualmente estoy iniciando en el uso de la AT89C4051 como un ADC.De hecho, estoy tratando de usar la aplicación de notas proporcionadas por el siguiente sitio web:
h ** p: / / www.atmel.com/dyn/resources/prod_documents/DOC0524.PDF
Sería muy útil si alguien me ayude con la codificación (C-programa) para la aplicación.He intentado un par de veces, pero han fracasado.Su ayuda será apreciada greaatly.
He hecho lo conexiones para la conversión ADC y se había conectado la tensión positiva de la señal a la clavija 1.1.y me escribió un programa muy simple, que sería capaz de leer la tensión de salida en los LEDs,.
El programa es de la siguiente manera:

# include <AT89x051.h>

char a [10] = (0x03, 0x13, 0x23, 0x33, 0x43, 0x53, 0x63, 0x73, 0x83, 0x93) / * La numeración 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 );

)
)Yo siempre reciben un cero en mi pantalla LED, no importa cómo me cambió la tensión de entrada, ¿Podría alguien por favor help.I estoy luchando con esto durante unos días.Gracias

 
Me pregunto qué datos se almacenan en adc_data y también el esquema que está utilizando.
Si utiliza el P1 conjunto (8 pines) para controlar el LED, donde se obtiene el adc_data?
Además, ¿cuál es el significado de P1_1 = adc_data?

 
He conectado el 8.2K resistencia a la tierra directamente en lugar de conectarlo al condensador de 30 pF, como se muestra en el diagrama de schmetic (en el sitio web determinado).He hecho esto para que cuando se enciende la máquina, en línea recta que la luz de los LED en lugar de lo que necesitan para cambiar si hubiera conectado de acuerdo con la schmetic dado.

P1_1 = adc_data,
Lo que estoy tratando de hacer es asignar los datos de 8 bits recibido de la tensión de alimentación (de pines 1,1) a la adc_data dirección.

P1 = [% adc_data 10];
Estoy tratando de salida de los datos que se almacena en la dirección adc_data a las conexiones de LED.

Esto es todo lo que estoy tratando de do.I Esperamos que sería capaz de resolver mi problema.Gracias.

 
vinash escribió:

...

P1_1 = adc_data,

Lo que estoy tratando de hacer es asignar los datos de 8 bits recibido de la tensión de alimentación (de pines 1,1) a la adc_data dirección.P1 = [% adc_data 10];

Estoy tratando de salida de los datos que se almacena en la dirección adc_data a las conexiones de LED.

...
 
Hola,
Gracias por la ayuda, en realidad estoy bastante confundido acerca de cómo leer una entrada (por ejemplo, cómo leer la tensión de entrada de P1.1) que he leído en la hoja de datos y han señalado que, para utilizar un puerto como entrada , acaba de escribir 1s a ellos.Sería genial si eres capaz de ayudarme en this.i no estoy seguro, también, la forma de capturar los datos que se obtiene de P1.1.

 
Para hacer un puerto a puerto de entrada, escribir 1s hasta el puerto.También puede establecer un único pin a ser alto para que el PIN pin de entrada.Lo he hecho bien en AT89C51.

De todos modos, tengo una pregunta, si el Puerto 1 es usada como puerto de salida, y quiero enviar a todos 1s a 8 LEDs utilizando el puerto 1, el controlador puede hacerlo?O que hará que el puerto 1 como puerto de entrada?Estoy usando AT89C51.

 
Hola Lekka,
Si ése es el caso, por lo que dicen, yo estoy dando una orden, como
P1 = 0x03, ¿Significa esto que estoy utilizando de forma automática P1.0 y P1.1 como insumos y el resto de los pines de salida?

 
No estoy seguro de cómo programar en C. Estoy utilizando el lenguaje ensamblador y Asem51 ensamblador.

Para hacer que el puerto 1 como puerto de entrada, el código es
MOV P1, # FFH

Para hacer un único pin (por ejemplo, Pin 1,1) como pin de entrada, el código es
SETB P1.1

La idea es, establecer el puerto en particular o de alta solo pin, el puerto o PIN será el puerto de entrada o pin de entrada.Sin hacer esto, usted no puede recibir datos usando.

 
Yo no sé realmente cómo funciona este esquema como un ADC, por lo que no puede responder a cómo obtener los datos.
Para la entrada, vinash debe ser correcto.Usted sólo puede tratar en su circuito.
Como usted ha dicho que no se puede mostrar en LED, me pregunto cuál es el código que escribió para el control de su LED.¿Te importa anuncio para nosotros?

 
HI Tofinkh,
El programa que yo había escrito a continuación:

También he subido el archivo, por favor, eche un vistazo y por favor, hágamelo saber si encuentra algún error, muchas gracias, lo hago muy agradecidos por su ayuda

# 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 retraso (int);
void main (void)

(
adc_data unsigned char;

P1 = 0x03; / / configuración P1.0 y P1.1 como insumos y el resto de la P1 como salida
while (1) (
P1_1 = adc_data; / / leer los datos (de la tensión de entrada) de P1.1 y almacenarlo en adc_data
retraso (5);
P1 = P1 &0x03; / / P1 SET de nuevo de tal manera que P1.0 y P1.1 son los insumos y los otros puertos de salida P1 SRE
P1 = a [% adc_data 10]; / / encontrar el resto de los datos obtenidos por ejemplo, si es 0x15, el resto es de 1 por lo tanto P1 y 0x03 = 1
/ / Y a [1] = 1 y por lo tanto 1 se muestra
retraso (5);
)
)void retraso (int)
(
int j;
for (j = 0; j <count; j ) (
continuar;
)
)

 
hola,

es mejor que comprobar cómo el ADC trabaja en su primer documento.si quiere poner el valor de P1.1 y almacenarlo en adc_data, debe ser
= adc_data P1_1;

para la conducción de los LED de 7 segmentos, tienes que activar el LED antes de enviar el valor, la P1.2 y P1.3 en el esquema, permite un LED a la vez.Por favor, eche un vistazo a su hoja de datos también.

 
Hola, había modificado el código, y el nuevo código es como sigue: y como se había mencionado sobre P1.2 y P1.3 haber sido conmutada de baja cuando se utiliza la llevó de interés.Lo había hecho y también en la actualidad sólo estoy usando uno dirigido a la prueba y para que yo había mantenido siempre bajo P1.3 y P1.2 siempre alto, de manera que solamente un LED se utiliza.Pero todavía dont obtener cifras sobre el LED.Esperamos que sería capaz de ayudar.Gracias.

# 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 retraso (int);
void main (void)

(
adc_data unsigned char, z;

P1 = 0x03; / / configuración P1.0 y P1.1 como insumos y el resto de la P1 como salida
while (1) (
P3_7 = 0;
P1 = P1 &0x03; / / P1 SET de nuevo de tal manera que P1.0 y P1.1 son los insumos y los otros puertos de salida P1 SRE
= adc_data P1_1; / / leer los datos (de la tensión de entrada) de P1.1 y almacenarlo en adc_data
z = P1 &0x03;
z = a [% adc_data 10];
retraso (5);
P1 = P1 &0x03;
P1 = a [adc_data]; / / encontrar el resto de los datos obtenidos por ejemplo, si es 0x15, el resto es de 1 por lo tanto P1 y 0x03 = 1
/ / Y a [1] = 1 y por lo tanto 1 se muestra
retraso (5);

)
)void retraso (int)
(
int j;
for (j = 0; j <count; j ) (
continuar;
)
)

 
vinash, como AT89C4051 no tiene un "verdadero" ADC, la ADC en su nota de solicitud es formulada por un comparador y algunos circuito RC simple.Hay que leer el documento antes de que desea obtener el valor analógico.No se debe hacer simplemente escribiendo adc_data = P1_1.
Por favor, compruebe cuidadosamente sobre su solicitud la primera nota.HTH

 
Hola Tofinhk,
Gracias por su amabilidad aadvice, trataría de hacer algo al respecto.Pero de todos modos, realmente apreciamos la ayuda que había prestado

 

Welcome to EDABoard.com

Sponsor

Back
Top