Red de conocimiento informático - Material del sitio web - Cómo programar el puerto serie SCI

Cómo programar el puerto serie SCI

Debes haber visto el enchufe de nueve pines en la parte posterior del chasis de la computadora de escritorio. En el pasado, las computadoras y periféricos se comunicaban a través de él, y ahora se está reemplazando gradualmente por el USB. Tiene sus propias ventajas. En primer lugar, estamos en la cima. La programación de la computadora es fácil, pero la distancia de transmisión es larga. Rara vez se ven USB con cables largos.

SCI es la abreviatura de interfaz de comunicación serie, que significa interfaz de comunicación serie. El llamado serial significa que los datos se envían y reciben uno por uno. Por supuesto, para nuestra programación, estos no tienen ningún impacto en nosotros.

Primero hablemos del diseño de hardware de la comunicación en serie. El SCITX y el SCIRX del microcontrolador son ambos de 0 V o 5 V. He probado el nivel del puerto serie de la computadora y es de +10 V o -10 V. No pueden conectarse directamente, por lo que se requiere un chip de conversión de nivel, generalmente usamos MAX232 que está conectado al transmisor del puerto serie del microcontrolador, RXD0 está conectado al receptor del microcontrolador, DB_TX está conectado al pin 2 del enchufe de nueve pines, DBRX. está conectado al pin 3 y GND está conectado al pin 5, conecte el enchufe de nueve pines a la computadora para que el microcontrolador y la computadora puedan comunicarse. ¿Cómo leer los datos recibidos por el puerto serie en la computadora? En este momento, necesita un software de depuración del puerto serie, que proporcioné en la información.

Bien, ahora programemos el microcontrolador. Para lograr la comunicación del puerto serie, lo más importante es hacer coincidir la velocidad de transmisión, es decir, la velocidad de transmisión debe ser constante. La computadora establece la velocidad de transmisión del puerto serie en 9600 y su microcontrolador debe estar configurado en 9600 para comunicarse. Por supuesto, lo configuró en 9601. También pregunte al Instituto de Tecnología de Harbin Desarrollo integrado hitele.taobao.com El problema no es grande, la comunicación no puede ser 100% precisa, ¡haga lo mejor que pueda! La fórmula de configuración de la velocidad en baudios del puerto serie se proporciona en la página 420 del manual: el reloj del bus SCI es el f BUS mencionado anteriormente, que se mencionó en los experimentos anteriores con temporizador y PLL. En el experimento de PLL, configuramos f BUS en 40M. SCIBR[12:0] está determinado por SCIBDH y SCIBDL (página 406 en el manual), donde SCIBDH está configurado en [12:8], SCIBDL está configurado en [7:0], un *** 13 bits. Si ahora queremos establecer la velocidad en baudios en 9600, ¿cómo configurarla? 9600=40 000 000 /(16*SCIBR[12:0]) SCIBR[12:0]= 40 000 000 /16/9600 =260 La notación hexadecimal de 260 es 104H, es decir, SCIBDH=0x01, SCIBDL=0x04 Además del registro de velocidad en baudios, hay dos registros más importantes: los LOOPS SCI0CR1 y SCI0CR2 están configurados en 1: el extremo emisor del SCI está conectado directamente al extremo emisor del SCI internamente, es decir, espontáneo y automático. recepción. Esto se utiliza principalmente para la programación durante la programación del programa para la prueba. Borre a 0 para ingresar al modo normal. M=0: El bus SCI envía 1 bit de inicio, 8 bits de datos y un bit de parada M=1: El bus SCI envía 1 bit de inicio, 9 bits de datos y un bit de parada PE=1: Habilitar paridad PE=0: Deshabilitar paridad check PT se utiliza para seleccionar si se utiliza paridad impar o paridad par. Con respecto a la verificación de paridad, puede buscar en Baidu y no entraré en detalles aquí. Desarrollo integrado del Instituto de Tecnología de Harbin hitele.taobao.com TIE = 1: habilitar el envío de datos es una interrupción vacía, es decir, el registro de envío de datos ahora puede recibir nuevos datos y usted puede enviar nuevos datos. TCIE=1: Habilita la interrupción de finalización de la transmisión, informándole que la transmisión se completó. RIE=1: Habilita la interrupción de la recepción TE=1: Habilita la transmisión RE=1: Habilita la recepción. TDRE=1: Indica que se pueden enviar y recibir nuevos datos RDRF=1: Indica que se han recibido nuevos datos Aplicación práctica: Utilice el microcontrolador para enviar "hitele" a la computadora cada 400 ms y cambie el estado del LED cada vez. Se reciben los datos enviados desde el PC. Cada 400 ms, utilice el temporizador mencionado anteriormente para revisarlo.

Programación de transmisión del puerto serie: 1. Primero inicialice SCI SCI0BDH =0x01; SCI0BDL =0x04; //Establezca la velocidad en baudios en 9600, tenga en cuenta que esto se establece cuando f BUS es 40M SCI0CR1 = 0x64; está conectado al exterior; SCI0CR2 = 0x2C; // Habilitar interrupción de recepción y habilitar recepción 2. Función de envío void Sci0SendByte (datos de caracteres sin firmar) { while(!(SCI0SR1&0X80) // Espere a que TDRE se establezca en 1, es decir, esperando que se puedan enviar nuevos datos SCI0DRL = data; //Escribe los datos que se enviarán en el registro de datos para que se envíen} 3. Recibir recepción de consultas de función: hitele de desarrollo integrado del Instituto de Tecnología de Harbin. taobao.com unsigned char Sci0Read() { while(!SCI0SR1_RDRF); //Esperando recibir datos hasta que se reciba SCI0SR1_RDRF=1 //La lectura del registro de datos borrará y restablecerá RDRF return SCI0DRL; registrarse} Interrumpir Reciba datos de la siguiente manera: #pragma CODE_SEG NON_BANKED void interrupt 20 SCI0_RE(void) { SCI0SR1_RDRF=1; //Estos dos pasos son para borrar el indicador de interrupción DDRE |=0x60; , es decir, configure PE5 y PE6 en modo de salida*/ PORTE =~PORTE /*Cambiar estado del LED*/ }