Quiero usar Proteus para simular la transmisión de datos UART, voy a abrir dos puertos COM virtuales y conectarlos.
Entonces, primero uso el Emulador de Puertos Seriales Virtuales para abrir puertos COM virtuales:
Segundo,usoeltérminoteraparaserCOM1:
Tercero, mi circuito en Proteus será COM2:
YpuseelCOMPIMenelcircuitocomoCOM2,velocidaddetransmisión9600.
El código del chip dsPIC en Proteus:
void main() {
Unlock_IOLOCK();//unlock
PPS_Mapping_NoLock(0, _INPUT, _U1RX);//Set UART1 Rx be pin RP0
PPS_Mapping_NoLock(1, _OUTPUT, _U1TX);//Set UART1 Tx be pin RP1
Lock_IOLOCK();//lock
UART1_Init(9600);//Set Baud Rate
Delay_ms(100);//Let UART initialize
while(1)
{
unsigned receive;
if (UART1_Data_Ready())
{
receive = UART1_Read();
UART1_Write(receive); //The result should be sent back to COM1
}
}
}
Luego comencé la simulación de Proteus, luego escribí un carácter 'o' en el término tera. Como puede ver, el terminal virtual en Proteus ha recibido 'o', por lo que los puertos COM virtuales funcionan bien. Pero dsPIC parece perder la lectura de la 'o', por lo que no puede enviarlo a COM1.
Sicambiéelcódigoyreiniciélasimulación
voidmain(){Unlock_IOLOCK();//unlockPPS_Mapping_NoLock(0,_INPUT,_U1RX);//SetUART1RxbepinRP0PPS_Mapping_NoLock(1,_OUTPUT,_U1TX);//SetUART1TxbepinRP1Lock_IOLOCK();//lockUART1_Init(9600);//SetBaudRateDelay_ms(100);//LetUARTinitializewhile(1){unsignedreceive;UART1_Write('a');if(UART1_Data_Ready()){receive=UART1_Read();UART1_Write(receive);//TheresultshouldbesentbacktoCOM1}}}
Puedover'a'enviadopordsPICenteratérmino:
Entonces, UART_Write () parece estar bien, no sé por qué dsPIC no puede leer datos de COM1. Tal vez configuré algo mal.