Cuando intente enviar y recibir utilizando un PIC18F97J60 y MAX232 utilizando un programa escrito con el compilador C18, solo puedo transmitir datos. Para recibir, he intentado al menos 50 métodos pero ninguno está funcionando. Incluso probé el software en varias tarjetas de microcontrolador para detectar un problema de hardware, pero ninguna de las tarjetas recibe nada. Creo que los siguientes elementos son correctos:
- Mi reloj es perfecto a 41.6667MHz
- Mi generación de baudios es perfecta
- Mi hardware está bien (otro código hexadecimal de la tercera parte puede recibir también)
- Mi PC host, su puerto COM y el cable serie están bien
¿Alguien puede guiarme con áreas probables que pueda faltar?
------------------ OTRAS ACLARACIONES --------------------------- ----------------
Gracias Olin por ayudar, eres un gran hombre. Lo siento por no hacer mi pregunta correctamente. Tenga en cuenta:
Estaba tratando de hacer E / S en serie para escribir un cargador de arranque para el PIC18F97J60, ya que el cargador de arranque provisto por mi proveedor detiene el envío / recepción con el software PCloader después de una descarga hexadecimal de la aplicación parcial del usuario. También garantiza que el puerto RS232 pueda enviar y recibir. Por otra parte, el cargador de arranque de Microchip descrito en AN1310 también se apesta al recibir datos.
Mi aplicación de muestra (un gestor de arranque) puede transmitir pero nunca recibe nada. Estoy en la sopa: o necesito un nuevo cargador de arranque o mi aplicación debe funcionar. Nunca he enfrentado un problema así en mis 12 años de desarrollo y me siento como un tonto.
Otros detalles que solicitó son los siguientes:
- Tenía 10-12 tarjetas PIC18F97J60 con MAX232 en C6 / C7 para Serial I / O. El problema es el mismo para todos los tableros (de diferentes lotes).
- Deseo hacer 9600 baudios, 8 bits, sin paridad, 1 parada, sin apretón de manos, sin interrumpir el intercambio de datos con RealTerm ( Better Than Hypertermin - Displays HEX Code ).
- Los cálculos de mi reloj y velocidad de transmisión son perfectos para 41.6667MHz. He establecido
OSCTUNE = 0x40
yBAUDCON = 1084
. Puedo recibir perfectamente en la PC con RealTerm. - Mi programa no puede recibir nada en el PIC pero puede transmitir.
- Probé el sondeo y la interrupción, pero nada funciona.
El fragmento de código es el siguiente:
void putchar(unsigned char Char)
{
//Wait for (TSR==1)
while(TXSTA1bits.TRMT!=1);
//Trasmit Current Data
TXREG1= Char;
//Wait for (TSR==1)
while(TXSTA1bits.TRMT!=1);
}
void putstr(unsigned char *String)
{
do
{
putchar((*String));
}while(*String++);
//CR
putchar(CR);
//LF
putchar(LF);
}
void main(void)
{
unsigned char RS232[] = "RS-232";
OSCTUNE = 0x40;
TXSTA1 = 0x24;
RCSTA1 = 0x90;
BAUDCON1=0x08;
SPBRGH1=0x04;
SPBRG1=0x3C;
while(1)
{
putstr(RS232);
Delay10KTCYx(200);
if(PIR1bits.RC1IF == 1)
{
MYChar = RCREG1; //*** No OERR & FERR present, RC1IF never gets set ***
}
}
}