Red de conocimiento informático - Problemas con los teléfonos móviles - STC 12C5204AD adquisición de datos, transmisión en serie recibir datos, visualización en pantalla;

STC 12C5204AD adquisición de datos, transmisión en serie recibir datos, visualización en pantalla;

* ------------------------- Macronix 15/04/2009 ------------------ -- */

/* --------------------Móvil:0755-82948412,13922805190---- ------ ------ */

// Este programa demuestra la función de conversión A/D del microcontrolador de la serie STC12C5AxxAD. La frecuencia del reloj es 18.432MHz

// Los resultados de la conversión se envían al puerto serie en formato hexadecimal y puede utilizar el depurador del puerto serie para observar la salida.

// ----------------------------------------- - ----------------------------

//#incluye

#include < intrins.H>

#include "NEW_8051.

//-------------------- - ----------------------------------------

typedef sin firmar char uchar;

typedef unsigned int uint;

//------------------- ------- ---------------------------------------- --- -

//Seleccione una de las siguientes tasas de conversión ADC

// SPEED1 SPEED0 El tiempo necesario para la conversión A/D

/#define AD_SPEED 0x60 // 0110,0000 1 1 Conversión una vez cada 70 ciclos de reloj,

// frecuencia de funcionamiento de la CPU

//#define AD_SPEED 0x40 // 0100,0000 1 0 140 ciclos de reloj

p>

//#define AD_SPEED 0x20 // 0010, 0000 0 1 280 ciclos de reloj

//#define AD_SPEED 0x20 // 0010,0000 0 1 280 ciclos de reloj

/#define AD_SPEED 0x20 // 0110,0000 1 1 280 ciclos de reloj

/#define

//#define AD_SPEED 0x00 //0000, 0000 0 0 420 ciclos de reloj

//---------------------------------------- ------- ---------------------------

void enable_RS232 (void); //Inicialización del puerto serie

void Send_Byte(uchar one_byte); //Enviar un byte

uchar get_AD_result(uchar canal);

void delay(uchar delay_time); // función de retardo

//--------------------------------------- ------ -------------------------

void main()

{

uint ADC_result;

inicia_RS232(); // velocidad en baudios = 115200

P1ASF = 0x02; //0000,0010, configura P1.1 en el puerto analógico

// ADRJ = AUXR1^2:

// 0: Los 8 bits altos del resultado de la conversión A/D de 10 bits se colocan en el registro ADC_RES y los 2 bits bajos se colocan en el registro ADC_RESL

// 1: Los 2 bits más altos del resultado de la conversión A/D de 10 bits se colocan en los 2 bits más bajos del registro ADC_RES, y los 8 bits más bajos se colocan en el ADC_RESL registrarse

AUXR1 &= ~ 0x04; //0000,0100, crea ADRJ=0

// AUXR1 |= 0x04; //0000,0100, crea ADRJ=1

ADC_CONTR |= 0x80; //1000,0000 Enciende la fuente de alimentación de conversión A/D

while(1)

{

ADC_result = get_AD_result(1);/ /P1.1 es el canal A/D actual, mide y envía el resultado

Send_Byte(0xAA); //Para facilitar la observación, envía 2 0xAA

Send_Byte(0xAA). );

Enviar _Byte(ADC_result);

retraso(0x1);

}

}

}

//---------------------------------------- --------- -----------------------

void delay(uchar delay_time) // Función de retardo

{

uint n

while(delay_time--)

{

n = 6000;

mientras(-- n);

}

}

//------------ ---------- ---------------------------------------- -------

#define Fosc 18432000

#define BAUD 115200 // Velocidad en baudios

#define RELOAD_115200 (256 - (Fosc/16 *10/BAUD+5)/10 )//modo 1T, velocidad en baudios duplicada

#define BRTx12_enable() AUXR |= 0x04 //BRT independiente BRTx12_enable() AUXR |= 0x04 //BRT independiente en baudios La velocidad de desbordamiento del generador de velocidad es 12 veces más rápida

#define BRT_start() AUXR |= 0x10 // Inicia el conteo BRT del generador de velocidad en baudios independiente.

voidiniciar_RS232 (void) //Inicialización del puerto serie

{

ES = 0; //Desactivar interrupción serie

SCON = 0x50; //Velocidad de baudios variable.

8 bits sin paridad

AUXR |= 0x01; //Usar generador de velocidad de baudios independiente

PCON |= 0x80; //Doble velocidad de baudios

BRTx12_enable( ); //La velocidad de desbordamiento del generador de velocidad en baudios independiente de BRT es 12 veces más rápida

BRT = RELOAD_115200 //Establece el recuento de recarga automática para el generador de velocidad en baudios independiente BRT

BRT_start (); //Inicia el recuento BRT del generador de velocidad de baudios independiente.

ES = 1;

}

//---- ---- ---------------------------------------------- ---- -----------

void Send_Byte(uchar one_ byte) //Enviar un byte

{

TI = 0; /Borrar el indicador de interrupción de transmisión en serie

SBUF = one_byte;

while (TI == 0);

TI = 0;/ /Borrar la transmisión en serie indicador de interrupción

}

/--------------------- ----- -------------------------------

uchar get_AD_result(canal deuchar)

{

uchar AD_finished=0; //almacenar indicador de conversión A/D

ADC_RES = 0;

ADC_RESL = 0 ;

canal &= 0x07; //0000,0111 borrar 0 alto 5 bits

ADC_CONTR = AD_SPEED;

_nop_(); p> ADC_CONTR |= canal; //Selecciona el canal actual del A/D

_nop_();

ADC_CONTR |= 0x80 //Inicia la fuente de alimentación A/D

delay(1); //Permitir que el voltaje de entrada alcance la estabilidad

ADC _CONTR |= 0x08; //0000,1000 Hacer ADCS = 1, iniciar la conversión A/D,

AD_finished = 0;

while (AD_finished ==0) // Espera a que se complete la conversión A/D

{

AD_finished = ( ADC_CONTR & 0x10); //0001,0000 Probar si se completó la conversión A/D

}

ADC_CONTR &= 0xE7; //1111,0111 Borrar bit ADC_FLAG , deshabilita la conversión A/D,

return (ADC_RES); //devuelve A/D alto 8 bits; // devuelve (ADC_RES) // devuelve (ADC_RES); ANUNCIO

alto resultado de conversión de 8 bits

}