Estoy intentando que el atmega328 se comunique a través del puerto serie con mi PC. Estoy usando hiperterminal para devolver las entradas de caracteres del teclado. Estoy usando el chip max3232 para comunicarme con la computadora.
Cuando intento compilar da un error y dice que las variables en esta función no están declaradas, pero no son variables sino asignaciones de registro de datos.
Si sustituyo el carácter 'n' en las asignaciones de registro a un número que compilará y programará, pero no se muestra información en el hiperterminio.
¿Qué debería ser la 'n' también?
Mi RX está en el pin 2 y TX en el pin 3, si eso ayuda. Se está programando porque he hecho los programas de luz intermitente.
unsigned char USARTReadChar( void )
{
//Wait untill a data is available
while(!(UCSRnA & (1<<RXCn)))
{
//Do nothing
}
//Now USART has got data from host
//and is available is buffer
return UDRn;
}
EL CÓDIGO DE FUENTE ENTERO
#define FOSC 1843200 // Clock Speed
#define BAUD 9600
#define MYUBRR FOSC/16/BAUD-1
//This function is used to initialize the USART
//at a given UBRR value
void USARTInit(unsigned int ubrr)
{
//Set Baud rate
UBRR0H = (ubrr>>8);
UBRR0L = ubrr;
//Enable The receiver and transmitter
UCSR0B = (1<<RXEN0)|(1<<TXEN0);
// Set fram format: 8data 2stopBit
UCSR0C = (1<<USBS0)|(3<<UCSZ00);
}
//This function is used to read the available data
//from USART. This function will wait untill data is
//available.
unsigned char USARTReadChar( void )
{
//Wait untill a data is available
while(!(UCSR0A & (1<<RXC0)))
{
//Do nothing
}
//Now USART has got data from host
//and is available is buffer
return UDR0;
}
//This fuction writes the given "data" to
//the USART which then transmit it via TX line
void USARTWriteChar(unsigned char data)
{
//Wait untill the transmitter is ready
while(!(UCSR0A & (1<<UDRE0)))
{
//Do nothing
PORTD ^= 1 << PINB2;
}
//Now write the data to USART buffer
UDR0 = data;
}
int main(void)
{
DDRB |= 1 << PINB2;
//Varriable Declaration
char data;
USARTInit(MYUBRR);
//Loop forever
while(1)
{
//Read data
data = USARTReadChar();
/* Now send the same data but but surround it in
square bracket. For example if user sent 'a' our
system will echo back '[a]'.
*/
USARTWriteChar('[');
USARTWriteChar(data);
USARTWriteChar(']');
}
}