Documenti di Didattica
Documenti di Professioni
Documenti di Cultura
SESION14
El módulo del Transmisor del receptor asíncrono universal (UART) es una de las E / S
en serie módulos disponibles en la familia de dispositivos dsPIC30F Switch Mode
Power Supply (SMPS).
bit 15,13 UTXISEL <1: 0>: bits de selección del modo de interrupción de transmisión
11 = Reservado
10 = Interrupción generada cuando un personaje se transfiere al registro Transmit Shift y al buffer de transmisión se
vacía
01 = Interrupción generada cuando finaliza la última transmisión (último carácter desplazado de Transmit Shift
registrarse) y se completan todas las operaciones de transmisión
00 = Interrupción generada cuando cualquier carácter se transfiere al Registro de cambio de transmisión (esto
implica a al menos una ubicación está vacía en el buffer de transmisión)
bit 14 UTXINV: bit de inversión de polaridad de transmisión del codificador IrDA
1 = estado inactivo UxTX codificado con IrDA es '1'
0 = IrDA codificado UxTX El estado inactivo es '0‘
bit 9 UTXBF: bit de estado completo del búfer de transmisión (solo lectura)
1 = El búfer de transmisión está lleno
0 = El búfer de transmisión no está lleno, al menos se puede escribir una palabra de datos más
bit 8 TRMT: Transmitir registro de cambios está vacío (solo lectura)
1 = El registro de cambio de transmisión está vacío y el búfer de transmisión está vacío (se completó la última
transmisión)
0 = El registro de desplazamiento de transmisión no está vacío, hay una transmisión en curso o en cola en el
búfer de transmisión
bit 7-6 URXISEL <1: 0>: recibir bits de selección de modo de interrupción
11 = El bit de indicador de interrupción se establece cuando el búfer de recepción está lleno (es decir, tiene 4
caracteres de datos)
10 = El bit de indicador de interrupción se establece cuando el búfer de recepción está lleno a 3/4 (es decir,
tiene 3 caracteres de datos)
0x = El bit de indicador de interrupción se establece cuando se recibe un carácter
bit 1 OERR: bit de estado de error de recepción de exceso de búfer (borrar / solo lectura)
1 = El buffer de recepción se ha desbordado
0 = El búfer de recepción no se ha desbordado (borrar un bit OERR previamente establecido restablece el búfer
del receptor y
RSR al estado vacío)
bit 8 URX8: bit de datos 8 del dato recibido (en modo de 9 bits)
bit 7-0 URX <7: 0>: bits de datos 7-0 del dato recibido
El ejemplo 1 muestra cómo calcular el error de velocidad en baudios para las siguientes
condiciones:
•FCY = 4 MHz
• Tasa de baudios deseada = 9600
• BRGH = 0
La velocidad máxima en baudios (BRGH = 0) es FCY / 16 (para UxBRG = 0), y el baud mínimo
la tasa posible es FCY / (16 • 65536).
La ecuación 2 muestra la fórmula para calcular la velocidad en baudios con BRGH = 1
Transmisor UART
La Figura 2 muestra el diagrama de
bloque del transmisor UART.
El corazón del transmisor es el Registro de
desplazamiento de transmisión (UxTSR).
Este registro de desplazamiento obtiene
sus datos del búfer FIFO de
transmisión,UxTXREG.
El registro UxTXREG se carga con datos en
el software.
El registro UxTSR no es cargado hasta que
el bit Stop haya sido transmitido desde la
carga anterior. Tan pronto como el bit
Stop sea transmitido, el UxTSR se carga
con nuevos datos del registro UxTXREG (si
está disponible).
Receptor UART
Este es un ejemplo simple de enviar texto desde un microcontrolador dsPIC30F4011 a una PC a través de
UART.
Este programa alterna un LED en RD0 una vez por segundo. Cada vez que se enciende o apaga el LED, la
palabra "Hola" se transmite a través del UART utilizando la función printf.
#include <xc.h>
#include <stdio.h>
#include <libpic30.h>
// Configuration settings
_FOSC(CSW_FSCM_OFF & FRC_PLL16); // Fosc=16x7.5MHz, Fcy=30MHz
_FWDT(WDT_OFF); // Watchdog timer off
_FBORPOR(MCLR_DIS); // Disable reset pin
int main ()
{
TRISD = 0; // Establecer todos los pines del puerto D como salidas
while (1)
{
printf ("Hola \ r \ n"); // Enviar texto a través de UART
_LATD0 = 1 - _LATD0; // Alternar LED en RD0
__delay32 (30000000); // 1 segundo de retraso
}
return 0;
}
Transmisión de datos en serie desde dsPIC30F4011 UART
El siguiente programa es un ejemplo de transmisión de datos en
serie desde el UART dsPIC30F4011. Este programa lee
repetidamente lecturas analógicas de 10 bits de AN0-AN7 y luego
imprime los resultados en la salida en serie.
La velocidad en baudios se establece en 38,400. Sin embargo,
estoy viendo problemas técnicos ocasionales en los datos
entrantes. Estoy usando el oscilador RC interno para sincronizar el
PIC, por lo que es probable que Fcy (y, por lo tanto, la velocidad en
baudios) esté un poco apagado.
#include <libpic30.h>
#include <p30f4011.h>
#include <stdio.h>
// Configuration settings
_FOSC(CSW_FSCM_OFF & FRC_PLL16); // Fosc=16x7.5MHz, Fcy=30MHz
_FWDT(WDT_OFF); // Watchdog timer off
_FBORPOR(MCLR_DIS); // Disable reset pin
// Function prototypes
void configure_pins();
unsigned int read_analog_channel(int n);
int main()
{
// Variables to store analog input voltages
int v0, v1, v2, v3, v4, v5, v6, v7;
// Configurar UART
// Por defecto hay 8 bits de datos, 1 bit de parada, ningún bit de paridad
U1BRG = 48; // 38400 baud @ 30 MIPS
U1MODEbits.UARTEN = 1; // Habilita UART
U1STAbits.UTXISEL = 1; // interrumpe cuando el buffer TX está vacío
U1STAbits.UTXEN = 1; // Habilitar TX
}
// Esta función lee una muestra única de la especificada
// entrada analogica. Debe tomar menos de 2.5us si el chip
// se ejecuta a unos 30 MIPS.