STC 12C5204AD adquisición de datos, transmisión en serie recibir datos, visualización en pantalla;
/* --------------------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.
//-------------------- - ---------------------------------------- p>
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
}