Bom dia , sou novo no forum, gostaria de colocar uma questao que nao estou a conseguir resolver...
Estou actualmente a fazer um projecto no qual irei usar a comunicação rs232 com atmega88, interegindo com um terminal.
para testar fiz um codigo que enviaria uma string, no entanto nao estou a conseguir obter essa string no terminal, ja verifiquei que existe comunicação entre o meu atmega e o computador, fazendo apenas variar o tempo posso ver a demora no terminal. mas a string nao aparece, aparecendo somente caracteres estranhos...
aqui vai o codigo...
#define F_CPU 1000000
#include <stdio.h>
#include <avr/io.h>
#include <util/delay.h>
#define BAUDRATE 9600
#define BAUD_PRESCALLER F_CPU/16/BAUDRATE-1
//declaração das funções
void USART_init(void);
unsigned char USART_receive(void);
void USART_send( unsigned char data);
void USART_putstring(char* StringPtr);
char String[]="OLA"; /*String[] que dizer que é um
array, mas ao colocar-mos o texto entre "" indicamos ao
compilador que é uma string e ele coloca automáticamente o
terminador null e temos assim uma string de texto usavel*/
int main(void){
USART_init(); //Inicializar a usart
while(1){ //Loop infinito
USART_putstring(String); //Passamos a nossa string á função que a escreve via serial
_delay_ms(50); //E a cada 5s re-enviamos o texto
}
return 0;
}
void USART_init(void){
UBRR0H = (uint8_t)(BAUD_PRESCALLER>>
;
UBRR0L = (uint8_t)(BAUD_PRESCALLER);
UCSR0B = (1<<RXEN0)|(1<<TXEN0);
UCSR0C = ((1<<USBS0)|3<<UCSZ00);
}
unsigned char USART_receive(void){
while(!(UCSR0A & (1<<RXC0)));
return UDR0;
}
void USART_send( unsigned char data){
while(!(UCSR0A & (1<<UDRE0)));
UDR0 = data;
}
void USART_putstring(char* StringPtr){
while(*StringPtr != 0x00){
USART_send(*StringPtr);
StringPtr++;
}
}
Será que me podem ajudar?
Cumprimentos