Red de conocimientos turísticos - Conocimientos sobre calendario chino - ¿Cómo escribir un programa de microcontrolador?

¿Cómo escribir un programa de microcontrolador?

En primer lugar, debe conocer con precisión la precisión y la velocidad de la conversión de AD requerida y luego elegir la CPU adecuada de acuerdo con sus necesidades (el AD en el chip debe cumplir con los requisitos, si la conversión de AD requiere requisitos de precisión y velocidad particularmente altos, usted). Es necesario utilizar un chip AD especializado. La selección de la parte de la pantalla tendrá ciertos requisitos sobre la velocidad de la CPU. Si la pantalla usa una pantalla LCD TFT, debe elegir una CPU con una frecuencia máxima de 48 MHz, y la interfaz LCD es mejor usar un puerto paralelo. Si su dispositivo es portátil, elija una CPU de bajo voltaje con modo de ahorro de energía. Desde la perspectiva del costo, el rendimiento y los requisitos, se recomienda utilizar CPU de la serie ARM cortex M0 o ARM cortex M3.

A lo que el software debe prestar atención es a elegir el algoritmo de filtrado adecuado según las necesidades.

El flujo del programa es el siguiente:

#include <.....

#define SAMPLE_NUMBER 1024

int sample[ SAMPLE_NUMBER];

int sampleFiltered[SAMPLE_NUMBER];

int salida[SAMPLE_NUMBER];

volatile int sampleCount;

volatile BOOL sampleOK_flag;

BOOL filterOK_flag;

BOOL AD-a-output-physical_flag;

BOOL AD-a-output-physical_flag;

anular AD_Init ()

{

.....................

}

void AD_handle() __irq

{

............

muestra[sampleCount++] = ADresultado ;

if (sampleCount == SAMPLE_NUMBER)

{

sampleCount = 0;

sampleOK_flag = TRUE

}

}

int* filter(int* pSample, int* pSampleFiltered)

{

.... ............

filterOK_flag = TRUE;

return &sampleFiltered[0];

}

int* AD a OutputPhysics(int* sampleFiltered,int *output)

{

............ ....... ..

AD para generar conversion_flag físico = TRUE;

return &output[0];

}

void lcd_init()

{

....................

}

void lcd_display(int* salida, int posiciónX,int posiciónY)

{

............. ......... ...............

}

int main()

{

sampleCount = 0;

sampleOK_flag = FALSE;

filterOK_flag = FALSE;

AD-to-output-physics_flag = FALSE;

System_init ();

AD_Init();

lcd_init();

mientras ( 1)

{

if (sampleOK_flag )

{

filtrar

(muestra, muestraFiltered);

sampleOK_flag = FALSE;

}

if (filterOK_flag )

{

AD para generar conversión física (sampleFiltered,output);

filterOK_flag = FALSE;

}

if (AD para generar conversion_flag física)

{

lcd_display(output, positionX,positionY );

AD para generar conversion_flag físico = FALSE;

}

}

}

}