Problemas de comunicación serial entre el microcontrolador y la PC
En el número anterior, Hemos utilizado la placa experimental 51 mejorada para aprender a controlar la rotación de un motor paso a paso. En este número, aprenderemos a comunicarnos con un microcontrolador de PC uno por uno. Para completar un ejemplo simple de comunicación RS232, no explicaremos demasiada teoría a partir del ejemplo, creo que puede tener una comprensión más general y profunda, dominar sus principios y luego podrá programar cualquier programa. Comunicación con ordenador.
En los números anteriores, aprendimos e introdujimos la forma independiente, es decir, todas las funciones se pueden implementar en una placa experimental mejorada con 51. Cuando la tecnología de microcontroladores se aplica específicamente a fábricas, empresas y diversos campos industriales y civiles, se debe configurar la transmisión de datos con el exterior. Su interactividad también hace que la aplicación de microcontroladores se pueda utilizar para transmitir datos y controlar. comandos, etc Por lo tanto, la comunicación entre el microcontrolador y la PC es una parte esencial para que aprendamos la tecnología del microcontrolador, lo que hace que nuestro aprendizaje sea más interesante.
Completemos un experimento en el que un microcontrolador recibe datos de una PC a través de un puerto serie y los muestra en un tubo digital.
Primero, introduzcamos los conocimientos básicos de la comunicación serie. Actualmente, los puertos serie más utilizados incluyen el puerto serie de 9 pines (DB9) y el puerto serie de 25 pines (DB25). La más simple y más utilizada es la conexión de tres cables, es decir, los tres pines de conexión a tierra, recepción de datos y envío de datos están conectados. Este artículo solo cubre el método de conexión más básico y está conectado directamente a RS232. La definición del pin del puerto serie se muestra en la Figura 1.
Puerto serie de 9 pines (DB9) Puerto serie de 25 pines (DB25)
Número de pin
Función
Abreviatura p>
Número de PIN
Función
Abreviatura
1
Detección de portador de datos
DCD
8
Detección de soporte de datos
DCD
2
Recibir datos
RXD
3
Recibir datos
RXD
3
Enviar datos
TXD
2
Enviar datos
TXD
4
Terminal de datos listo
p>DTR
20
Terminal de datos listo
DTR
20
DTR listo Listo
DTR
5
Tierra de señal
GND
7
Tierra de señal
GND
6
Dispositivo de datos listo
DSR
6
Datos listo p>
DSR
7
Solicitud de envío
RTS
4
Solicitud de envío
RTS
8
Borrar para enviar
CTS
5
Borrar para enviar
CTS
9
Indicación de timbre
DELL
22
Indicador de anillo
DELL
Figura.
1 Diagrama esquemático de los pines de señal comunes de DB9 y DB25
Echemos un vistazo al diagrama de circuito de este experimento, como se muestra en la Figura 2, es decir, la placa experimental 51 mejorada realiza comunicación en serie y digital. parte del circuito de visualización del tubo. Los cuatro transistores de la Figura 2 están conectados respectivamente a los cuatro tubos digitales **** positivos. Son los terminales de habilitación de cada tubo digital y pasan por P2.0, P2.1, P2.2 y P2.3 del. microcontrolador respectivamente. Para controlar la pantalla del tubo digital, hemos introducido el principio de funcionamiento detallado en números anteriores de la revista. Los amigos que estén interesados pueden consultar el contenido de números anteriores. El chip MAX232 en la Figura 2 desempeña el papel de conversión de nivel RS232 y TTL. Estamos conectados a la PC a través de un puerto serie de 9 núcleos.
Figura 2 Esquema del circuito de hardware
El siguiente es el código fuente que utilizamos para completar este experimento. Utilice el software de compilación Keil para compilarlo y generar un archivo HEX, y luego use el A51. Programador Se puede grabar en el chip AT89S51.
#include "reg51.h"
#include lt;absacc.hgt;
pestaña de código de caracteres sin firmar[]={0xc0, 0xf9, 0xa4, 0xb0, 0x99, 0x92, 0x82, 0xf8, 0x80.0x90};
dat de caracteres sin firmar;
void Init_Com(void)
{
TMOD = 0x20; // El temporizador funciona en modo 2 y el valor inicial se carga automáticamente
PCON = 0x00; // La velocidad en baudios no se multiplica
SCON = 0x50; /Configuración del modo serie
TH1 = 0xFd; //El valor inicial del temporizador es alto
TL1 = 0xFd; //El valor inicial del temporizador es bajo
TR1 = 1; //Iniciar temporizador
}
Función: programa de retardo del tubo digital LED
retraso vacío(void) p>
{
int k;
for(k=0;klt;600;k);
}
/* función Función: programa de visualización de tubo digital LED*
pantalla vacía(int k)
{
P2=0xfe; p>
P0=tab[k/1000]; //mostrar mil dígitos
delay(); //retraso
P2=0xfd; //selección de bits
p>
P0=tab[k1000/100]; //mostrar cien dígitos
retraso(); //retraso
P2=0xfb; p>
P0=tab[k100/10]; //reproducir diez dígitos
delay(); //retraso
P2=0xf7; //selección de bits
p>
P0=tab[k10]; //mostrar un solo dígito <
retraso(); //retraso
P2=0xff; //selección de bits
}
/*Función función: programa principal*
void main()
{
P2=0xff; //Inicialización del puerto, apaga la pantalla LED
P0= 0xff;
Init_Com(); //Llama al programa de inicialización del puerto serie
while(1 ) //Bucle principal
{
if (RI) //Determinar si se reciben datos
{
dat = SBUF; //recibir datos
RI = 0; // Bit de marca de borrado del software
}
display(dat-48); //mostrar datos recibidos
RI = 0; p>
} p>
}
Analicemos juntos el código del programa. El programa principal primero genera todos los puertos P2 y P0 en el nivel alto, es decir, "P2. " y "P0".
es decir, la canalización de datos no muestra nada, la función Init_Com se usa para inicializar la configuración del puerto serie, como la configuración de velocidad en baudios, configuración del modo de trabajo, etc., todas estas son configuraciones de inicialización cuando el programa se está ejecutando. A continuación, vimos una declaración while (1). La función de esta declaración es crear un bucle infinito. Es decir, después de encender y reiniciar el microcontrolador, continuamos recibiendo los datos en serie enviados por la PC. tiempo coloque los datos recibidos en En la variable dat, cada vez que recibamos datos, debemos ejecutar la instrucción RI = 0 para borrar el indicador de recepción de datos en serie. Ahora que hemos recibido los datos de la PC, la tarea restante es. para pasar El tubo digital muestra números. Debe haber leído nuestras introducciones anteriores y estar familiarizado con el uso de tubos digitales. Aquí, hemos escrito una función muy simple que muestra números a través de la función de visualización, porque lo que se recibe es el carácter ASCII. Por ejemplo, el valor "0" del código ASCII digital es 48, por lo que si queremos mostrar "0", debemos restar su valor 48 para mostrar los datos reales. 0xb0, 0x99, 0x92, 0x82, 0xf8, 0x80, 0x90} declaración, su significado es equivalente a: el valor del código del segmento del tubo digital correspondiente al número "0" es "0xc0", y el valor del código del segmento del tubo digital correspondiente al El número "1" es "0xf9", el valor del código del segmento de tubo digital correspondiente al número "2" es "0xa4". ...y así sucesivamente, y finalmente muestra el valor de cada tubo digital a través del terminal de habilitación del tubo digital. En este punto, las funciones de todo el programa se han realizado fácilmente. Después de ver esto, creo que ya no todos son tan profundos en la comunicación en serie como pensaban originalmente.
Ahora que hemos escrito el programa y lo hemos grabado en el chip del microcontrolador, lo que tenemos que hacer a continuación es usar el cable serie para conectar la placa experimental mejorada 51 a la PC, y al mismo tiempo Encienda la fuente de alimentación en la placa experimental. Luego, los datos se envían al puerto serie de la PC a través del software en la PC. Al enviar datos al puerto serie, debe usar el software correspondiente y abrir el CD con la serie. Software de depuración de puertos. Esta es una configuración de interfaz conveniente, flexible, simple y clara. Interfaz cómoda, flexible, sencilla y clara. Debido a que necesitamos decirle al tablero del experimento qué números mostrar, la función del programa es enviar "1", "2", "3"..."8", "9", "0" y otros caracteres a Mejore el tablero de experimentos 51. Los datos recibidos se muestran a través del tubo digital, por lo que debemos completar el área que necesitamos enviar en el software, como se muestra en la Figura 3. Envíe el número, como se muestra en la Figura 3.
Figura 3
Software de depuración del puerto serie, configure los parámetros de la siguiente manera: puerto serie: COM1; velocidad en baudios: 9600; bit de paridad: ninguno; bit de parada: 1; ;Enviar contenido: 5
Cuando hacemos clic en el botón "Enviar manualmente", podemos ver que el tubo digital en el tablero experimental 51 mejorado ha mostrado el número "5", como se muestra en la Figura 4. Por supuesto, también podemos elegir "envío automático", es decir, el software envía automáticamente los datos en el "búfer de envío" cada cierto tiempo. El período de tiempo se puede configurar en la interfaz del software.
Figura 4
Ahora, puede recibir datos libremente desde la PC. Simplemente use su imaginación y defina el protocolo de comunicación de datos entre la PC y el microcontrolador. Puede crear cualquier programa y. controle el microcontrolador a través de la computadora para realizar diversas funciones de transmisión de datos y control remoto, como controlar la pantalla LCD a través de la PC, controlar la rotación del motor paso a paso, controlar el zumbador para reproducir música, etc. También puede conectar el conocimiento adquirido en este número con el conocimiento de números anteriores para completar ejemplos de aplicaciones más específicas con más funcionalidad. Por lo tanto, al final de este período de estudio, ya podemos conectar el microcontrolador y la PC. Con las potentes y flexibles funciones de la PC, nos resulta conveniente resolver diversos problemas prácticos de producción y aplicación. Presentaremos el contenido de este número aquí. Presentaremos más contenido de aprendizaje sobre el Tablero Experimental Enhanced 51 en los próximos números. Les deseo todo lo mejor en sus estudios.
Consulte: /dpj_step/rs232.asp.